出于好奇和缺乏明确的答案......
我只是查看从第三方发送给我们的一些数据,他们的“性别”字段是[0,1],表示女性(0)或男性(1)。
有没有更好的理由使用[0,1]而不是[“F”,“M”]?
是否取决于场景和字段与其值之间的直观性?
数据访问速度和/或大小限制?
如果月亮满了?
答案 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)
为什么不使用枚举?这允许你
答案 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)
真的取决于数据库。
答案 15 :(得分:0)
阅读完所有这些并做了一些研究后,我得出的结论是:
[0,1]字段很有用,因为它 国际化,可以扩大 在何时加入更多条款 链接到静态表 定义
[“Y”,“N”]和[“T”,“F”]可能 在世界范围内得到认可,但相关 英语。
[“M”,“F”]性别类型字段 基于英语并限制 考虑某人的用法 不想提及他们的性别或性别是不确定的 (雌雄同体)
答案 16 :(得分:0)
由于性别实际上不是二元的 - 男性和女性之间存在连续的“双性人”条件,而且根本没有性别的人 - 最好使用浮点型。女性为0(默认情况下,至少在哺乳动物中),男性为1,中间条件为中间值,无价值者为NaN。
但请记住,这永远不会完全适用,因为人类的心脏没有任何类型。虽然复杂通常是一个很好的近似值。