我有以下问题:假设我们有一个Chen表示法1:n和m:n。
所以1
有一个主键,而n
也有一个外键?在n
中?
[第二个问题是关于m:n的,都具有主键,由于m:n
,我还需要1个表,我是否要在第3个表中将两个主键都键入为外键?
1:n
关系的示例:客户和订单
一个客户可能有多个订单。在这种情况下,您希望订单表中的一列具有一个外键,该外键引用客户表的主键。
样本DDL:
create table customers (
id int primary key,
name varchar(50),
email varchar(50)
);
create table orders (
id int primary key
price float,
customer_id int foreign key references customer(id)
);
n:m
关系的示例:书籍和作者
一本书可能由多位作者撰写。作者可能写了不止一本书。您创建一个桥表,也称为联结表,称为books_authors
,以表示该关系,并包含指向其他两个表的外键。
示例:
create table books (
id int primary key,
name varchar(50)
);
create table authors (
id int primary key,
name varchar(50)
);
create table books_authors(
book_id int foreign key references books(id),
author_id int foreign key references authors(id),
constraint pk_books_authors primary key(book_id, author_id)
);
所以1有一个主键,n也有,我在哪里键入外键?在n?
[外键位于n中,因为1可以有很多键,但是您不能拥有一个包含多个值的字段,因此每个字段必须有一个值,所以它位于n中。
第二个问题是关于m:n的,都具有主键,由于m:n,我还需要1个表,我是否要在第3个表中将两个主键都作为外键键入?
是的,因为实际上第三个表与两个表都具有多对一关系。