12

表的布尔字段可以使用正数与负数来命名...

例如,调用一个字段:

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

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


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

谢谢。

4

7 回答 7

23

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

于 2009-09-18T17:22:28.960 回答
18

我的个人喜好:

  • 对布尔字段使用“Is”、“Has”等前缀,以明确其用途。
  • 始终以肯定的方式命名变量。对于 Active/Inactive,我将其命名为 IsActive。
  • 除非您确实有特定目的,否则不要使位字段可为空。

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

于 2009-09-18T17:24:04.010 回答
2

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

于 2009-09-18T17:54:59.033 回答
1

始终使用正面的名称。

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

于 2009-09-18T17:29:00.873 回答
1

始终使用正面。

它更简单。

将否定运用到逻辑极端:如果 InActive 比 Active 更好,那么为什么不是 InInActive 或 InInInActive?

因为它会不那么简单。

于 2009-09-18T17:33:21.340 回答
1

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

WIDGETS桌子:

  • WIDGET_ID
  • WIDGET_STATUS(fk)

WIDGET_STATUS_CODES桌子:

  • WIDGET_STATUS_CODE(PK)
  • DESCRIPTION

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

你想这样做是因为:

  • 可以读取状态指示的内容(这是原始问题)
  • 需要定义/使用更多状态的未来证明
  • 提供参照完整性,因此无法将值设置为 2、3、4 等。
  • 空间便宜;允许不良数据没有任何效率
于 2009-09-18T17:33:42.917 回答
-2

尽量避免在数据库中使用布尔字段。

第一,与通过布尔字段相比,RM 有一种更好的方式来表示真值信息:通过表中元组的存在。

第二,布尔字段在查询时是非常糟糕的鉴别器。对它们进行索引实际上是完全疯狂的,因此在查询时,布尔字段的存在根本没有任何好处。

于 2009-09-18T20:49:40.047 回答