表与表之间的关系

导语:

把所有的数据都存放于一张表的弊端

1:表的组织结构复杂不清晰

2:浪费空间

3:扩展性极差

一、 寻找表与表之间的关系套路:

举例:emp 员工表         dep 部门表

步骤:

  part1:

    1、先站在左表 emp 的角度

    2、去找左表emp 的多条记录能否对应右表dep的一条记录

    3、翻译2 的意义:

        左表emp 的多条记录==》》多个员工

        右表dep 的一条记录==》》一个部门

         最终的翻译结果:多个员工是否可以属于同一个部门?

         如果是则需要进行part2 的流程

  part2:

    1、先站在右表dep 的角度

    2、去找右表dep 的多条记录能否对应左表emp的一条记录

    3、翻译2 的意义:

        右表dep的多条记录==》》多个员工

        左表emp 的一条记录==》》一个部门

         最终的翻译结果:多个部门是否可以包含同一个员工

         如果不可以, 则可以确定emp与dep的 关系只一个单向的多对一

         如何实现?

            在emp表中新增一个dep_id 字段, 该字段指向dep表的id字段

配图:

用foreign key  来实现 多对一

约束1:在创建表时, 先创建被关联的表dep(也就是多对一中的一),在创建关联表emp(多对一的多),否则就会报错

约束2:在插入记录时, 必须先插被关的表dep,才能插关联表emp,否则也会报错

3:约束3:更新与删除都需要考虑到关联与被关联的关系

1:先删除关联表emp1,再删除被关联表dep1, 否则也会报错

2:重建:新增功能,同步更新, 同步删除    用on update cascade   on delete cascade

先创建:

查询数据:

同步删除:delete from 表名 where + 条件

同步更新:update 表名 set   更改内容   where +条件

清空表:delete from tb1

q强调;上面这条命令确实可以将表里的记录都删掉, 但是不会将id重置为0,

所有该条命令根本不是用来清空表的, delete是用来删除表中某一些符合条件的记录

delete from tb1 where id >10;

如果要清空表 要使用truncate tb1;

作用是将整张表重置。

如图:删掉id>3 以上的数据后 在添加新的数据, 是在原来没有删除的id的基础上添加。所以这时不应该用 delete.

二:多对多

两张表之间是一个双向的多对一关系,称之为多对多

如何实现

建立第3张表,该表中有一个字段fk 左表的id,还有一个字段fk  右表的id

例如:两张表, 一个书表,一个作者表:

首先创造出这两张表:

现在创造第3张表

查询:

一对一

左表的一条记录唯一对应右表的一条记录,反之也一样

配图:

张铁蛋 李大炮 杨力 赵子弹 刘二丫 王三炮 alex  梁树东

创建表

插入数据:

查数据:

原文地址:https://www.cnblogs.com/lx3822/p/9016109.html

时间: 2024-10-05 07:55:30

表与表之间的关系的相关文章

求解?表空间,表,用户这三者之间的 关系与区别?

发表于: 2012-02-11 16:40:58 小弟初学oracle,但是在表空间,用户,表这三者之间的关系,有点模糊,希望大牛指导下! 更多0分享到:       对我有用[0] 丢个板砖[0] 引用 | 举报| 管理 回复次数:21 关注 dengnanyi 一棵老松树 本版等级: #1 得分:0回复于: 2012-02-11 16:55:59 表空间:一个数据库划分为一个或多个逻辑单位,该逻辑单位称为表空间(TABLESPACE).一个表空间可将相关的逻辑结构组合在一起.表:表(tabl

第四天,表与表之间的关系,一对多,多对多,查询

※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样)SHOW VARIABLES; //查看系统变量//查询字符编码相关的系统变量SHOW VARIABLES WHERE variable_name LIKE 'character%'; 解决MySQK的中文乱码:character_set_client,character_set_connection和character_set_results这三者必须一致(GBK,GB2312,UTF8这三者都可以,但若采用其中一种则3

MySQL---数据库从入门走上大神系列(四)-子查询、表与表之间的关系

本篇博客讲解(子查询)非相关子查询/相关子查询,一对一,一对多,多对一,多对的的关系! 准备: 首先我们创建一列sex.再为部分行设置好值0(女)或者1(男): delete from stud where age=26; 删除年龄为26的行. update stud set sex='1' where saddress like '湖南%'; 将地址中湖南开头的人的的sex修改为1. update stud set sex='0' where age>=30 and sex is null;

