gpt4 book ai didi

mysql - 如果是,则带有详细信息的 bool 属性?

转载 作者:行者123 更新时间:2023-11-29 23:21:07 25 4
gpt4 key购买 nike

在我的表“Phones”中,我有一个 bool 列“memoryCard”。

如果手机不支持外接存储卡,则memoryCard = False,否则为True。

但是如果 memoryCard = True,那么我必须将存储卡的类型放入数据库中。

如何建模?我应该在“Phones”表中创建另一列“memoryCardType”吗?或者我必须创建一个包含卡内存类型的单独表?

非常感谢。

最佳答案

首先,您应该有一个单独的存储卡表。您的手机表应该有一个对此表的外键引用,其中有一列名为 MemoryCardId

接下来,你有一个选择。您将有一个可以为NULLMemoryCardId 字段。您可以将 NULL 值视为根本没有存储卡。如果是这样,您可以在手机上放置一个 View 来获取 bool 值:

create v_phones as
select p.*, (MemoryCardId is not null) as HasMemoryCard
from phones;

否则,您可以有一个单独的标志(正如您在问题中所建议的那样)。仅当标志值为 true 时,您才会使用 MemoryCardId。在大多数数据库中,您可以添加 check 约束以确保 id 和 flag 对齐。唉,在 MySQL 中,您需要使用触发器来完成此操作。

编辑:

显式表相对于枚举的优势:

  • 您不会受到枚举中值数量的任意限制(请参阅 here )。
  • 如果存储卡名称实际上是数字,解析就不会混淆。
  • 如果您愿意,您可以存储有关存储卡的其他信息 - 制造商、发行日期、包装颜色。
  • 该解决方案更易于移植到其他数据库。

关于mysql - 如果是,则带有详细信息的 bool 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com