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

Database design 在逻辑/布尔数据库字段中使用[0,1]对[“Y”对[“N”对[“T”对[“T”对[“F”对[“F”]?,database-design,boolean,boolean-logic,Database Design,Boolean,Boolean Logic,只是出于好奇和缺乏明确的答案 我刚才看了一些从第三方发送给我们的数据,他们的“性别”字段是[0,1],表示女性(0)或男性(1) 是否有更好的理由在[“F”,“M”]上使用[0,1] 它是否取决于场景以及字段与其值之间的直观性 数据访问速度和/或大小限制 如果月亮是圆的? 使用[0,1]与[“Y”,“N”]与[“T”,“F”]有什么区别?这真的不重要。如果你真的,真的,真的担心尺寸限制,[0,1]将为您节省一些位。如果您想混淆数据,使其他程序员难以理解数据,最好使用0和1,而不是F和M 否则,就

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

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

是否有更好的理由在[“F”,“M”]上使用[0,1]

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

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

如果月亮是圆的?

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

这真的不重要。

如果你真的,真的,真的担心尺寸限制,[0,1]将为您节省一些位。

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

否则,就没有优势了

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


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

好吧,比较整数比比较字符串要容易一些;在比较字符串时,必须考虑大写和小写。

除非您希望降低到每个条目的位级别。我的意思是,你可以将0或1放入一个位,而一个字符占用8位。在很大程度上,这是不值得的


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

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

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


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

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


此外,从更哲学的角度来看,我们对性别/性的概念比在二元领域中解释的更具流动性。例如,当同性婚姻法通过时,我被雇来修正马萨诸塞州的一项重大政府申请,因为对婚姻做出了许多假设,但这些假设后来被宣布无效。

表现上的差异将是微不足道的。对于人类来说,使用更直观的方法M/F.

实际上取决于数据库

  • SQL Server使用了一点
  • MySQL使用tinyint
  • 存储T/F将至少是一个字符(1)

    • 我们不是忽视了外键的明显用途吗?我知道原来的问题隐含了一个位字段,但如果它是真正的数字,那么0,1性别列是否会引用性别表

      好吧,在SQL Server中,这肯定很重要。在这种情况下,您应该使用位列类型(1/0或True/False——不管您想说什么)。与字符(1)的1字节相比,这仅仅是1位存储。

      奇怪的是,没有人提到语言。
      M/F在英语中是可以的,但是其他语言呢?

      然后,您可以再次提出,列表应使用另一个表。
      尽管我们正在创建一个复杂的解决方案。

      位(或布尔值)字段只能在确定只有2个选项时使用。


      我的2美分。

      对于记录中的标志,我更喜欢“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”表示假/否-在电子和软件中并不总是这样,这取决于程序员的一致性以及字段的名称……

      在阅读了所有这些内容并做了一些研究之后,我得出了以下结论:

      • [0,1]字段很有用,因为其 国际性的,可以扩展的 在下列情况下,应加入更多条款: 链接到一个静态的 定义

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

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


        • 为什么不使用枚举?这样你就可以

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

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

          但请记住,这将永远不会