具有多个关系的数据库设计 Table

DB Design Table with multiple relationships

我正在研究一种数据库设计,其中 table 被 link 编辑到一个或另一个 table,总共产生 5 个关系。如果 table 被 link 编辑为 table 1,则 link 到其他 4 个 table 为 NULL。如果我使用 5 个外键,结果我将得到一个瑞士奶酪!

我有 table "center" linked 到地区或州、部门、村庄或城市。如果center属于district,就不能再属于canton/department/village/city.

我不能只有一个属性 "center-type" 来显示中心是什么 link 因为我还需要知道地区、州等的哪个实例。它正是 linked.

此致,

RLO

您可能同时拥有属性 "center-type"(标识您正在处理的中心类型)和 id 属性(假设 "idCenter"),它链接中心类型的实例,两者的组合将告诉您中心的确切类型和链接的中心类型的实例。

Center-type 和 idCenter 是外键(所以这样你会有 2 个 FK 而不是 5 个)。

编辑:实际上这个答案有冗余。最好为每个非中心的 table 创建一个 FK。例如,table 分区将具有以下属性:

disctrict(id_district, id_center, ...)。

Table 村庄将是:

村庄(id_village、id_center、...)。

在所有情况下,id_center 都是 FK 到中心。这样,对于每个中心,您将知道它属于什么 "center-type"(抛出 FK)。

在这里提出并回答了类似的问题:https://dba.stackexchange.com/questions/113122/conditional-foreign-key-relationship/114281#114281

您可以拥有的是一个中心 table,其中包含村庄、城市等共有的数据。这包括中心的 ID 和中心类型的指示符:市、州、村、区或部门。然后一个单独的table为每一种中心加上一个PK也是一个FK回到中心 table.

所以所有必须与中心有关系的实体都有一个 FK 到 中心 table 它告诉你它是什么类型的中心,从而告诉你其他哪个中心table 包含有关该中心的其他信息。