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

时间:2019-12-04 23:15:38

标签: sql-server database-design

我有一张商户名称和相关信息的表格,包括地址栏。公司名称可以具有重复的名称,而地址可以具有重复,但是公司名称和地址都不能重复。因此,存在多种多样的关系,但这不是两个表之间,而是在同一表的两个列之间。

这两个字段中的一个或两个都必须是另一个表的外键。

我是否创建桥表?复合键?如果是复合键,如何将它们做成另一个表中的外键?

1 个答案:

答案 0 :(得分:1)

您可能要创建3个表。一个存储业务名称,另一个存储地址,然后存储一个联接表,例如,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)
);

通过此设置,每个实体都有自己的表,并且信息不重复,这与使用单个表不同。同时,在联结表中,您可以通过主键(也可以是唯一键)有效地确保业务/实体元组的唯一性,并使用外键维护数据完整性。

相关问题