在同一个 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元组的唯一性,并通过外键保持数据的完整性。
我有一个 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元组的唯一性,并通过外键保持数据的完整性。