我有一张商户名称和相关信息的表格,包括地址栏。公司名称可以具有重复的名称,而地址可以具有重复,但是公司名称和地址都不能重复。因此,存在多种多样的关系,但这不是两个表之间,而是在同一表的两个列之间。
这两个字段中的一个或两个都必须是另一个表的外键。
我是否创建桥表?复合键?如果是复合键,如何将它们做成另一个表中的外键?
答案 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)
);
通过此设置,每个实体都有自己的表,并且信息不重复,这与使用单个表不同。同时,在联结表中,您可以通过主键(也可以是唯一键)有效地确保业务/实体元组的唯一性,并使用外键维护数据完整性。