数据库中表之间的关系有哪些

数据库中表之间的关系有:1、一对多关系,即A表的一条记录对应B表的一条记录;2、多对多关系,即A表的一条记录,对应B表的多条记录,且A的主键作为B表的外键;3、一对一关系。

本教程操作环境:windows10系统、mysql8版、Dell G3电脑。

表关系:可以在数据库图表中的表之间创建关系,以显示一个表中的列与另一个表中的列是如何相链接的。

在一个关系型数据库中,利用关系可以避免多余的数据。例如,如果设计一个可以跟踪图书信息的数据库,您需要创建一个名为 titles 的表,它用来存储有关每本书的信息,例如书名、出版日期和出版社。您也可能保存有关出版社的信息,诸如出版社的电话、地址和邮政编码。如果您打算在 titles 表中保存所有这些信息,那么对于某出版社出版的每本书都会重复该出版社的电话号码。

更好的方法是将有关出版社的信息在单独的表,publishers,中只保存一次。然后可以在 titles 表中放置一个引用出版社表中某项的指针。

为了确保您的数据同步,可以实施 titles 和 publishers 之间的参照完整性。参照完整性关系可以帮助确保一个表中的信息与另一个表中的信息相匹配。例如,titles 表中的每个书名必须与 publishers 表中的一个特定出版社相关。如果在数据库中没有一个出版社的信息,那么该出版社的书名也不能添加到这个数据库中。

表之间有三种关系。所创建关系的类型取决于相关列是如何定义的。

  • 一对多关系

  • 多对多关系

  • 一对一关系

1. 一对一

Ø 一对一是将数据表“垂直切分”,其实是不常见,或不常用的。也就是 A 表的一条记录对应 B 表的一条记录,为什么要这样的设计呢,不是增加了程度的复杂性吗,然而并不一定,举例说明:

1) 一个系统必然有 Employee(员工表)(包含字段:EmployeeId、姓名、性别、年龄、电话、地址等),每个员工都为一个用户,所以还有张 User 表(包含字段:UserId(关联 EmployeeId)、用户名、密码、角色等),这样你会发现,整合为一张表是否不太妥当?因为,User 的记录只会在登录时用到,感觉有点违背三大范式中的“确保每列都和主键列直接关联,而不是间接关联”。

2) 还有种情况,这就要根据具体的业务来决定了。如果,当一张表的字段过于太多,而很多字段可能只有在某些情况下,才会使用到,这时也可以考虑使用一对一设计。

Ø 优点

1. 便于管理、可提高一定的查询速度

2. 减轻 CPU IO 读写,提高存取效率。

3. 符合数据库设计的三大范式。

4. 符合关系性数据库的特性。

Ø 缺点

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

2. 一对多

Ø 一对多,是最常见的一种设计。就是 A 表的一条记录,对应 B 表的多条记录,且 A 的主键作为 B 表的外键。这主要看以哪张表为中心,以上示例以 A 表为中心,就是一对多,如果以 B 表为中心,则是多对一。举几个例子:

1. 班级表 与 学生表,一个班级对应多个学生,或者多个学生对应一个班级。

2. 角色表 与 用户表,一个角色对应多个用户,或者多个用户对应一个角色。

3. 商品表 与 图片表,一个商品对应多张图片,或者多张图片对应一个商品。

3. 多对多

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

1. 老师表、班级表、科目表,中间表为:课程表

1) SQL

--教师表

CREATE TABLE #Teacher(TeacherId int, Name nvarchar(20));

INSERT INTO #Teacher VALUES(1, '张老师'), (2, '王老师');

--班级表

CREATE TABLE #Class(ClassId int, Name nvarchar(20));

INSERT INTO #Class VALUES(1, '一班'), (2, '二班');

--课程表(关联表)

CREATE TABLE #Courses(CoursesId int IDENTITY(1, 1), TeacherId int, ClassId int, Name nvarchar(20));

INSERT INTO #Courses VALUES(1, 1, '语文'), (1, 2, '语文');

INSERT INTO #Courses VALUES(2, 1, '数学'), (2, 2, '英语');

SELECT T1.TeacherId, T2.Name, T1.ClassId, T3.Name, T1.Name FROM #Courses AS T1, #Teacher AS T2, #Class AS T3

WHERE T1.TeacherId=T2.TeacherId AND T1.ClassId=T3.ClassId

DROP TABLE #Teacher, #Class, #Courses;

2) 执行结果:

clip_image002

以上就是数据库中表之间的关系有哪些的详细内容,更多请关注html中文网其它相关文章!

赞(0) 打赏
未经允许不得转载:html中文网首页 » 其他答疑

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

前端开发相关广告投放 更专业 更精准

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