mysql表与表之间的关系(多对多,一对多)

#创建数据库CREATE DATABASE day15;#使用USE day15;#创建表CREATE TABLE test1( id INT PRIMARY KEY AUTO_INCREMENT,#这是主键 num INT UNIQUE, #这个唯一键不起作用? NAME VARCHAR(22));#存入数据INSERT INTO test1(NAME) VALUES('aaa'); #删除数据但是不重置自动增长数DELETE FROM test1; #删除数据重置行数(相当于删除掉整个表,然

PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

看PostgreSQL9的官方文档,我越看越迷糊,这表空间,数据库,模式,表,用户,角色之间的关系怎么在PostgreSQL里这么混乱呢?经过中午的一个小实验,我逐渐理清了个中来龙去脉.下面我来还原我的试验,并循序讲清其中关系. 首先,实验出角色与用户的关系    在PostgreSQL中,存在两个容易混淆的概念:角色/用户.之所以说这两个概念容易混淆,是因为对于PostgreSQL来说,这是完全相同的两个对象.唯一的区别是在创建的时候: 1.我用下面的psql创建了角色kanon:   CRE

PostgreSQL表空间、模式、表、用户/角色之间的关系

PostgreSQL表空间.模式.表.用户/角色之间的关系是本文我们主要要介绍的内容,表空间,数据库,模式,表,用户,角色之间的关系到底是怎样的呢?接下来我们就开始介绍这一过程. 实验出角色与用户的关系 在PostgreSQL中,存在两个容易混淆的概念:角色/用户.之所以说这两个概念容易混淆,是因为对于PostgreSQL来说,这是完全相同的两个对象.唯一的区别是在创建的时候: 1.我用下面的psql创建了角色kanon:CREATE ROLE kanon PASSWORD 'kanon';接着

表与表之间关系回顾

------------------siwuxie095 表与表之间关系回顾 1.一对多 (1) 1)场景:分类和商品的关系 2)描述:一个分类里面有多个商品,一个商品只能属于一个分类 (2) 1)场景:客户和联系人的关系 2)描述:一个客户里面有多个联系人,一个联系人只能属于一个客户 注意:这里的客户是公司级的,即 公司,联系人 即 公司里的员工,实 际上就是公司和员工的关系 (3)一对多建表:通过外键建立关系 在多的那一方创建字段作为外键,指向一的那一方的主键 客户: cid cname 1

事实表,维度,度量,指标之间的关系

事实表:每个数据仓库都包含一个或者多个事实数据表.事实数据表可能包含业务销售数据,如销售商品所产生的数据,与软件中实际表概念一样 维度:说明数据,维度是指可指定不同值的对象的描述性属性或特征.例如,地理位置的维度可以包括"纬度"."经度"或"城市名称"."城市名称"维度的值可以为"旧金山"."柏林"或"新加坡". 指标:衡量数据,指标是指可以按总数或比值衡量的具体维度

SSAS的维度表之间的关系只能有一个不能有多个

我们在SSAS中创建维度的时候,有时候可能一个维度需要用到多个表的字段作为维度属性,那么这多个表之间势必存在关联关系,但是切记维度表之间的关联关系有且只能有一个不能有多个,下面我们来看一个例子. 现在我们创建了一个维度Customer,由于该维度中的属性除了用到Customer表的字段以外,还要用到了Geography表的字段,所以Customer用到了两个表. 但是Customer表和Geography表之间现在存在两个依赖关系 其中一个关系是Customer.CustomerKey到Geog

获取完全一样的数据库,包括表与表之间的外键关系,check,default表结构脚本

今天公司给了一个任务,某一个项目由于数据过大,造成Sql Server 2012 的运行占用很大内存,于是要把之前的不常用的数据分开.要求写个脚本,要求: 1.能获取原来数据库中的表结构,主键一致.表与表之间的约束关系(外键,check,default)一致: 2.有些表不想要就不要,可选. 3.而且效率要考虑,这个脚本以后常用. (这里都是本地的测试数据) 软件: Sql Server2012(其他的版本没有亲自试验,不知道效果) 图1:找到原数据库,选择任务-->生成脚本 图2:选择要创建的