13

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

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

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

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

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

如果满月?


使用 [0,1] 与 ["Y","N"] 与 ["T","F"] 有什么区别?

4

17 回答 17

22

如果您想混淆您的数据以使其他程序员难以理解,最好使用 0 和 1 而不是 F 和 M。

否则,不,没有优势。

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

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

于 2009-12-15T16:05:34.880 回答
7

我们不是忽略了明显的使用 -> 外键吗?我知道最初的问题暗示了一个位字段,但如果它是真正的数字,0,1 性别列可能指的是性别表吗?

于 2009-12-15T16:23:28.667 回答
6

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

此外,从哲学上讲,我们对性别/性的概念比在二元领域中的解释要灵活得多。例如,当同性婚姻法通过时,我受雇修复马萨诸塞州的一项主要政府申请,因为当时对婚姻做出了许多假设,但后来都失效了。

于 2009-12-15T16:09:25.467 回答
4

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

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

于 2009-12-15T16:06:59.620 回答
3

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

于 2009-12-15T16:08:15.423 回答
3

奇怪的是没有人提到过语言。
M/F 英文没问题,但其他语言呢?

然后,您总是可以争辩说应该将另一个表用于列表。
虽然在这里我们正在创建一个复杂的解决方案。

只有当明确只有 2 个选择时,才应该使用位(或布尔)字段。

我的两分钱。

于 2009-12-15T17:12:44.980 回答
2

真的没关系。

于 2009-12-15T16:04:04.700 回答
2

如果您真的非常非常担心大小限制,[0,1] 会为您节省一些。

于 2009-12-15T16:05:27.270 回答
2

嗯,比较 Ints 比比较 Strings 容易一点;在比较字符串时,您必须考虑大写和小写。

于 2009-12-15T16:06:01.340 回答
2

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

于 2009-12-15T16:09:38.603 回答
2

为什么不使用枚举?这使您可以

  1. 确保您必须始终使用正确的类型,从而潜在地减少错误
  2. 允许数据库潜在地优化使用的位数
  3. 免费提供人类可读的输出
于 2009-12-15T21:31:15.460 回答
1

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

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

于 2009-12-15T16:09:25.203 回答
1

好吧,在 SQL Server 中它肯定很重要。在这种情况下,您应该使用位列类型(1/0 或 True/False - 但是您想说)。与 char(1) 的 1 字节相比,这只是 1 位的存储空间。

于 2009-12-15T16:34:02.033 回答
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' 表示 True/Yes 而 '0' 表示 False/No - 在电子和软件中并非总是如此,这取决于程序员的一致性以及字段命名的好坏是...

于 2009-12-15T17:13:44.933 回答
1

由于性别实际上不是二元的——男性和女性之间存在连续的“双性”条件,以及根本没有性别的人——最好使用浮点类型。0 代表女性(默认值,至少在哺乳动物中),1 代表男性,中间条件为中间值,没有值的为 NaN。

但请记住,这永远不会完全适用,因为人心没有类型。尽管复数通常是一个很好的近似值。

于 2009-12-15T21:36:51.717 回答
0

真的取决于数据库。

  • SQL Server 使用了一点
  • MySQL 使用 tinyint
  • 存储 T/F 将至少是一个 char(1)
于 2009-12-15T16:10:38.463 回答
0

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

  • [0,1] 字段很有用,因为它是国际性的,当链接到静态定义表时,可以扩展以包含更多子句。

  • ["Y","N"] 和 ["T","F"] 可能在世界范围内都被认可,但与英语有关。

  • ["M","F"] 性别类型字段也是基于英语的,并且在考虑不想提及其性别或性别不确定(雌雄同体)的人时限制使用

于 2009-12-15T21:26:58.760 回答