在我的“电话”表中,我有一个布尔列'memoryCard'。
如果手机不接受外部存储卡,那么memoryCard = False,否则为True。
但是如果memoryCard = True,那么我必须在我的数据库中输入存储卡的类型。
如何建模?我应该在表“电话”中创建另一列“memoryCardType”吗?或者我必须创建一个包含卡片mermory类型的单独表格?
非常感谢。
答案 0 :(得分:0)
首先,你应该有一张单独的存储卡表。你的手机表应该有一个对该表的外键引用,其中一列称为MemoryCardId
。
接下来,您可以选择。您的字段MemoryCardId
可以是NULL
。您可以将NULL
值视为根本没有存储卡。如果是这样,您可以在手机上放置一个视图来获取布尔值:
create v_phones as
select p.*, (MemoryCardId is not null) as HasMemoryCard
from phones;
否则,你可以有一个单独的标志(正如你在问题中建议的那样)。当标志的值为true时,您只能使用MemoryCardId
。在大多数数据库中,您可以添加check
约束以确保id和标志对齐。唉,在MySQL中,你需要用触发器来做这件事。
编辑:
明确表格优于enum
: