1

我的 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 表和每个 profile 表之间的关系是一对零或一。但是这些关系本质上只是一对多关系,在这种情况下,“多”意味着零或一(但不超过一)?如果是这样,我是否可以通过在 MaleProfile 表和 FemaleProfile 表中创建一个外键列来表达它们,就像您将任何一对多关系一样,每个表都指向 User 表中的 PK 列?我是否需要向配置文件表添加任何其他约束以保持参照完整性?

谢谢你。

4

2 回答 2

1

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

CREATE TABLE MaleProfile
 (UserId INT NOT NULL PRIMARY KEY
 REFERENCES "User" (UserId));
于 2013-08-09T20:38:31.080 回答
0

我认为您应该将员工 ID 号放在配置文件表中,并在这些表中强制执行唯一约束。虽然我真的想不出如何让一个人同时拥有一个男性和女性的条目,但我相信这条路是要走的路。

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

于 2013-08-09T14:49:48.483 回答