正或负布尔字段名称

时间:2009-09-18 17:21:36

标签: sql database-design data-modeling boolean

表格的布尔字段可以使用正面和负面来命名......

例如,调用字段:

"ACTIVE" , 1=on / 0=off 
or
"INACTIVE" , 0=on / 1=off

问题: 是否有正确的方法来做出这种类型的表设计决策,还是任意的?


我的具体示例是带有bool字段(私有/公共)的消息表。当用户输入新消息时,将使用表单复选框设置此字段。命名“公共”与“私人”字段有什么好处吗?

感谢。

7 个答案:

答案 0 :(得分:19)

我总是喜欢积极的名字,以避免代码中的双重否定。 “不活动”通常是阅读时双重拍摄的原因。 “不活动”总是可以写成“if(!Active)”,同时利用内置语言语义。

答案 1 :(得分:15)

我个人的偏好:

  • 使用“Is”,“Has”等前缀作为布尔字段,以明确其目的。
  • 始终在肯定中命名变量。对于Active / Inactive,我将它命名为IsActive。
  • 除非你真的有特定的目的,否则不要让一点字段可以为空。

在您的特定用例中,该字段应命名为IsPublic或IsPrivate - 当用户勾选复选框时,无论哪个名称都会产生True答案。

答案 2 :(得分:2)

我不会不同意其他一些答案,但绝对避免错误的答案,而不是双重否定总是

答案 3 :(得分:1)

始终使用正面名称。

如果使用否定名称,您很快就会陷入双重否定。不是双重否定是火箭手术,但它是一个大脑循环,这些是有价值的:)

答案 4 :(得分:1)

始终使用正面。

这更简单。

将否定用于逻辑极端:如果InActive优于Active,那么为什么不InInActive或InInInActive?

因为它不那么简单。

答案 5 :(得分:1)

处理这些情况的正确方法是创建一个表来容纳与列关联的值,并在两个表之间创建外键关系。 IE:

WIDGETS表:

  • WIDGET_ID
  • WIDGET_STATUS(fk)

WIDGET_STATUS_CODES表:

  • WIDGET_STATUS_CODE(pk)
  • DESCRIPTION

如果可能,WIDGET_STATUS_CODE将是一个自然键(IE:ACT表示“活动”,INA表示“非活动”)。这会使记录更具人性化,但并不总是可行的,因此您可以使用人工/代理键(如自动编号/序列/等)。

你想这样做是因为:

  • 可读的状态是什么(这是原始问题)
  • 需要定义/使用更多状态的未来证据
  • 提供参考完整性,因此有人无法将值设置为2,3,4等。
  • 空间便宜;对于允许不良数据没有效率

答案 6 :(得分:-1)

尽量避免数据库中的布尔字段。

一,RM通过布尔字段表示真值信息的方式要好得多:通过表中元组的存在。

两个,布尔字段在查询时是非常糟糕的鉴别器。索引它们几乎是完全疯狂的,因此在查询时,布尔字段的存在根本没有任何好处。