我有两张表:
- Person(personID,name,address,phone,email)
- Player(dateOfBirth,school)
如果我想在Person和Player表中都使用Person中的personID作为主键,应该用什么代码?
我知道playerID也必须是Player表中的外键。有什么想法吗?
我有两张表:
如果我想在Person和Player表中都使用Person中的personID作为主键,应该用什么代码?
我知道playerID也必须是Player表中的外键。有什么想法吗?
CREATE TABLE Player
(
PlayerID INTEGER NOT NULL PRIMARY KEY REFERENCES Person(PersonID),
DateOfBirth DATE NOT NULL,
School VARCHAR(20) NOT NULL REFERENCES School(SchoolName)
);
我假设学校列表是有限的。您可以使用SchoolID整数代替学校名称进行连接;这通常更加紧凑。
首先,Player
表中应该有personID
。
完成上述操作后,你可以将personID
作为Player
表的主键,或者可以拥有一个单独的playerID
列,并将其作为主键。
选择哪种方式取决于你的应用程序要求。如果你认为一名玩家只与一个人相关联且绝对只有一个人,则personId
可以是主键。
但在许多情况下,你需要一个单独的playerId
(我建议使用),例如,如果你不是模拟计算机游戏,则并非所有玩家都是人- personId
将为null
。此外,如果你将篮球运动员和足球运动员建模为不同的对象,那么打这两个游戏的人可能会在Player
表中具有多个条目(具有相同的personId
的多个记录)。
你能否添加一个personID字段,并以与person表相同的方式进行管理?每次插入一个player,都需要插入相应的具有相同id的person。
当然,如果你的person概念是抽象的,那么它肯定应该在同一张表中。
我建议您将出生日期字段从“Player”表移至“person”表中(毕竟,一个人不会有多个出生日期!),然后在“player”表中添加“personID”字段。如果一个人有多所学校(小学,初中,高中),则“player”表的主键应为personID + school。
让一个表的主键作为第二个表的主键肯定没有问题;这样的第二个表可以帮助节省磁盘空间并提高访问速度。假设有一个要存储的大型文本字段,但并非所有人都需要存储该字段。在一个辅助表中存储此字段(具有相同的主键)意味着只有需要此字段的人才会在辅助表中有记录。