数据库一对一、一对多、多对多关系

数据库一对一、一对多、多对多关系

一、首先给出三种关系的实例

  1. 一对一关系实例

​ 一个人对应一张身份证,一张身份证对应一个人

  1. 一对多关系实例

​ 一个公司的部门拥有多个职员,一个职员只能够属于某个部门

  1. 多对多实例

​ 一本图示可以拥有多个作者,一个作者可以写很多本书。

一对一关系

一对多,是最常见的一种设计。就是 A 表的一条记录,对应 B 表的多条记录,且 A 的主键作为 B 表的外键。这主要看以哪张表为中心。

优点

  1. 便于管理、可提高一定的查询速度
  2. 减轻 CPU 的 IO 读写,提高存取效率。
  3. 符合数据库设计的三大范式。
  4. 符合关系性数据库的特性。

缺点

增加一定的复杂程度,程序中的读写难度加大。

# 左表的一条记录唯一对应右表的一条记录,反之也一样
# 身份证表
create table iden(
    id int primary key auto_increment,
    name char(20) not null,
    iden_num char(18) not null unique

);

# 公民表
create table civi(
    id int primary key auto_increment,
    name char(20) not null,
    civi_id int unique, 
    foreign key(iden_id) references ident(iden_num) #外键的字段一定要保证unique
    on delete cascade
    on update cascade
);

一对多关系

一对多,是最常见的一种设计。就是 A 表的一条记录,对应 B 表的多条记录,且 A 的主键作为 B 表的外键。这主要看以哪张表为中心,我们把多对一和一对多统称为一对多关系,数据库中不存在多对一关系。

create table dep(
    id int primary key auto_increment,
    dep_name char(10),
    dep_comment char(60)
);

create table emp(
    id int primary key auto_increment,
    name char(16),
    gender enum('male','female') not null default 'male',
    dep_id int,
    foreign key(dep_id) references dep(id)
    on update cascade
    on delete cascade
);

多对多关系

多对多,在数据库中也比较常见,可以理解为是一对多和多对一的组合。要实现多对多,一般都需要有一张中间表(也叫关联表),将两张表进行关联,形成多对多的形式。

create table author(
    id int primary key auto_increment,
    name char(16)
);

create table book(
    id int primary key auto_increment,
    bname char(16),
    price int
);
create table author2book(
    id int primary key auto_increment,
    author_id int,
    book_id int,
    foreign key(author_id) references author(id)
    on update cascade
    on delete cascade,
    foreign key(book_id) references book(id)
    on update cascade
    on delete cascade
);

转载于:https://www.cnblogs.com/ruhai/p/10862744.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值