是否可以将数据库中所有表的主键作为一个表的外键引用?

时间:2016-08-24 05:09:36

标签: mysql database

我正在尝试制作这个演示数据库,我有像

这样的表格
Household(Primary key - hid)
People(Primary key - pepid)
ParChildOld(Primary key - pcoid)
Job(Primary key - empid)
School(Primary key - schlid)
Pension(Primary key - penid)  

现在,我对不同表格中每个家庭的人员的详细信息有各种各样的属性。

我可以获取所有表的主键并创建一个表,比如说AllKeys并将它们作为外键引用到这个特定的表中吗?

即:

AllKeys Table
Primary Key: AKid
-- Other columns include 
foreign keys- hid,pepid,pcoid,empid,schid,penid*

我不知道这是否愚蠢,但是,

是否允许这样的参考?它可以被视为标准化形式吗?以这种方式触发的查询是否可以有效地连接AllKeys表和任何其他表(取决于查询)?

1 个答案:

答案 0 :(得分:1)

如果所有这些表都相关,你可以这样做,但它会使第三和第四种常规形式失败,在表中同时具有功能和多值依赖。

考虑为一个家庭存储关系所需的大量重复:一个家庭(hid = 1),两个父母(pepid = 1,2),两个孩子(pepid = 3,4),四个父母 - 儿童关系(pcoid = 1,2,3,4),两个工作(empid = 1,2),两个孩子的学校(schlid = 1)和两个养老金(penid = 1,2)。

AKid | hid | pepid | pcoid | empid | schlid | penid
-----|-----|-------|-------|-------|--------|------
1    | 1   | 1     | 1     | 1     | null   | 1
2    | 1   | 1     | 2     | 1     | null   | 1
3    | 1   | 2     | 3     | 2     | null   | 2
4    | 1   | 2     | 4     | 2     | null   | 2
5    | 1   | 3     | 1     | null  | 1      | null
6    | 1   | 3     | 2     | null  | 1      | null
7    | 1   | 4     | 3     | null  | 1      | null
8    | 1   | 4     | 4     | null  | 1      | null

另一个问题是,假设表ParChildOld包含父列和子列,则无法指定是否为AllKeys中的pcoid引用,无论pepid是指父节点还是子节点。

简而言之,不要这样做。