SQL 数据库 学习 011 关系、一对一、一对多、多对多
- 我的电脑系统: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_id
和 banji_id
和 kecheng
三个属性的组合是一个主键(primary key
)。
现在执行,生成了3个表。
现在我们在这3个表里面插入数据。
banji
jiaoshi
banji_jiaoshi_mapping
都不会有错误,说明多对多生成成功。
请访问:http://www.aobosir.com/
SQL 数据库 学习 011 关系、一对一、一对多、多对多相关推荐
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- SQLAlchemy_定义(一对一/一对多/多对多)关系
SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...
- 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多
7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...
- mybatis的一对一 一对多 多对多
mybatis的一对一 一对多 多对多 1.表 2.建表语句 order_t表 CREATE TABLE `order_t` ( `id` int(11) NOT NULL, `user_id` in ...
- SQL 数据库学习04 ADB.NET
文章目录 ADO.NET 数据库连接示例 构造连接字符串的其他方法 SqlConnectionStringBuilder/读取配置文件 Try...catch/Using 连接池 执行命令,增删改查 ...
- 关系型数据库典型映射关系,一对多,多对多
一.首先给出三种关系的实例 1.一对一关系实例 * 一个人对应一张身份证,一张身份证对应一个人 2.一对多关系实例 * 一个班级拥有多个学生,一个学生只能够属于某个班级 3.多对多实例 ...
- 【九,MySQL】基础篇--多表查询(多表关系:一对多/多对一,多对多,一对一)
一,多表关系 1,一对多(多对一) 2,多对多 # =====================================================多对多================== ...
- 初学者易上手的SSH-hibernate04 一对一 一对多 多对多
这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many).这章也将是hibernate的最后一章了,用于初 ...
- day 69-70 一对一 一对多 多对一联表查询
day 69 orm操作之表关系,多对多,多对一多对一/一对多,多对多{类中的定义方法}day691. 昨日内容回顾1. 单表增删改查2. 单表查询API返回QuerySet对象的:1. .all() ...
最新文章
- python tcp不用循环监听_网络编程: TCP
- 微信小程序与H5相互跳转和传递数据
- 浅析微信支付:统一下单接口
- HuaWei设置镜像端口和观察端口
- 【一步教学,一步到位】mysql高可用架构
- boost::filesystem::path的用法测试程序
- 【SpringMVC】面试常见问题:总结 SpringMVC 运行原理
- excel单元格内容合并
- 腾讯云服务器配置ftp~
- 通知NSNotificationCenter
- 面向对象的JavaScript-008-Function介绍
- 关于计算机审计建议,商业银行计算机审计存在问题与建议
- ValueError: Input 0 of node ... was passed float from ... incompatible with expected float_ref.
- mui在线加载html,MUI 预加载页面
- 微信小程序自动检测新版本并静默更新,及热启动和冷启动
- matlab根据y标注x,知道y的值,怎么标注出对应x值所对应曲线的坐标啊;matlab
- 2022年长沙市成人高考疫情防控政策
- If Slack But Ryver!
- ndn-cxx与nfd的安装
- 微服架构基础设施环境平台搭建 -(一)基础环境准备