我正在设计一个包含消息和信使的数据库。
create table Message(
MessageID int,
MessengerID int,
Content nvarchar(max)
)
create table Messenger(
MessengerID int,
MessengerName nvarchar(100)
)
有时候信使不明。在这种情况下你会使用NULL值,还是在Messenger表中使用未知信使的保留记录?我希望看到一个简短的解释,为什么一种解决方案比另一种更好。
答案 0 :(得分:4)
我会使用NULL。
这正是NULL的存在。说“我不知道它是什么。”
在表格中保留记录总是很痛苦。您现在必须对您的用户说,嘿,如果您愿意,可以添加更多信使,您可以删除它们,甚至可以修改,但不要删除此行,也不要删除该行。这会导致不必要的并发症。
答案 1 :(得分:0)
都不是。我会使用另一个表作为信使信息:
CREATE TABLE MessageMessenger(
MessageID int NOT NULL PRIMARY KEY REFERENCES Message (MessageID),
MessengerID int NOT NULL REFERENCES Messenger (MessengerID));
(我注意到你的所有列都可以为空,你的表没有键。我先修复它!)
SQL中的NULL不能准确表示“未知”的语义。以这种方式使用它经常会导致矛盾和不正确的结果,如果您设计的表格可以准确地模拟数据库应该表示的情况,那么就没有必要。
不使用可空外键的另一个原因是不同的DBMS不同意它们的工作方式,用户可能无法理解它们或正确使用它们。