两个不能同时为0的tinyint列的最佳实践

时间:2013-06-20 18:39:49

标签: mysql tinyint

我对这种情况的最佳做法有疑问: 我有一个mysql表包含(除了其他列)两个列都是TINYINT(1)但它们不能同时在0,它们可以是0和1,1和0,1和1但没有0和0。 控制它的最佳方法是什么?甚至可以控制这个?

编辑:我想我会选择ENUM选项,但如果我将mysql与Entity Framework结合使用会如何执行?

4 个答案:

答案 0 :(得分:3)

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

编辑:

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

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

你可以使用(也跟随@landon)

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

但这会允许空值。

答案 1 :(得分:3)

我能想到的一些选择:

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

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

修改

刚刚意识到 - SET数据类型完美地实现了这一点。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

也许你可以通过将它们放在一列来实现这一目标。

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

您的列可能包含值123。当它是0时,它们都是。{/ p>

使用23,第二个数字为1。对于13,第一个数字为1