2025年数据表 一对一 一对多 多对多关系理解

数据表 一对一 一对多 多对多关系理解1 一对多 比如说一个班级有很多学生 可是这个班级只有一个班主任 在这个班级中随便找一个人 就会知道他们的班主任是谁 知道了这个班主任就会知道有哪几个学生 这里班主任和学生的关系就是一对多 2 多对一 比如说一个班级有很多学生 可是这个班级只有一个班主任 在这个班级中随便找一个人

大家好,我是讯享网,很高兴认识大家。

1、一对多:比如说一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中随便找一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里班主任和学生的关系就是一对多。

2、多对一:比如说一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中随便找一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里学生和班主任的关系就是多对一。

3、一对一:比如说一个班级有很多学生,他们分别有不同的学号。一个学生对应一个学号,一个学号对应一个学生;通过学号能找到学生,通过学生也能得到学号,不会重复。这里学生和学号的关系就是一对一。

4、多对多:比如说一个班级有很多学生,他们有语文课、数学课、英语课等很多课。一门课有很多人上,一个人上很多门课。这里学生和课程的关系就是多对多。

(2)通过执行另外一个SQL映射语句来返回预期的复杂类型。

2、一对多的实现方法

在多的一方的表里面,添加外键。

3、多对多的实现方法

多对多,必须要通过单独的一张表来表示。

Ø 前言

本文主要介绍数据表的关联关系,这是数据库设计的常见问题之一。一个好的表结构设计,可以减少一些不必要的表或字段等。数据表之间的关联关系分为三种:一对一、一对多、多对多。下面就逐一介绍下:

  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. 商品表 与 图片表,一个商品对应多张图片,或者多张图片对应一个商品。
  4. 多对多

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

  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; 

讯享网

在这里插入图片描述

小讯
上一篇 2025-03-01 07:29
下一篇 2025-01-11 12:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/129387.html