数据库设计:数据库中两个相关的 table 都引用了第三个 table。如何保证三者关系连贯?

Database design: two related tables in a Database both reference a third table. How to ensure the three relations are coherent?

在我的数据库中,我有三个 table,如下所示:

companies
+------------+
| company_id |
+------------+

agents
+----------+------------+
| agent_id | company_id |
+----------+------------+

customers
+-------------+----------+------------+
| customer_id | agent_id | company_id |
+-------------+----------+------------+

其中每行的第一个 id 是 table 的主键。

规则如下:

属性 company_id in customers table 可以技术计算如果客户被分配了一个代理(首先我们寻找 agent_id客户,然后是该代理的 company_id)。 但是,如果公司没有代理人 如果客户未分配代理人,则 company_id 必须在 customers table 中明确说明。

如何设计我的数据库,使 customers.company_idagent.company_id 一致,而 agent 来自 customers.agent_id

您可以在 agents 中定义一个唯一键,结合 company_idagent_id。像这样:

alter table agents add constraint unq_agents_company_agent
    unique (company_id, agent_id);

然后您将从客户定义一个外键:

alter table customers add constraint fk_customers_agents
    foreign key (company_id, agent_id) references agents (company_id, agent_id);

[以上语法非常通用,但可能取决于数据库。]

这应该能保证你指定的条件。