网站怎么做搜索引擎,商城网站开发实施方案,wordpress登录密码错误,宁波网络公司招聘信息目录
1.概述
2.一对多
3.一对一
4.多对多
5.多表查询
5.1内连接
5.2外连接
5.3子查询 1.概述
项目开发中,在进行数据库表结构设计时#xff0c;会根据业务需求及业务模块之间的关系#xff0c;分析并设计表结构#xff0c;由于业务之间相互关联#xff0c;所以各个…目录
1.概述
2.一对多
3.一对一
4.多对多
5.多表查询
5.1内连接
5.2外连接
5.3子查询 1.概述
项目开发中,在进行数据库表结构设计时会根据业务需求及业务模块之间的关系分析并设计表结构由于业务之间相互关联所以各个表结构之间也存在着各种联系,基本上分为三种:一对多、多对多、一对一。
数据库的多表设计是关系型数据库设计中的一种常见方法它通过将数据分散存储在多个表中来实现数据的组织和管理。多表设计的主要目的是实现数据的规范化以减少数据冗余提高数据的一致性和完整性。设计时需要仔细规划和考虑以确保数据库既灵活又高效。设计过程中可能需要多次迭代以适应不断变化的业务需求。
数据库中的多表查询是常见的操作它允许从多个表中检索数据并将这些数据以某种方式组合起来。在编写多表查询时重要的是要理解每个表的结构以及表之间的关系。通常通过外键来实现。使用合适的连接类型可以有效地检索和组合数据。
2.一对多
例如部门和员工一个部门有多个员工而每一个员工对应一个部门。在设计表时多的一方(员工表)叫子表一的一方(部门表)叫父表。实现方式为在多的一方(员工表)添加一个字段(归属部门)关联一的一方(部门表)的主键即可。 外键
当把id为1的学工部删除后员工表中依然有员工归属于学工部此时数据就出现不完整和不一致的问题了。因此我们需要外键约束来解决多表之间的一致性和完整性问题。 通常使用图形化界面去添加外键外键添加后将无法删除和员工表有关的部门数据。 通过foreign key关键字定义的外键称为物理外键在大型项目中禁止使用它有以下缺点 性能问题每次插入或更新涉及外键的表时数据库都需要检查外键约束这会增加额外的查询和锁操作尤其是在高并发场景下会导致性能瓶颈 并发问题使用外键时数据库需要在修改数据时获取额外的锁导致在高并发大流量事务场景中增加死锁的风险 扩展性问题物理外键会限制数据库的扩展性。在进行表结构重构、迁移或分表分库操作时物理外键会增加复杂性和困难因此仅用于单节点数据库不适用集群和分布式
为了避免以上问题我们选择逻辑外键(在业务逻辑中解决外键关联)它指的是在应用程序层面上实现的外键关系而不是在数据库层面上通过数据库的外键约束物理外键来实现。逻辑外键通过应用程序代码来维护数据的一致性和完整性而不是依赖数据库的内置约束机制。
3.一对一
例如用户和身份证就是一对一的关系。这种关系通常用来做单表拆分将一张大表拆分成两个小表以提升操作效率。
一对一可以看成特殊的一对多它也可以通过外键来实现只需要在任意一方添加外键去关联另一方的主键同时加上unique约束保证值唯一即可。
4.多对多
例如学生和课程一个学生可以选修多个课程每个课程也有多个学生选修。可以通过建立第三张中间表来实现第三张表中有两个外键分别关联两方主键。 5.多表查询
在进行多表查询时会将每个表的每条记录都和另外的表进行组合。比如a表有5条数据b表有6条数据那么多表查询时会查询出30条数据。这种现象称为笛卡尔积。
笛卡尔积a集合和b集合的所有组合情况。如果a集合有X个元素b集合有Y个元素那么它们的笛卡尔积将有X×Y个元素。在实际应用中笛卡尔积通常不是我们想要的结果因为它会产生大量的组合其中许多是无效或不相关的因此我们要消除多余的笛卡尔积。
多表查询中根据查询的形式分为连接查询和子查询连接查询又分为内连接和外连接外连接又分为左外连接和右外连接。
内连接查询AB交集。左外连接查询A右外连接查询B。子查询就是嵌套查询。 5.1内连接
隐式显式没区别仅是表达方式不同 5.2外连接 5.3子查询
子查询的分类
标量子查询:子查询返回的结果为单个值。列子查询:子查询返回的结果为一列。行子查询:子查询返回的结果为一行。表子查询:子查询返回的结果为多行多列 /*(select id from dept where name 教学部)返回单个值所以是标量子查询*/
/*查询教学部的员工*/
select * from emp where dept_id (select id from dept where name 教学部);/*括号内的子查询返回一列两行所以是列子查询*/
/*查询教学部和咨询部的员工*/
select * from emp where dept_id in
(select id from dept where name 教学部 or name 咨询部); /*其余类别子查询类似*/