2

我有一个关于这种情况的最佳实践的问题:我有一个 mysql 表,其中包含(除了其他列之外)两列都是 TINYINT(1) 但它们不能都在 0 上,它们可以是 0 和 1 , 1 和 0, 1 和 1 但没有 0 和 0。控制这个的最好方法是什么?甚至是控制这个的方法吗?

编辑:我想我会选择 ENUM 选项,但是如果我将 mysql 与实体框架结合起来,这将如何执行?

4

4 回答 4

3

我建议使用一个枚举,结合两个值。它们的存储效率很高。所以它会enum('0;1','1;0','1;1') not null

编辑:

鉴于附加信息,并遵循@landons 的建议,仅供记录:枚举将是

delivery enum('physical', 'digital', 'both') not null;

您可以使用(也关注@landon)

delivery SET('physical','digital');

但这将允许空值。

于 2013-06-20T18:46:29.483 回答
3

我能想到的几个选项:

  • 在更新/插入触发器之前验证
  • 在应用程序逻辑中验证
  • 添加具有可接受状态的外键引用
  • 将 ENUM 与所有可能的组合一起使用,并且不允许 NULL

我个人可能会使用最后一种方法。

编辑:

刚刚意识到——SET数据类型完美地完成了这一点。

于 2013-06-20T18:47:19.440 回答
0

一种解决方法是将您的两列合并到一个 BIT(2) 列中,然后当您执行更新时,您可以测试您没有将该列更新为 b'00'。

至于内置预防,我不相信有办法做到这一点。

于 2013-06-20T18:44:18.067 回答
0

也许您可以通过将它们放在一列中来实现这一点。

  • 第一个数字代表1
  • 第二个数字代表2

1然后,您的列可以包含 values23。当它是时0,它们都是。

和第二23数字将是1。和13一个数字将是1

于 2013-06-20T18:45:24.157 回答