在SQL数据库中命名布尔(位)值

时间:2010-09-21 15:54:21

标签: sql naming-conventions

AdventureWorks Data Dictionary指定[EmailPromotion]表格中的[Contact]列是int,并且:

0 = Contact does not wish to receive e-mail promotions.
1 = Contact does wish to receive e-mail promotions.

[Employee].[CurrentFlag]使用bit,如下所示:

0 = Inactive
1 = Active

我的问题分为两部分:

  • 是否有充分理由使用int数据类型bit(两种用途都会记录在案)?
  • 您建议使用布尔类和类布尔列的命名约定? (例如IsActive,ActiveFlag,Active)

3 个答案:

答案 0 :(得分:6)

对于第一部分,他们可能允许将来的状态代码(虽然使用该列名称很难想象它可能是什么......)。

你会在第二个问题上发现很多不同意见,但在这种情况下我更喜欢IsActive作为名称。我发现它读得很好,并防止你使用像IsInactive这样的代码时会遇到双重错误。

答案 1 :(得分:2)

无论你的船漂浮着什么。唯一重要的是在整个数据库中命名约定和一致性。

使用int作为标记是不合理的,我会使用tinyint,我几乎不会使用bit,因为我总是对各种各样的那里的可能性。

我通常将这些列命名为Active(如果只有两种状态)和StatusId(如果有多个状态)。

答案 2 :(得分:2)

  

是否有充分的理由在位数中使用int数据类型(两种用法都会被记录)?

始终支持INT。虽然BIT变得越来越普遍,但我打赌支持只是具有CHECK约束的INT列的掩码。有good asktom question about why Oracle doesn't have a specific BIT/BOOLEAN data type ...

  

您建议使用布尔类和类布尔列的命名约定? (例如IsActive,ActiveFlag,Active)

与编程相同,它们应该以“is”作为前缀,并且在读取时,应该呈现是/否问题以推断列是布尔指示符。所以“isActive”将是我的决定,但我会探究这种情况是否需要一个STATUS表&外键。