我正在创建一个在线视频游戏数据库,我有两个表,其中外键可能为空。它是用户和团队表,团队表与用户表相关的是“1对多”,但是用户可能不在团队中,因此外键不是强制性的,是否有更好的方式来做到这一点我觉得比如使用null外键是不好的做法
答案 0 :(得分:0)
如果你拒绝使用可空字段作为外键 - 我个人对此没有任何问题 - 那么关于你唯一的选择就是联结表。您可以通过使用户标识唯一来阻止该表创建多对多关系。这将迫使它多对一。
CREATE TABLE UserTeam (
UserID INT NOT NULL,
TeamID INT NOT NULL,
CONSTRAINT PK_UserTeam PRIMARY KEY (UserID),
CONSTRAINT U_UserTeam_UserID UNIQUE (UserID, TeamID),
CONSTRAINT FK_UserTeam_UserID FOREIGN KEY (UserID)
REFERENCES dbo.User (UserID),
CONSTRAINT FK_UserTeam_TeamID FOREIGN KEY (TeamID)
REFERENCES dbo.Team (TeamID)
)
这里的问题是,您在UserTeam
和User
之间建立了一对一的关系,并且您只在一个字段中执行此操作。想象其他字段(开始日期,位置等)可能很容易,但仅因为您不喜欢空值而为一个字段制作整个表格有点奇怪。