在逻辑/布尔数据库字段中使用[0,1]与[“Y”,“N”]对比[“T”,“F”]?

时间:2009-12-15 16:02:54

标签: database-design boolean boolean-logic

出于好奇和缺乏明确的答案......

我只是查看从第三方发送给我们的一些数据,他们的“性别”字段是[0,1],表示女性(0)或男性(1)。

有没有更好的理由使用[0,1]而不是[“F”,“M”]?

是否取决于场景和字段与其值之间的直观性?

数据访问速度和/或大小限制?

如果月亮满了?


使用[0,1]与[“Y”,“N”]与[“T”,“F”]有什么不同?

17 个答案:

答案 0 :(得分:22)

如果你想混淆你的数据以使其他程序员难以理解它,最好使用0和1代替F和M.

否则,不,没有优势。

另外,我可以给你一个主要的劣势。我正在开发一个处理猪的应用程序。与其他一些雄性动物一样,雄性猪如果要用于食物而不是繁殖,则会被阉割,因为它会提高肉质。

该应用程序最初只跟踪男性和女性。但现在我们需要跟踪三种不同的性别:男性,女性和手推车(阉割猪的术语)。如果有人决定在一个字段中使用0和1来进行性行为,那么改变它会很痛苦。

答案 1 :(得分:7)

我们是否忽视了明显的用途 - >外键?我知道最初的问题隐含了一个字段,但如果它是真正的数字,那么0,1性别列是否可以引用性别表?

答案 2 :(得分:4)

除非您想要达到每个条目的位级别。我的意思是,你可以将0或1放入一位,而一个字符占用8位。在大多数情况下,这是不值得的。

我认为“M”或“F”更清晰,因为它提供了更多的语义信息。

答案 3 :(得分:4)

一个主要优点是,如果您的假设发生变化,可以自然地扩展允许两个以上值的列。

此外,从哲学角度来看,我们对性别/性行为的概念比在二元领域中所考虑的要流动得多。例如,当同性婚姻法通过时,我被聘请在马萨诸塞州修复一项重要的政府申请,因为很多关于婚姻的假设都被宣告无效。

答案 4 :(得分:3)

奇怪的是,noboby提到了语言 M / F在英语方面还可以,但其他语言呢?
然后,你总是可以争辩说另一张表应该用于列表 虽然我们在这里创造了一个复杂的解决方案
只有在确定只有2个选项时才应使用位(或布尔)字段
我的两分钱。

答案 5 :(得分:3)

我在sql中创建一个用户定义的类型,或者在c#/ vb中创建一个枚举类,并将0,1存储在数据库中,用于前面提到的大小和速度的原因。

答案 6 :(得分:2)

如果你真的,真的,真的非常担心尺寸限制,[0,1]会为你节省一些。

答案 7 :(得分:2)

为什么不使用枚举?这允许你

  1. 确保您必须始终使用正确的类型,可能会减少错误
  2. 允许数据库潜在地优化使用的位数
  3. 免费提供人类可读输出

答案 8 :(得分:2)

性能上的差异将是微不足道的。选择更直观的人类M / F.

答案 9 :(得分:2)

那么,比较Ints比比较字符串要容易一些;比较字符串时,您必须考虑大写和小写。

答案 10 :(得分:2)

真的没关系。

答案 11 :(得分:1)

简短的回答是否定的,因为单个字符占用与整数相同的存储空间。

答案很长,这取决于您的应用程序的编写方式。我曾经在数据库中创建了一个性别字段为0或1的应用程序,因为在应用程序层中我有一个枚举,它将Gender.Female和Gender.Male分别映射到0和1值。

答案 12 :(得分:1)

好吧,在SQL Server中它绝对重要。在这种情况下,您应该使用位列类型(1/0或True / False - 但是您想说出来)。这只是1位存储,而char(1)只有1位。

答案 13 :(得分:1)

对于记录中的标记,我更喜欢“Y”/“N”或“T”/“F”到1/0。

如果你想将标志短语作为问题,使用Y / N清楚地表明“Y”同意肯定地回答问题,而“N”表示否定答案,例如

SHOULD_SPECIAL_DISCOUNT_APPLY - Y or N

如果您想将该标记用作正面陈述, T / F更清晰。 T - 表示该语句为真,F表示该语句为假:

SPECIAL_DISCOUNT_APPLIES - T or F

0或1没有直接映射到True或False - 它取决于它的意思。你不能保证'1'表示真/是,'0'表示假/否 - 在电子学和软件中总是这样,这取决于程序员的一致性以及如何命名这些领域是...

答案 14 :(得分:0)

真的取决于数据库。

  • SQL Server使用了一点
  • MySQL使用tinyint
  • 存储T / F将至少为char(1)

答案 15 :(得分:0)

阅读完所有这些并做了一些研究后,我得出的结论是:

  • [0,1]字段很有用,因为它 国际化,可以扩大 在何时加入更多条款 链接到静态表 定义

  • [“Y”,“N”]和[“T”,“F”]可能 在世界范围内得到认可,但相关 英语。

  • [“M”,“F”]性别类型字段 基于英语并限制 考虑某人的用法 不想提及他们的性别或性别是不确定的 (雌雄同体)

答案 16 :(得分:0)

由于性别实际上不是二元的 - 男性和女性之间存在连续的“双性人”条件,而且根本没有性别的人 - 最好使用浮点型。女性为0(默认情况下,至少在哺乳动物中),男性为1,中间条件为中间值,无价值者为NaN。

但请记住,这永远不会完全适用,因为人类的心脏没有任何类型。虽然复杂通常是一个很好的近似值。