这实际上是一对多关系吗?

时间:2013-08-09 14:30:46

标签: sql database database-design database-schema

我的PostgreSQL数据库中有三个表:

User - Contains a username and password
MaleProfile - Contains information related to each male user
FemaleProfile - Contains information related to each female user

最初,我没有单独的MaleProfile和FemaleProfile表,而是有一个Profile表。在那种情况下,我会在User表和Profile表之间建立一对一的关系。但我已经决定我真的需要男性和女性的单独的个人资料表。在这种新情况下,User表中的每条记录必须映射到MaleProfile表或FemaleProfile表中的一条且只有一条记录(但不能同时映射到两者)。从另一个方向,MaleProfile表中的每条记录都映射到User表中的一条且只有一条记录。每个FemaleProfile记录也是如此。

严格地说,User表和每个配置文件表之间的关系是一对零或一。但这些关系本质上只是一对多的关系,在这种情况下“很多”意味着只有零或一(但不超过一)?如果是这样,我会通过在MaleProfile表和FemaleProfile表中创建一个外键列来表达它们,就像任何一对多关系一样,每个列都指向User表中的PK列吗?我是否需要向配置文件表添加任何其他约束以维护参照完整性?

谢谢。

2 个答案:

答案 0 :(得分:1)

只需确保male / female表中的引用列对其具有唯一性约束以及外键约束。这是1对1/0的关系,而不是1对多的关系。

CREATE TABLE MaleProfile
 (UserId INT NOT NULL PRIMARY KEY
 REFERENCES "User" (UserId));

答案 1 :(得分:0)

我认为您应该将employeeID号放在配置文件表中,并在这些表中强制执行唯一约束。虽然我不能真正想到如何让某人同时进入男性和女性,但我相信这种方式是可行的。

查看https://stackoverflow.com/a/669015/1504882以查看与您类似的情况,但不同类型的员工。