-
2013-09-05 23:43:521、表间关系的含义:
同一个数据库中,不同表中的数据之间都存在一种关系,这种关系将数据库里各表中的每条数据记录都和数据库中唯一的主题相联系,使得对每一个数据的操作都成为数据库的整体操作。
2、表间关系的类型:
* 一对一
* 一对多
* 多对多
3、建立表间关系的目的:
* 保证数据的完整性
-> 表间关系的建立使主表和从表之间建立数据约束关系,防止输入错误的数据;
* 保证数据的一致性
-> 当存在多个表的时候,通过建立主表和从表的关系,可以在主表更新时,从表自动更新,省去手动更新;
* 方便多表查询
-> 方便连接两个或多个表,一次能查找到多个相关数据。
二、主外键物理表
在第3章里我们介绍了主键的设置和选择,为了建立表间关系,还需要在子表里设置外键。
1、外键的作用
外键引用另外一个数据表的某条记录,以此在两个表之间建立联系。
外键是子表里的一个字段,引用父表(主表)里的主键。
* 外键列类型尽可能与主键列类型保持一致
* 外键列应该加上 NOT NULL
2、外键约束
外键约束是确保表与表之间引用完整性的主要机制。
三、主外键物理表的数据插入删除规则
主表和从表里的数据在插入删除时,要遵循以下规则:
(1)当主表中没有对应的记录时,不能将记录添加到子表
上面的例子里学员成绩表 score 中不能出现在学员信息表 student 中不存在的学号。
(2)不能更改主表中的值而导致子表中的记录孤立
把 student 表中的学号改变了,score 表中的学号也应当随之改变。
(3)子表存在与主表对应的记录,不能从主表中删除该行
不能把有成绩的学员删除了。
(4)删除主表前,先删子表
先删除学员成绩表 score、后删除学员信息表 student。更多相关内容 -
表与表之间建立关系
2021-03-02 19:04:26建立表关系的原因?: 2、 针对数据量大的情况下讨论 1:表的结构不清晰(一张表中涵盖多种数据) 2:浪费硬盘空间(有重复的数据) 3:表的扩展性极差(不便于增加,修改,删除等操作) 二、表与表的关系:...一、表的概念与分类
主要通过外键关键字:pirmary key 来建立连系
1、表与表之间的关系可以分为三种:一对多,多对多,一对一的关系
建立表关系的原因?:
2、 针对数据量大的情况下讨论
1:表的结构不清晰(一张表中涵盖多种数据)
2:浪费硬盘空间(有重复的数据)
3:表的扩展性极差(不便于增加,修改,删除等操作)二、表与表的关系:一对多
例如:一个公司的员工和部门之间的连系,把员工和部门分别抽离出来分析
(1)先站在员工表看能否有多个员工对应一个部门>>>一个部门能否有多个员工(可以)
(2)再站在部门表看能否有多个部门对应一个员工>>>一个员工能否属于多个部门(不可以)结论:员工表和部门表之间的关系是“一对多”的关系(一对多或者多对一)
根据id索引来寻找匹配的内容先通过列表的形式,把一张完整的表切分出来,分析它们之间的关系多对一还是多对多就可以看出情况,换位思考!foreign key:外键约束
1、创建表的时候,必须先创建被关联的表
2、插入数据的时候,也必须先插入被关联表的数据(先后顺序不能颠倒,不然会报错!)
代码如下:
建表:# 先建被关联的表 create table dep( id int primary key auto_increment, dep_name varcher(32), dep_desc varcher(128) ); # 后建数据多的表 create table emp( id int primary key auto_increment, emp_naem varchar(64), emp_gender enum('male','female','others') default 'male', dep_id int, foreidn key(dep_id) references dep(id) );
插入数据:
insert into dep(dep_name,dep_desc) values('外交部','搞外交'), ('教学部','教书育人'), ('技术部','技术能力有限部门') ; insert into emp(emp_name,dep_id) values('jack',1), ('reso',2), ('gelen','3'), ('james',2);
, dep_desc varchar(128) ); caeate table emp( id int primary key auto_increment, emp_name carchar(64), emp-gender enum('male','female','othres') default 'male', foreign key(dep_id) references dep(id) on update cascade on delete cascade # 联级修改 删除 ); # 插入数据 insert into dep (dep_name,dep_desc) values('外交部',‘搞外交’),(’教学部‘,’教书育人‘),(’技术部‘,’技术能力有限部门‘) insert into emp(emp_name,dep_id) values('jack',2),('rose',1),('kevin',3),('galen',1); # 修改 删除数据 update dep set id=200 where id=3; delect from dep where id=2;
三、多对多的关系
例如:书籍和作者的关系
换位思考:站在书籍的角度和作者的角度思考,多本书可以被一个作者写,多个作者也能写一本书,
条件成立,属于多对多,外键已经不能够表达这种关系了,必须通过建立第三方表来记录两者之间的关系
先建两种普通的表 不需要设置外键create table book( id int primary key auto_increment, title varchar(32), price int ); create table author( id int primary key auto_increment, name varcher(32), age int ); # 手动创建第三方表 create table book2author( id int primary key auto_increment, book_id int, foreign key(book_id) references book(id) on uptade cascade on delete cascade , # 直接建立级联 author_id int, foregn key (author_id) refrrences author(id) on update cascade om delete cascade # );
插入数据:
insert into book(title,price) values('百年孤独',60),(‘丰乳肥臀’,90),(‘疯狂说英语’,129); insert into auther (nane,age) values('西亚·马尔克斯',98),(‘莫言’,87),(‘李阳’,53); insert into book2auther(book_id,age) values(1,2),(2,3),(2,1),(1,3);
**四、一对一关系
**
1:一对一的场景,当数据量过大的时候,可以考虑把表给拆分开2:如老男孩的客户和学生关系(没交学费前和交学费后)
3:姓名、电话,地址
一对一的关系:外键字段都可以建在任意一方,一般建议把外键字段建立在查找频繁的那一方创建表:
# 左表的一条记录唯一对应右表的一条记录,反之也一样 create table customer( id int primary key auto_increment, name char(20) not null, qq char(10) not null, phone char(16) not null ); create table student( id int primary key auto_increment, class_name char(20) not null, customer_id int unique, #该字段一定要是唯一的 foreign key(customer_id) references customer(id) #外键的字段一定要保证unique on delete cascade on update cascade ); # 三种外键关系都是用foreign key,区别在于如何使用以及其他条件限制即可做出三种关系
了解知识点:
修改表的完整语句1.修改表的完整语句 1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST; # 直接移到最前面 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; # 寻找插哪个字段的后面 3. 删除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段 # modify只能改字段数据类型完整约束,不能改字段名,但是change可以! ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
# 查询语句执行的结果也是一张表,可以看成虚拟表 # 复制表结构+记录 (key不会复制: 主键、外键和索引) create table new_service select * from service; # 只复制表结构 select * from service where 1=2; //条件为假,查不到任何记录 create table new1_service select * from service where 1=2; create table t4 like employees;
-
实验一数据库表和表间关系的建立.pdf
2020-09-10 15:42:22实验内容一 实验序号 一 实验项目名称 数据库表和表间关系的建立 实验地点 指导教师 李晖 实验时间 一实验目的及要求 熟悉并掌握 SqlServer2005 关系数据库中数据库的建立数据表的建立表 间主外键关系的建立的操作 ... -
SQL Server如何建立表关系
2019-06-18 10:05:14SQL Server怎么建立关系表?用教师表和学生表举例。 两表建立关系之前,要检查连接的条件满足否,比如学生表里的‘外键教师ID’要和教师表里的主键‘教师ID’的数据类型相同,也就是建立关系的条件数据类型要相同 ...SQL Server怎么建立关系表?用教师表和学生表举例。
两表建立关系之前,要检查连接的条件满足否,比如学生表里的外键‘教师ID’要和教师表里的主键‘教师ID’的数据类型相同,也就是建立关系的条件数据类型要相同
确认条件满足之后开始建立关系:
1.在数据库库关系图里新建数据库关系图,如果弹出要创建的提示框点击是可以了
2.完成创建之后就在关系图域里右键,点击添加表,把需要建立关系的表添加进去
3.添加完表之后连接关系,把教师表里的教师ID拖动到学生表里的教师ID,
4.检查主外键表正确了没有,如果你想根据学生表查询教师信息那学生表就是主键表,反过来教师就是主键表。
5.完成以上步骤之后就完成连接了,保存为关系图命名就完成了!
-
MySQL 表与表之间建立关系
2021-02-06 16:25:24今天核心的内容就是怎样让表与表之间产生关系,在思考这个问题的时候,我们可以回顾之前学习python时,当一个任务涉及到很多的功能时,我们为了让程序的结构更清晰,扩展性更高,我们选择用函数>>模块>>...引子:如下图是一张非常寻常的表格,在以前的工作中实常会制作类似的表格,但是今天的数据库内容,将我之前这种传统的制表思路上升了一个层次;
今天核心的内容就是怎样让表与表之间产生关系,在思考这个问题的时候,我们可以回顾之前学习python时,当一个任务涉及到很多的功能时,我们为了
让程序的结构更清晰,扩展性更高,我们选择用函数>>模块>>包 的方式将功能层层拆分,最终让程序结构上升到新的层次,而且极大的降低了代码的冗
余。再回到这张表,如果说总共就这几个人,这张表没什么问题,但是假设我们拥有100w的用户,此时表中的 def_name,dep_desc就有些冗余了;此外
这种表的形式也非常不利于后期数据的取值和修改。
实现思路:把内容多出现重复的字段拎出来制作成具有id的新表,将两张表建立联系。
第一步 拆分表
第二步 建立关联(通过dep_id字段链接两张表)
注意:1.必选要先建被关联表;
2.新增数据的时候,要先增被关联表中的数据;
create table dep(
id int primary key auto_increment,#id设置为主建,自增
dep_name char(16),
dep_desc char(64) #注意最后一个括号后面一定不要加逗号!
);
create table emp(
id int primary key auto_increment,
name char(16),
gender enum(‘male‘,‘female‘,‘others‘) not null default ‘male‘, #default后面的默认值空格直接书写即可
dep_id int,
foreign key(dep_id) references dep(id)#外键 本表中的dep_id 字段 ,关联dep表中的id字段;
);
插入数据
2.新增数据的时候,要先增被关联表中的数据
insert into dep(dep_name,dep_desc) values
(‘外交部‘,‘形象代言人‘),
(‘教学部‘,‘教书育人‘),
(‘技术部‘,‘技术能力有限部门‘);
insert into emp(name,gender,dep_id) values
(‘jason‘,‘male‘,1),
(‘egon‘,‘male‘,2),
(‘kevin‘,‘male‘,2),
(‘tank‘,‘male‘,2),
(‘jerry‘,‘female‘,3);
修改dep_id 数据
update emp set dep_id=100 where id=1; #修改dep_id数据 结果报错。
但我们可以选择先删除关联表中的数据后,再更改与其关联表emp中的字段。但这
并不是最好的解决办法
第三步 深度关联(修改/删除同步)on update cascade on delete cascade
create table dep(
id int primary key auto_increment,
dep_name char(16),
dep_desc char(64)
);
create table emp(
id int primary key auto_increment,
name char(16),
gender enum(‘male‘,‘female‘,‘others‘) not null default ‘male‘, #default后面的默认值空格直接书写即可
dep_id int,
foreign key(dep_id) references dep(id)
on update cascade#同步更新
on delete cascade #同步删除
);
一对多,上面这个案例就是一对多的案例。
多对多(第三张表牵线搭桥)
当我们面对的是两张表互相之间都是多对一的情况,也就是多对多的情况时,就会出现互为外键,如果还是安装上面的方法创建,就会出现无法创建表的情况。此时我们需要第三张表来作为中间人,
为两张表牵线搭桥,让它们产生关联。
书与作者案例
多对多案例实现
create table book(
id int primary key auto_increment,
title char(16),
price int
);
create table author(
id int primary key auto_increment,
name char(16),
gender char(16)
);
create table book2author(
id int primary key auto_increment,
book_id int,
author_id int,
foreign key(book_id) references book(id)
on update cascade#同步更新
on delete cascade, #同步删除
foreign key(author_id) references author(id)
on update cascade#同步更新
on delete cascade #同步删除
);
插入数据
insert into book(title,price) values
(‘瓶金梅‘,‘69.96‘),
(‘围城‘,‘99.99‘),
(‘python全栈开发‘,‘21000‘);
insert into author(name,gender) values
(‘jason‘,‘male‘),
(‘egon‘,‘female‘),
(‘kevin‘,‘male‘);
insert into book2author(book_id,author_id) values
(1,1),
(1,2),
(1,3),
(2,1),
(2,3),
(3,1),
(3,2);
一对一
修改表
语法:
1. 修改表名
ALTER TABLE 表名
RENAME 新表名;
2. 增加字段
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…],
ADD 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] FIRST;
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
3. 删除字段
ALTER TABLE 表名
DROP 字段名;
4. 修改字段
ALTER TABLE 表名
MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
复制表
# 复制表结构+记录 (key不会复制: 主键、外键和索引)
create table new_service select * from service;
# 只复制表结构
select * from service where 1=2; //条件为假,查不到任何记录
create table new1_service select * from service where 1=2;
create table t4 like employees;
原文:https://www.cnblogs.com/guanchao/p/10862282.html
-
Power bi建立表与表之间的关系并绘制一些常用的图形!
2020-04-21 11:21:36Power bi分析并建立表与表之间的关系,同时通过表与表之间的数据绘制一些可视化图形。 -
MySql WorkBench通过表生成表关系图
2016-03-24 17:22:161、mysql workbench 菜单file=>add model(添加模型) ...2,mysql workbench 菜单database=>reverse engineer mysql workbench 连接...填写好连接信息后,一直下一步就OK了,这样就能把数据库的表结构导入到模型中, -
表间的关系一对多/一对一/多对多关系是怎样建立的?
2017-11-20 16:41:21外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与...以上关系:一个妈妈可以在孩子表中找到多条记录(也可能是一条),但是一个孩子只能找到一个妈妈 是一种典型的一对 -
MySQL数据库----表与表之间的关系
2021-01-19 08:13:52表1 foreign key 表2则表1的多条记录对应表2的一条记录,即多对一利用foreign key的原理我们可以制作两张表的多对多,一对一关系多对多:表1的多条记录可以对应表2的一条记录表2的多条记录也可以对应表1的一条记录一... -
是否需要给数据库中的表与表之间建立关系
2013-04-19 21:18:29我先来跟大家探讨一下儿数据库表间建立关系的利与敝: 利:如果你的关系建立的没有错误的话数据的参照完整性肯定能得到保证,不会出现数据不一致的情况。实现级连删除非常方便。省去了为保证参照完整性用代码保证级... -
表关系的创建设置
2014-08-03 21:22:48表间关系是根据两个表间的公共字段建立的(一般字段名相同或字段内容相同)。 -
access 数据表a、b建立关系出现表b违反参照完整性原则问题解决办法。
2015-09-08 11:08:51原因可能有:b表外键字段数据 与 a表主键字段数据不符。 解决办法:使b表外键字段数据 与 a表主键字段数据一致。... 当建立关系时候就会出现下表的错误 将“ab”改成“aa”,先关闭数据表,重新编辑关系即可 -
企业管理器下创建数据库、基本表、建立多表关系
2019-05-31 11:04:50在企业管理器下创建数据库: 1.打开sqlsever,右键数据库,选择新建数据库 2.输入数据库名称,定义初始文件大小(此步骤可以省略) ...4.右键点击表,创建Student表,并...5.创建其余各个表(Choice/Class/Cou... -
使用navicat模型功能 快速理清表间关系
2020-11-05 16:29:34在看某个项目的数据库的时候发现表比较多,且都是和用户相关的,又涉及到租户、站点等,表关系有点小复杂,而且都是虚拟外键,于是自己来创建模型来方便缕清表之间关系。 使用的工具为NavicatPremium15 ,12应该也差... -
数据库中表与表之间建立关系(一对多、多对多)
2017-02-07 10:10:38一、一对多的关系 例:公司与员工的关系,公司为一,公司员工为多,需要在多方建立外键指向一方的主键。...创建一张用户表和一张角色表,还需创建一张关系表,关系表至少有两个外键,分别指向两张表的主 -
MYSQL查询之多表查询、子查询及表间关系
2018-03-21 21:41:51一对一关系一对一的表关系: 例如:qq和qq的详尽信息建立外键的时候 如果明确主从关系? 被引用的表是主表,外键在从表中建立 关联主表实现代码如下: CREATE TABLE qq( qqid int PRIMARY KEY, password varchar(100)... -
数据库表结构关系图生成
2019-12-08 06:21:09如有你有这个数据库的工具的话,就可以直接将你建好的数据库表直接生成模型图。 打开Navicat,连接我们的数据库 打开数据库表 点击右下角的几个按钮 随便点击试一下,最后你会发现点击从左数第三个的时候,会变成... -
数据库表与表的关系(超详细讲解)
2020-01-22 22:06:48Spring Data JPA多表操作表关系一对一一对多多对一多对多 本篇博文主要说明实际开发中常用的关联关系,一对多和多对多。 表关系 一对一 一对多 多对一 多对多 ... -
数据库关系建模(ER图设计关系表)
2018-11-21 20:22:46目录 一、概述 ...4. 关系表 VS 一般的表 5. 主码(主键primary key) 6. 实体完整性约束(entity integrity constraint) 7. 外码(外键foreign key) 8. 参照完整性约束(reference integrity c... -
SQL创建多表及多表之间的关系
2018-11-29 22:46:32### SQL 会创建多表及多表的关系 #### 需求: 分类表和商品表之间是不是有关系? 如果有关系,在数据库中如何表示这种关系 ```sql create table category( cid int primary key auto_increment, cname varchar... -
数据库表之间的关系
2019-06-28 10:32:11数据库表之间的关系 开发工具与关键技术:Visual Studio 2015 表与表之间的关系处理 作者:廖 茂 撰写时间:2019年06月26日 做项目最重要的就是数据库,数据库没做好,那么后面的功能实现就会出现问题,数据库... -
建立实体-关系模型(案例)
2019-04-25 15:10:06不仅仅是实体有属性,关系同样也有属性,这些属性在实体间建立关系时才会存在。 有时属性太多,无法在图上一一列出,可以用表格,在后面的步骤中这个表格同样会用到,如下: 四、确定属性域 属性域就是属性的... -
PowerDesigner表关系
2018-11-12 11:58:00PowerDesigner表关系 -
数据库设计 表和表之间的三种关系
2017-12-15 17:29:50表与表之间一般存在三种关系,即一对一,一对多,多对多关系。 下面分别就三种关系讲解数据库相关设计的思路和思考过程; (1)一对一关系 例如,下面的一张表,保存了人的相关信息,有男有女,要求查处所有... -
IS-IS邻接关系建立过程
2021-01-13 21:17:59Hello 报文中除了包含发送路由器的System-ID之外,还包含了发送端全局和接口的一系列参数,这些参数如果被邻居路由器接受了,那么就能形成邻接关系,否则不建立邻接关系。 在LAN (广播网络)和P2P (点对点网络)中形成... -
设置数据库中表的关系图
2017-05-21 17:22:19新建一个数据库及表后,紧接着要设计这些表的关系图,那么如何操作呢? 首先在新建好的数据库下,选中“数据库关系图”,如图所...建立关系后,就可以很直观地了解数据库表间的关系了。 设置好后,命名保存,如下图: -
关系型数据库表之间的联系[关系]详解
2021-04-29 20:14:12关系型数据库表之间可存在的联系/关系(relationship)有三种:一对一、一对多和多对多。 -
OSPF邻接关系建立过程
2020-12-23 20:58:29Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的router-id不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己重新产生的Hello报文中,并且发送。... -
【数据库笔记04】(表间建立联系,多表查询)
2019-02-08 09:40:50【数据库笔记04】(MySQL数据库语句,思维导图记忆)如何联系表多表之间...如图建立两个表,给product的cno添加一个外键约束 //references 执行 alter table product add foreign key(cno) references category (...