数据库一对一,一对多,多对多关系

实例

  • 一对一关系实例:每一个中国本土的居民与居民唯一的身份证编号。一个本土居民只有一个身份证编号。‘唯一性’

  • 一对多关系实例:1.一个母亲可以有很多孩子,一个孩子只有一位亲生母亲。

    ​ 2.一个员工有一个部门,1个员工关联一个部门,一个部门可以拥有多个员工,但一个员工只能关联一个部门。

  • 多对多关系实例:1.一位老师可以教导多个学生,一个学生可以被多个老师教导。

    ​ 2.一个学生可以选择多门课程,一门课程可以被多个学生选中。

关系

一对一关系:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNc6T92m-1651063998486)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220427193128549.png)]

​ 一对一关系是最简单的关系,在数据库建表时,可以将‘本土居民’表中的主键ID放置到’身份证‘表中;

​ 或者将‘身份证’表中的主键ID放置到‘本土居民’类表中。

​ 在‘一对一’关系中,‘本土居民’表 和 ‘身份证’表 可以随意指向。

一对多关系:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oNuQKIGF-1651063998487)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220427194127421.png)]

1.母亲是A端,孩子是多端,结合面向对象来说,A端是母亲,对端就是孩子;

所以多端拥有A端的属性,即多端中应该放置A端的主键ID,‘孩子’表格中应该放置‘母亲’表中的主键ID。

一对多(又名多对一),理应将多的那个表当做主表,少的那个表的为次表。

多对多关系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bJZ2yETs-1651063998487)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220427192615354.png)]

对于多对多的关系,我们需要将它转换成1对多的关系,那我们就需要一张中间表来进行转换,

这张中间表内存放学生表里面的主键和课程表里面的主键,这是学生与中间表之间是1对多的关系,

课程与中间表也是1对多的关系。

学生与课程之间是多对多的关系。

2.一个班级有若干个老师,一个老师也可以带若干个班级。同理!

小结:

  1. 在这3种关系中,1对多的关系是最重要的,根据面向对象的思想在建表的时候将某1端的主键放置于多端即可。
  2. 只有明确这3种关系,才能更好的根据项目需求来设置数据库的数据。
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库表中,一对多关系指的是一个表的一条记录对应另一个表中的多条记录,而多对多关系则指的是两个表之间互相对应多条记录。下面是一些关于这两种关系的介绍和示例: 1. 一对多关系 假设我们有两个表,一个是订单表,一个是订单详情表。一个订单可以对应多个订单详情,因此订单表和订单详情表之间就存在一对多关系。在订单详情表中,通常会有一个外键,指向订单表中的订单ID。 ```sql -- 创建订单表 CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_name VARCHAR(50), order_date DATE ); -- 创建订单详情表 CREATE TABLE order_details ( detail_id INT PRIMARY KEY, order_id INT, product_name VARCHAR(50), quantity INT, price DECIMAL(10, 2), FOREIGN KEY (order_id) REFERENCES orders(order_id) ); ``` 2. 多对多关系 假设我们有两个表,一个是学生表,一个是课程表。一个学生可以选修多门课程,一门课程也可以被多个学生选修,因此学生表和课程表之间就存在多对多关系。为了实现多对多关系,我们需要创建一个关系表,用于存储学生和课程之间的对应关系。 ```sql -- 创建学生表 CREATE TABLE students ( student_id INT PRIMARY KEY, student_name VARCHAR(50) ); -- 创建课程表 CREATE TABLE courses ( course_id INT PRIMARY KEY, course_name VARCHAR(50) ); -- 创建关系表 CREATE TABLE student_courses ( id INT PRIMARY KEY, student_id INT, course_id INT, FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (course_id) REFERENCES courses(course_id) ); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值