【JavaWeb】Day40.MySQL概述——多表设计(一对多)

本文介绍了项目开发中数据库表设计的一对多关系,强调了在员工表和部门表之间添加外键约束的重要性,以确保数据完整性和一致性。讨论了物理外键和逻辑外键的区别,以及现代企业开发中倾向于使用逻辑外键的趋势。
摘要由CSDN通过智能技术生成

多表设计

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

  •  一对多(多对一)
  •  多对多
  •  一对一

一对多

1.表设计

创建新的数据库,将多表设计存在新数据库下。在创建新的部门表单,员工和部门之间是一对多的关系。

-- 部门表
create table tb_dept
(
    id int unsigned primary key auto_increment comment '主键ID',
    name varchar(10) not null unique  comment '部门名称',
    create_time datetime not null comment '创建时间',
    update_time datetime not null comment '修改时间'
) comment '部门表';

员工表 - 部门表之间的关系:

一对多关系实现:在数据库表中多的一方,添加字段,来关联属于一这方的主键。

2.外键约束

表结构创建完毕后,我们看到两张表的数据分别为:

现在员工表中有五个员工都归属于1号部门(学工部),当删除了1号部门后,数据变为:

1号部门被删除了,但是依然还有5个员工是属于1号部门的。 此时:就出现数据的不完整、不一致了。

 所以目前上述的两张表(员工表、部门表),在数据库层面,并未建立关联,所以是无法保证数据的一致性和完整性的。

想解决上述的问题呢,我们就可以通过数据库中的 **外键约束** 来解决。

外键约束:让两张表的数据建立连接,保证数据的一致性和完整性。  对应的关键字:foreign key

外键约束的语法:

方式一:创建表时指定

create table 表名(

字段名    数据类型,

...

 [constraint]   [外键名称]  foreign  key (外键字段名)   references   主表 (主表列名)  

);

方式二:建完表后,添加外键

alter table  表名  add constraint  外键名称  foreign key(外键字段名)

references 主表(主表列名);

我们就为员工表的dept_id 建立外键约束,来关联部门表的主键。

```mysql
-- 修改表: 添加外键约束
alter table tb_emp  
add  constraint  fk_dept_id  foreign key (dept_id)  references  tb_dept(id);
```

图形化界面操作:

外键约束(foreign key):保证了数据的完整性和一致性。

物理外键和逻辑外键:

 物理外键

  - 概念:使用foreign key定义外键关联另外一张表。

  - 缺点:

    - 影响增、删、改的效率(需要检查外键关系)。

    - 仅用于单节点数据库,不适用与分布式、集群场景。

    - 容易引发数据库的死锁问题,消耗性能。

 逻辑外键

  - 概念:在业务层逻辑中,解决外键关联。

  - 通过逻辑外键,就可以很方便的解决上述问题。

       在现在的企业开发中,很少会使用物理外键,都是使用逻辑外键。 甚至在一些数据库开发规范中,会明确指出禁止使用物理外键 foreign key 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值