我有两张桌子:
我会使用哪些代码,因此我可以在Person和Player表中使用 personID 作为主键?
我知道 playerID wold也必须是Player中的外键。有什么想法吗?
答案 0 :(得分:2)
目前尚不清楚您需要两个表来获取此信息,除非有代表的人不是玩家。我们假设情况就是这样(其他人可以是教练,父母,裁判等)。此外,即使教练确实出生,他们的出生日期对系统来说也不重要(因此不需要将出生日期转回人员表)。另外,假设您正在与只上过一所学校的人打交道;如果他们去年在不同的学校,玩家记录将在季节之间更新。 (如果您需要有关不同年份参加的学校的历史信息,您将需要一个不同的表格结构。)假设您在适当的时候会向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整数而不是学校名称来加入;这往往更紧凑。
答案 1 :(得分:2)
首先,您还应该在personID
表中添加Player
。
完成后,您可以将personID
作为Player
表的主键,也可以有一个单独的playerID
列,这可以是主键
您选择哪一个取决于您的应用程序的要求。如果您认为某个玩家只与一个人相关联,而且只有一个人,则personId
可以成为主键。
但是在很多情况下你需要一个单独的playerId
(我建议有一个)。例如,如果不对电脑游戏进行建模,则所有玩家可能不是人 - personId
将是null
。此外,如果您对与足球运动员不同的篮球运动员进行建模,则同时玩这两种游戏的人可以在玩家表中具有多个条目(具有相同personId
的多个记录)。
答案 2 :(得分:0)
您是否可以像管理人员表一样添加personID字段并进行管理?每次插入播放器时,都必须插入具有相同ID的相应人员。
当然,如果你的人的概念是抽象的,那么它应该完全在同一个表中
答案 3 :(得分:0)
我建议您将出生日期字段从“玩家”表格移动到“人物”表格(毕竟,一个人没有多个出生日期!),然后将“personID”字段添加到'玩家'表。如果一个人有多个学校(小学,中高,高),那么'玩家'表的主键应该是personID + school。
将一个表的主键作为第二个表中的主键肯定没有问题;这样的第二个表可以帮助节省磁盘空间并缩短访问时间。假设存在一个大文本字段存储给某些人 - 但不是所有人 - 。将此字段存储在辅助表中(使用相同的主键)将意味着只有需要此字段的人才会在辅助表中显示记录。