MySql数据库多表间关系

本文介绍了数据库中的一对多、多对多和一对一的关系,并通过实例展示了如何在MySQL中创建班级、学生和课程的多表关系。在班级与学生之间建立了一对多关系,学生与课程之间建立了多对多关系,使用中间表来实现。通过对学校选课系统的建表演示,阐述了多表设计的分析和实现方法。
摘要由CSDN通过智能技术生成

多表间关系

1.目标

  • 能够说出多表之间的关系及其建表原则

2.分析

eg: 下订单(t_order)--->谁下(t_user), 买了什么(t_product)

现实生活中,实体与实体之间肯定是有关系的,比如:老公和老婆,部门和员工,老师和学生等。那么我们在设计表的时候,就应该体现出表与表之间的这种关系!分成三种:
  1. 一对多
  2. 多对多
  3. 一对一

3.讲解

一对多(1:n)

例如:班级和学生,部门和员工,客户和订单

一的一方: 班级 部门 客户

多的一方:学生 员工 订单

一对多建表原则: 在从表(多方的一方)创建1一个字段,字段作为外键指向主表(一方)的主键
在这里插入图片描述

多对多

多对多(m:n)

例如:老师和学生,学生和课程,用户和角色

一个老师可以有多个学生,一个学生也可以有多个老师 多对多的关系

一个学生可以选多门课程,一门课程也可以由多个学生选择 多对多的关系

一个用户可以有多个角色,一个角色也可以有多个用户 多对多的关系

多对多关系建表原则: 需要创建一张中间表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。

在这里插入图片描述

一对一(通常单表)

一对一(1:1): 公司和地址, 老公和老婆

例如: 一个公司只能有一个注册地址,一个注册地址只能对应一个公司。

例如:一个老公可以有一个老婆,一个老婆只能有一个老公

在实际的开发中应用不多.因为一对一可以创建成一张表。

两种建表原则:

  • 外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一UNIQUE
  • 外键是主键:主表的主键和从表的主键,形成主外键关系

在这里插入图片描述

多表设计之多表分析及创建

需求:完成一个学校的选课系统,在选课系统中包含班级,学生和课程这些实体。

分析:

班级和学生: 一对多

学生和课程: 多对多

  1. 班级和学生之间是有关系存在:
    一个班级下包含多个学生,一个学生只能属于某一个班级(一对多的关系)。
  2. 学生和课程之间是有关系存在:
    一个学生可以选择多门课程,一门课程也可以被多个学生所选择(多对多的关系)。

MySql代码

-- 多表建表原则练习
-- 班级和学生: 一对多
-- 学生和课程: 多对多
-- 创建班级表
create table class(
	cid int primary key auto_increment,
	cname varchar(40)
);
-- 创建学生表
create table student(
	sid int primary key auto_increment,
	sname varchar(40),
	c_id int,
	constraint stu_cls_fk1 foreign key(c_id) references class(cid)
);

-- 创建课程表
create table course(
	co_id int primary key auto_increment,
	co_name varchar(40)
);

-- 创建中间表
create table stu_co(
	sno int,
	cno int,
	constraint stu_co_fk1 foreign key(sno) references student(sid),
	constraint stu_co_fk2 foreign key(cno) references course(co_id)
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值