MySQL DB:数据库列,枚举或两个布尔列中的Nullable bool,哪一个更有效?

时间:2015-05-11 11:38:39

标签: mysql entity-framework asp.net-mvc-5

我首先使用MVC 5进行EF 6代码。我的一个类有一个属性可能意味着三件事:

  • 由用户确认
  • 尚未回答
  • 用户拒绝

我的问题是,我应该使用什么?

  1. 可以为空的布尔,显然是映射到上面的选择
  2. 枚举(该列将整数存储为列出状态的另一个表的外键)
  3. 或两个bool列(HasAnswered,IsConfirmed),只有在用户回答时才会访问IsConfirmed
  4. 我非常感谢你们的每一个意见。

1 个答案:

答案 0 :(得分:0)

免责声明..我认为您建议将枚举作为列数据类型

以上都不是。

  • 枚举 ..如果想为每个状态添加更多数据或重命名一个,该怎么办?
  • Nullable bool ..如上所述,加上如果您需要添加其他状态?
  • 两个bool列 ..与上面相同,另外你可以介绍规范化问题。

我使用tiny_int被叫状态(或类似的东西)。

主要是为了灵活性..如果您需要数据库中的状态标题或需要为每个选项添加任何其他数据,您可以将其放在另一个表中并将其输入外键。如果您不需要在某处翻译数字。

另一种选择是将行动(答案)与州分开。

考虑一个答案表,其中一列表示确认或拒绝以及对原始表的引用。通过连接表格,可以分离出没有答案的原始行和已经确认/拒绝的行。

<强>更新

在回应Null的评论时,int更加强大......

状态数据库表:

id, title, description, priority, cost... (attach extra data to the status)

或者在PHP伪代码中(没有表格):

$query = new Query('SELECT * FROM table WHERE status = :status');
$query->bind('status'=>TableClass::STATUS_ANSWERED)

我并没有建议你把这些数字翻译到各处......就在某个地方。

关于int的最后一件好事是它将意义与工作区分开来......如果我想重命名其中一个enum,该怎么办?我使用外键更改了一行,或者使用enum更改了数百万。