数据库中多对多关系及其实现

事物A中的一条记录可以对应事物B中的多条记录,而事物B中的一条记录也可以对应事物A中的多条记录。例如:学校中,一个班级可以有多名任课老师,而一名老师可以教多个班级。这时,可以引入一个表C来模拟多对多关系。

SQL语句:

--班级表
create table banji
(
    banji_id int primary key,
    banji_num int not null,
    banji_name nvarchar(100)
)

--教师
create table jiaoshi
(
    jiaoshi_id int primary key,
    jiaoshi_name nvarchar(200)
)

--第三张表 用来模拟班级和教师的关系
create table banji_jiaoshi_mapping
(
    banji_id int constraint fk_banji_id foreign key references banji(banji_id),
    jiaoshi_id int foreign key references jiaoshi(jiaoshi_id),
    kecheng nvarchar(20),
    constraint pk_banji_id_jiaoshi_id primary key (banji_id,jiaoshi_id,kecheng)
)

--删除表
drop table banji_jiaoshi_mapping

数据库关系图:

注:本文参考了郝斌老师的SQL教程,也加入了自己对SQL的一些理解,有写的不对的地方希望大家能够指出来。

时间: 2024-11-05 12:16:44

数据库中多对多关系及其实现的相关文章

转:数据库中多对多的关系设计

转:http://www.cnblogs.com/xuqiang/archive/2010/08/30/1953515.html http://xuqiang.github.io/. [email protected]. 数据库设计多对多关系的几种形态  前言:多对多关系至少需要3个表,我们把一个表叫做主表,一个叫做关系表,另外一个叫做字典表或者副表(字典表是纪录比较少,而且基本稳定的,例如:版块名称:副表是内容比较多,内容变化的,例如).  按照数据库的增删查改操作,多对多关系的查找都可以用i

非关系型数据库中的「关系」实现

Knowledge Dependence:阅读文本前,你需要了解基本的关系型数据库与非关系型(NoSQL)数据库的概念和区别,以及 MongoDB(Mongoose)的简单实践. ? 这两三年来,伴随着大数据(Big Data)的空前火热,无论是在工程界还是科研界,非关系型数据库(NoSQL)都已经成为了一个热门话题. 相比于传统的关系型数据库,非关系型数据库天生从理念上就给数据存储提供了一种新的思路.而在实际应用中,它往往更轻巧灵活.扩展性高,并且更能胜任高性能.大数据量的场景. 值得一提的是

数据库表中多对多关系怎么设计?

(多对多关系)(视频下载) (全部书籍) 马克-to-win:Teacher表:两列id,name.Studnet表: 三列:id,name,ageTeacherStudent表(关系表):三列:id,tid,sid create table TeacherStudent(id int not null,tid int not null,sid int not null); 2) teacher and student:(一个老师可能有多个学生,一个学生可能有多个老师) qixy有两个学生:li

关于hibernate中多对多关系

关于多对多关系 数据库:在使用多对多的关系时,我们可以使用复合主键.也可以不使用,直接引入外键同样可以实现. 在数据库中使用多对多关系时,需要一个中间表. 多对多关系中的数据库结构如下: 表:Orders 字段:orderid(主键)..... 表:Users 字段:usersid(主键),.... 中间表: cy_order_user 字段:cy_order_user主键id 外键:cy_orderid(引入Orders表) 外键:cy_usersid(引入Users表) 注意:中间表的外键是

Hibernate中多对多关系转换

问题来源 在运用SSH架构开发Web应用时,总会遇到表之间一对多.多对一.多对多等等的关系,而对于多对多的关系,在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型:hibernate会为我们创建中间关联表,转换成两个一对多. 问题解决 在此用开发OA项目时角色表和权限之间的多对多关系提供解决问题的建议 例子:角色与权限 (1)先看需求 (2)分析 第一,角色与权限:多对多 一个角色可以有多个权限,一个权限可以被多个角色使用 第二,在角色的增删改查中涉及到了

MyBatis中多对多关系的映射和查询

先说一下需求: 在页面上显示数据库中的所有图书,显示图书的同时,显示出该图书所属的类别(这里一本书可能同时属于多个类别) 创建表: 笔者这里使用 中间表 连接 图书表 和 图书类别表,图书表中 没有使用外键关联 图书类别表 而是在中间表中引用了 图书主键 和 类别主键 通过中间表来 表示 图书 和 图书类别 的关系 建立图书表(图书编号,图书名字) create table book ( bid int primary key auto_increment, bname varchar(20)

XAF中多对多关系 (XPO)

In this lesson, you will learn how to set relationships between business objects. For this purpose, the Task business class will be implemented and a Many-to-Many relationship will be set between the Contact and Task objects. You will also learn the

Spring中的事务与数据库中的锁关系

本文只先简单的介绍下Spring中的事务与DB中锁的关系. 首先总结:Spring事务的实现本质上是使用的DB中的事务,而DB中的事务实现又主要依靠DB中的锁.所以spring事务本质上使用数据库锁,开启spring事务意味着使用数据库锁. 所以大家一定要厘清DB事务与DB各种锁的原理与概念.后续我也研究一下DB锁,并结合具体的生产环境监控数据来谈谈. <以下是转载部分内容.主要是Spring事务的使用方式.隔离级别之类的> 那么事务的隔离级别与锁有什么关系呢?本人认为事务的隔离级别是通过锁的

SQL Server中多对多关系的实现

多对多的关系必须另外添加一张表来表示 --班级 create table banji ( banji_id int constraint PK_banji primary key, --主键 banji_num int not null, banji_name nvarchar(20) ) --教师 create table jiaoshi ( jiaoshi_id int constraint PK_jaioshi primary key, --主键 jiaoshi_name nvarchar