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