我知道,除非指定,否则外键列可以为 NULL 和重复(至少在 Oracle SQL 中)。将外键列声明为不为空且唯一或保持原样是更好的做法吗?这是应该根据手头的情况做出的决定,还是应该遵循的一般规则?
最佳答案
所有数据库都允许外键为 NULLable 和非 UNIQUE。您选择如何声明特定外键取决于业务案例。
考虑下表,这是一家向 secret 特工销售物资的公司使用的表格。
CountryList (
CountryCode NOT NULL PRIMARY KEY,
CountryName NOT NULL
)
SecretAgents (
CodeName NOT NULL PRIMARY KEY,
HomeCountryCode FOREIGN KEY REFERENCES CountryList(CountryCode)
)
显然,HomeCountryCode 不会是唯一的,因为您可能会在每个国家/地区出售给多个 spy 。它可以为空吗?这取决于您的商业模式是否要求每个客户声明他们的祖国。如果模型允许您与没有祖国的人做生意,或者不想向您透露祖国,那么该字段应该是 NULLable。但是,如果您的业务模型中没有考虑无状态参与者,您应该声明该列为 NOT NULL,这样就不会创建无效的客户记录。
现在,考虑附加表
SpyMasters (
CountryCode NOT NULL PRIMARY KEY References CountryList(CountryCode),
Name NOT NULL PRIMARY KEY
)
此表列出了那些拥有 spy 大师的国家的(单例) spy 头目。并非所有国家都会出现在此列表中,但每个国家只能出现一次。在这种情况下,CountryCode 字段是 UNIQUE——但您不必明确声明它,因为 PRIMARY KEY 始终包含唯一性。
关于sql - 外键列应该是唯一的而不是空的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45599275/