正或负布尔字段名称?

问题描述 投票:0回答:7

一个表的布尔字段可以正负命名。

例如调用一个字段:

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

问题

是否有适当的方法来做出这种类型的表设计决策,或者它是任意的吗?


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

谢谢。

sql database-design data-modeling boolean
7个回答
24
投票

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


18
投票

个人喜好:

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

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


3
投票

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


1
投票

始终使用正面名称。

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


1
投票

始终使用积极的。

更简单。

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

因为它会不那么简单。


1
投票

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

WIDGETS
表:

  • WIDGET_ID
  • WIDGET_STATUS
    (fk)

WIDGET_STATUS_CODES
表:

  • WIDGET_STATUS_CODE
    (pk)
  • DESCRIPTION

如果可能,

WIDGET_STATUS_CODE
将是自然键(即:ACT 表示“活动”,INA 表示“非活动”)。这将使记录更易于阅读,但并非总是可行,因此您需要使用人工/代理键(如自动编号/序列/等)。

你想这样做是因为:

  • 状态指示是可读的(这是原始问题)
  • 需要定义/使用更多状态的未来证明
  • 提供引用完整性,因此无法将值设置为 2、3、4 等。
  • 空间便宜; 允许错误数据没有任何效率

-2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.