一个表的布尔字段可以正负命名。
例如调用一个字段:
"ACTIVE" , 1=on / 0=off
or
"INACTIVE" , 0=on / 1=off
是否有适当的方法来做出这种类型的表设计决策,或者它是任意的吗?
我的具体示例是带有 bool 字段(私有/公共)的消息表。当用户输入新消息时,将使用表单复选框设置此字段。将字段命名为“公共”与“私有”有好处吗?
谢谢。
我总是喜欢正面的名字来避免代码中的双重否定。 “不是不活跃”常常是阅读时反复考虑的原因。 “处于非活动状态”始终可以写成“if (!Active)”,同时利用内置语言语义。
个人喜好:
在您的特定用例中,该字段应命名为 IsPublic 或 IsPrivate——当用户勾选复选框时,无论哪个名称都会导致 True 答案。
我不会不同意其他一些答案,但绝对避免不正确的答案,即不要总是使用双重否定
始终使用正面名称。
如果使用否定名称,你很快就会陷入双重否定。并不是说双重否定是火箭手术,但这是一个大脑循环,那些很有价值:)
始终使用积极的。
更简单。
使用否定的逻辑极端:如果 InActive 优于 Active,那么为什么不使用 InInActive 或 InInInActive?
因为它会不那么简单。
处理这些情况的正确方法是创建一个表来存放与列关联的值,并在两个表之间创建外键关系。即:
WIDGETS
表:
WIDGET_ID
WIDGET_STATUS
(fk)WIDGET_STATUS_CODES
表:
WIDGET_STATUS_CODE
(pk)DESCRIPTION
如果可能,
WIDGET_STATUS_CODE
将是自然键(即:ACT 表示“活动”,INA 表示“非活动”)。这将使记录更易于阅读,但并非总是可行,因此您需要使用人工/代理键(如自动编号/序列/等)。
你想这样做是因为:
尽量避免数据库中的布尔字段。
第一,RM 有比布尔字段更好的方式来表示真值信息:通过表中存在的元组。
第二,布尔字段在查询时是非常糟糕的鉴别器。对它们进行索引实际上是完全疯狂的,因此在查询时,布尔字段的存在根本没有任何好处。