外国人是否必须是强制性的,并且有更好的方法吗?

时间:2015-11-29 22:00:36

标签: sql sql-server

我正在创建一个在线视频游戏数据库,我有两个表,其中外键可能为空。它是用户和团队表,团队表与用户表相关的是“1对多”,但是用户可能不在团队中,因此外键不是强制性的,是否有更好的方式来做到这一点我觉得比如使用null外键是不好的做法

1 个答案:

答案 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)
)

这里的问题是,您在UserTeamUser之间建立了一对一的关系,并且您只在一个字段中执行此操作。想象其他字段(开始日期,位置等)可能很容易,但仅因为您不喜欢空值而为一个字段制作整个表格有点奇怪。