在同一个 table 中处理多对多关系

Deal with many to many relationships in the same table

我有一个 table 的公司名称和相关信息,包括地址栏。企业名称可以重名,地址可以重复,但企业名称和地址不能重复。因此存在多对多关系,但这不是两个 table 之间的关系,而是同一 table.

上的两列之间的关系

这些字段中的一个或两个还需要是另一个字段的外键 table。

我要创建一座桥 table 吗?复合键?如果是复合键,我将如何在另一个 table?

中创建它们的外键

您可能想要创建 3 个 table。一个存储公司名称,另一个存储地址,然后是一个名为 table 的连接点,例如 business_adresses.

create table businesses (
    id int primary key,
    name varchar(50)
);

create table adresses (
    id int primary key,
    street varchar(200),
    city  varchar(200),
    country varchar(200)
);

create table business_adresses(
    business_id int,
    adress_id int,
    primary key (business_id, adress_id),
    foreign key (business_id) references businesses(id),
    foreign key (adress_id) references adresses(id)
);

通过这种设置,每个实体都有自己的 table,并且信息不会重复,这与使用单个 table 时不同。同时,在结点table中,可以通过主键(也可以是唯一键)有效地保证business/entity元组的唯一性,并通过外键保持数据的完整性。