博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server 2008 ——关系
阅读量:2241 次
发布时间:2019-05-09

本文共 1410 字,大约阅读时间需要 4 分钟。

关系定义:

表和表之间的联系

实现形式:

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

分类:(假设A表和B表)

一对一

既可以把表A的主键充当表B的外键

也可以把表B的主键充当表A的外键

一对多

A表的主键添加到B表的外键

或者讲:把a表的主键添加到B表来充当B表的外键

通俗的说就是:在多的一方添加外键。(如下图)

多对多

       多对多必须通过单独的一张表来表示,即通过第三张表来表示A表和B表之间的关系。

例如: 

班级和老师的关系   

老师和学生之间的关系

在关系表中:

      1班和2班均有王老师上课,实现了从表A到表B的多对一关系

      1班有两个老师给其上课,实现了从A表到B表的一对多关系

     王老师给1班和2班上课,实现了从B表到A表的一对多关系

     王老师和赵老师都给1班上课,实现了从B表到A表的多对一的关系。

     从而实现了整体上多对多的关系。

 

 

        在关系表中,要想表现班级信息和教师信息两个表格的关系,至少需要班级id”教师id”两个字段。才能说明两个表的之间多对多的关系,但是为了具体的说明,我加上了授课课程字段和教师信息字段

 

      那么在关系表中,如何选取主键呢?首先根据选取主键的目的——不允许重复元素,避免数据冗余可知,班级id字段、教师id字段、教师姓名字段和授课课程字段均不可单独作为主键。所以我们就需要将这几个字段看成一个整体,然后定义为字段,如下图。为了防止在关系表中班级id和教师id字段中写的编号并没在班级信息和教师信息表中出现过,这时就需要将这两列设置为外键。

多对多关系代码实现

 

--班级表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(100))--第三张表,用来描述模拟班级和教师的关系create table banji_jiaoshi_mapping(	--本表有且只有一个主键,外键有两个:banji_id,jiaoshi_id	banji_id int constraint fk_banji_id foreign key references banji(banji_id),	-- 上面一行中(从左到右):banji_id表示字段名,constraint表示约束,fk_banji_id表示此字段的约束名(可省略),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)	--constraint表示强制约束		--pk_banji_id_jiaoshi_id为约束名		--	(banji_id,jiaoshi_id,kecheng)表示将三个字段建成一个字段,在这样的定义情况下,我们的第三张表中,每条记录不能完全重复,否则违反主键规则	)

 

你可能感兴趣的文章
详解 Stacking 的 python 实现
查看>>
简述极大似然估计
查看>>
用线性判别分析 LDA 降维
查看>>
用 Doc2Vec 得到文档/段落/句子的向量表达
查看>>
使聊天机器人具有个性
查看>>
使聊天机器人的对话更有营养
查看>>
一个 tflearn 情感分析小例子
查看>>
attention 机制入门
查看>>
手把手用 IntelliJ IDEA 和 SBT 创建 scala 项目
查看>>
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
SVM 的核函数选择和调参
查看>>
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>