我正在进行数据库设计,其中表链接到一个或另一个表,产生总共5个关系。如果表链接到表1,则指向其他4个表的链接为NULL。如果我用了5把外国钥匙,结果我会买一块瑞士奶酪!
我有桌子"中心"与地区或州,部门,村庄或城市相关联。如果中心属于区域,则不能再属于州/部门/村/城市。
我不能只有一个属性"中心型"这将显示该中心的链接,因为我还需要知道它与哪个区域,州等实体完全相关。
此致
RLO
答案 0 :(得分:0)
你可以同时拥有属性" center-type" (它标识了您正在处理的中心类型)和id属性(让我们说" idCenter"),它们链接中心类型实例的id,以及两者的组合将告诉您中心的确切类型和链接的中心类型的实例。
中心类型和idCenter是外键(所以这样你就有2个FK而不是5个。)
编辑:实际上这个答案有冗余。最好为每个不是中心的表创建一个FK。例如,表区将具有以下属性:
disctrict(id_district,id_center,...)。
表村将是:
village(id_village,id_center,...)。
在所有情况下,id_center都是以FK为中心。通过这种方式,您将了解每个中心的中心类型"它属于(抛出FK)。
答案 1 :(得分:0)
在这里提出并回答了类似的问题:https://dba.stackexchange.com/questions/113122/conditional-foreign-key-relationship/114281#114281
您可以拥有的是一个中心表,其中包含乡村,城市等常见的数据。这包括中心的ID以及它所在的中心的指标:城市,州,村,区或部门。然后是每种中心的单独表格,其中PK也是FK,返回 Center 表。
因此,必须与中心有关系的所有实体都有一个FK到中心表,它告诉你它是什么类型的中心,因此哪个其他表包含有关中心的其他信息。< / p>