我正在尝试制作这个演示数据库,我有像
这样的表格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表和任何其他表(取决于查询)?
答案 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是指父节点还是子节点。
简而言之,不要这样做。