• 我的电脑系统:Windows 10 64位
  • SQL Server 软件版本: SQL Server 2014 Express

什么是关系

定义:

  • 表和表之间的联系。

实现方式:

  • 通过设置不同形式的外键来体现表和表的不同关系。

关系的分类(假设是A表和B表)

第一种分类: 一对一 (详述一对一关系及其实现)

(一对一,几乎不使用。所以,我们就一句话带过。)

一对一的实现:既可以把表A的主键充当表B的外键,也可以把表B的主键充当表A的外键。

一对多 和 多对多 才是我们学习的重点。

第二种分类:一对多 (详述一对多关系及其实现)

一对多事怎么实现的?

表A(一)与表B(多)(我们现在希望,表A中的一条记录对应表B中的多条记录)之间要是有关系,就必须要有外键。把表A的主键添加到表B里面,充当表B的外键。

一对多的实现:在多的一方的表里面,添加外键。

第三种分类:多对多 (详述多对多关系及其实现)

现实中,什么事物和什么事物之间是多对多的关系?

班级和老师的关系。(一个班级有很多老师上课,一个老师可以去很多班级上课。)

多对多其实就是:一对多 和 多对一 的一个组合。

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

  • 班级是一张表
  • 教师是一张表
  • 班级和教师的关系也是一张表

用一个实例来解释 多对多。

--班级表
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(bianji_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))

解释代码:

其中banji_id int constraint fk_banji_id foreign key references banji(bianji_id), 代码中的 fk_banji_id 是约束的名字,foreign key references banji(bianji_id) 指的是:当前这个表里面的 banji_id 属性是来自 banji 表的主键 banji_id,也就是说:当前表中的 banji_id 是一个外键(foreign key)。

其中jiaoshi_id int foreign key references jiaoshi(jiaoshi_id),里面,这里没有命名约束的名字,约束的名字可以省略不写,所以这里没有写也没有问题。同理上面那句代码。

其中constraint pk_banji_id_jiaoshi_id primary key (banji_id, jiaoshi_id, kecheng)中的 pk_banji_id_jiaoshi_id 这个是约束的名字。primary key (banji_id, jiaoshi_id, kecheng) 是设置jiaoshi_idbanji_idkecheng 三个属性的组合是一个主键primary key)。

现在执行,生成了3个表。

现在我们在这3个表里面插入数据。

banji

jiaoshi

banji_jiaoshi_mapping

都不会有错误,说明多对多生成成功。


请访问:http://www.aobosir.com/

SQL 数据库 学习 011 关系、一对一、一对多、多对多相关推荐

  1. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  2. SQLAlchemy_定义(一对一/一对多/多对多)关系

    SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...

  3. 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多

    7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...

  4. mybatis的一对一 一对多 多对多

    mybatis的一对一 一对多 多对多 1.表 2.建表语句 order_t表 CREATE TABLE `order_t` ( `id` int(11) NOT NULL, `user_id` in ...

  5. SQL 数据库学习04 ADB.NET

    文章目录 ADO.NET 数据库连接示例 构造连接字符串的其他方法 SqlConnectionStringBuilder/读取配置文件 Try...catch/Using 连接池 执行命令,增删改查 ...

  6. 关系型数据库典型映射关系,一对多,多对多

    一.首先给出三种关系的实例 1.一对一关系实例    * 一个人对应一张身份证,一张身份证对应一个人 2.一对多关系实例    * 一个班级拥有多个学生,一个学生只能够属于某个班级 3.多对多实例   ...

  7. 【九,MySQL】基础篇--多表查询(多表关系:一对多/多对一,多对多,一对一)

    一,多表关系 1,一对多(多对一) 2,多对多 # =====================================================多对多================== ...

  8. 初学者易上手的SSH-hibernate04 一对一 一对多 多对多

    这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many).这章也将是hibernate的最后一章了,用于初 ...

  9. day 69-70 一对一 一对多 多对一联表查询

    day 69 orm操作之表关系,多对多,多对一多对一/一对多,多对多{类中的定义方法}day691. 昨日内容回顾1. 单表增删改查2. 单表查询API返回QuerySet对象的:1. .all() ...

最新文章

  1. python tcp不用循环监听_网络编程: TCP
  2. 微信小程序与H5相互跳转和传递数据
  3. 浅析微信支付:统一下单接口
  4. HuaWei设置镜像端口和观察端口
  5. 【一步教学,一步到位】mysql高可用架构
  6. boost::filesystem::path的用法测试程序
  7. 【SpringMVC】面试常见问题:总结 SpringMVC 运行原理
  8. excel单元格内容合并
  9. 腾讯云服务器配置ftp~
  10. 通知NSNotificationCenter
  11. 面向对象的JavaScript-008-Function介绍
  12. 关于计算机审计建议,商业银行计算机审计存在问题与建议
  13. ValueError: Input 0 of node ... was passed float from ... incompatible with expected float_ref.
  14. mui在线加载html,MUI 预加载页面
  15. 微信小程序自动检测新版本并静默更新,及热启动和冷启动
  16. matlab根据y标注x,知道y的值,怎么标注出对应x值所对应曲线的坐标啊;matlab
  17. 2022年长沙市成人高考疫情防控政策
  18. If Slack But Ryver!
  19. ndn-cxx与nfd的安装
  20. 微服架构基础设施环境平台搭建 -(一)基础环境准备

热门文章

  1. 管道pipe-有名管道
  2. 一、回首向来萧瑟处,也无风雨也无晴
  3. 让 GitHub 上这几个小游戏帮你找回童真
  4. 测试知识之:黑盒白盒和灰盒测试
  5. word中磅和mm的换算
  6. Excel合并单元格读取
  7. NFC交通卡移动支付产业链
  8. Mybatis常见面试问题(附答案)
  9. html5调用腾讯视频,小程序h5获取腾讯视频的真实mp4地址video!【前端+后端方法】...
  10. LED大屏实现“人屏”互动的方式有哪些?