多级列表样式怎么设置第1章第2章(多级列表样式怎么设置2016)

多级列表样式怎么设置第1章第2章(多级列表样式怎么设置2016)关于单表的操作 单表的设计 单表的增删改查 我们就已经学习完了 接下来我们就要来学习多表的操作 首先来学习多表的设计 项目开发中 在进行数据库表结构设计时 会根据业务需求及业务模块之间的关系 分析并设计表结构 由于业务之间相互关联 所以各个表结构之间也存在着各种联系 基本上分为三种 一对多 多对一 多对多 一对一 2 1 一对多 2 1 1 表设计 需求



关于单表的操作(单表的设计、单表的增删改查)我们就已经学习完了。接下来我们就要来学习多表的操作,首先来学习多表的设计。

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

  • 一对多(多对一)

  • 多对多

  • 一对一

2.1 一对多

2.1.1 表设计

需求:根据页面原型及需求文档 ,完成部门及员工的表结构设计

  • 员工管理页面原型:(前面已完成tb_emp表结构设计)

  • 部门管理页面原型:

 

经过上述分析,现已明确的部门表结构:

  • 业务字段 : 部门名称

  • 基础字段 : id(主键)、创建时间、修改时间

部门表 - SQL语句:

# 建议:创建新的数据库(多表设计存放在新数据库下)
 

部门表创建好之后,我们还需要再修改下员工表。为什么要修改员工表呢?是因为我们之前设计员工表(单表)的时候,并没有考虑员工的归属部门。

员工表:添加归属部门字段

 

测试数据:

 

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

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

2.1.2 外键约束

问题

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

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

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

问题分析

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

问题解决

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

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

对应的关键字:foreign key

外键约束的语法:

 

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

方式1:通过SQL语句操作

 

方式2:图形化界面操作

当我们添加外键约束时,我们得保证当前数据库表中的数据是完整的。 所以,我们需要将之前删除掉的数据再添加回来。

当我们添加了外键之后,再删除ID为1的部门,就会发现,此时数据库报错了,不允许删除。

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

物理外键和逻辑外键

  • 物理外键

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

    • 缺点:

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

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

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

  • 逻辑外键

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

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

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

2.2 一对一

一对一关系表在实际开发中应用起来比较简单,通常是用来做单表的拆分,也就是将一张大表拆分成两张小表,将大表中的一些基础字段放在一张表当中,将其他的字段放在另外一张表当中,以此来提高数据的操作效率。

一对一的应用场景: 用户表(基本信息+身份信息)

  • 基本信息:用户的ID、姓名、性别、手机号、学历

  • 身份信息:民族、生日、身份证号、身份证签发机关,身份证的有效期(开始时间、结束时间)

如果在业务系统当中,对用户的基本信息查询频率特别的高,但是对于用户的身份信息查询频率很低,此时出于提高查询效率的考虑,我就可以将这张大表拆分成两张小表,第一张表存放的是用户的基本信息,而第二张表存放的就是用户的身份信息。他们两者之间一对一的关系,一个用户只能对应一个身份证,而一个身份证也只能关联一个用户。

那么在数据库层面怎么去体现上述两者之间是一对一的关系呢?

其实一对一我们可以看成一种特殊的一对多。一对多我们是怎么设计表关系的?是不是在多的一方添加外键。同样我们也可以通过外键来体现一对一之间的关系,我们只需要在任意一方来添加一个外键就可以了。

一对一 :在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

SQL脚本:

 

2.3 多对多

多对多的关系在开发中属于也比较常见的。比如:学生和老师的关系,一个学生可以有多个授课老师,一个授课老师也可以有多个学生。在比如:学生和课程的关系,一个学生可以选修多门课程,一个课程也可以供多个学生选修。

案例:学生与课程的关系

  • 关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择

  • 实现关系:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

SQL脚本:

 

2.4 案例

下面通过一个综合案例加深对于多表关系的理解,并掌握多表设计的流程。

需求

  • 根据参考资料中提供的《苍穹外卖_管理后台》页面原型,设计分类管理、菜品管理、套餐管理模块的表结构。

步骤

  1. 阅读页面原型及需求文档,分析各个模块涉及到的表结构,及表结构之间的关系。

  2. 根据页面原型及需求文档,分析各个表结构中具体的字段及约束。

分析

  • 页面原型-分类管理

分类的信息:分类名称、分类类型[菜品/套餐]、分类排序、分类状态[禁用/启用]、分类的操作时间(修改时间)。

  • 页面原型-菜品管理

菜品的信息:菜品名称、菜品图片、菜品分类、菜品售价、菜品售卖状态、菜品的操作时间(修改时间)。

思考:分类与菜品之间是什么关系?

  • 思考逻辑:一个分类下可以有多个菜品吗?反过来再想一想,一个菜品会对应多个分类吗?

答案:一对多关系。一个分类下会有多个菜品,而一个菜品只能归属一个分类。

设计表原则:在多的一方,添加字段,关联属于一这方的主键。

  • 页面原型-套餐管理

套餐的信息:套餐名称、套餐图片、套餐分类、套餐价格、套餐售卖状态、套餐的操作时间。

思考:套餐与菜品之间是什么关系?

  • 思考逻辑:一个套餐下可以有多个菜品吗?反过来再想一想,一个菜品可以出现在多个套餐中吗?

答案:多对多关系。一个套餐下会有多个菜品,而一个菜品也可以出现在多个套餐中。

设计表原则:创建第三张中间表,建立两个字段分别关联菜品表的主键和套餐表的主键。

分析页面原型及需求文档后,我们获得:

  • 分类表

    • 业务字段:分类名称、分类类型、分类排序、分类状态

    • 基础字段:id(主键)、分类的创建时间、分类的修改时间

  • 菜品表

    • 业务字段:菜品名称、菜品图片、菜品分类、菜品售价、菜品售卖状态

    • 基础字段:id(主键)、分类的创建时间、分类的修改时间

  • 套餐表

    • 业务字段:套餐名称、套餐图片、套餐分类、套餐价格、套餐售卖状态

    • 基础字段:id(主键)、分类的创建时间、分类的修改时间

表结构之间的关系:

  • 分类表 - 菜品表 : 一对多

    • 在菜品表中添加字段(菜品分类),关联分类表

  • 菜品表 - 套餐表 : 多对多

    • 创建第三张中间表(套餐菜品关联表),在中间表上添加两个字段(菜品id、套餐id),分别关联菜品表和分类表

表结构

分类表:category

  • 业务字段:分类名称、分类类型、分类排序、分类状态

  • 基础字段:id(主键)、创建时间、修改时间

 

菜品表:dish

  • 业务字段:菜品名称、菜品图片、菜品分类、菜品售价、菜品售卖状态

  • 基础字段:id(主键)、分类的创建时间、分类的修改时间

 

套餐表:setmeal

  • 业务字段:套餐名称、套餐图片、套餐分类、套餐价格、套餐售卖状态

  • 基础字段:id(主键)、分类的创建时间、分类的修改时间

 

套餐菜品关联表:setmeal_dish

 

编程小号
上一篇 2025-02-21 10:01
下一篇 2025-03-09 14:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/17040.html