精华内容
下载资源
问答
  • 2018-11-29 22:46:32

    ### SQL 会创建多表及多表的关系

    #### 需求:

    分类表和商品表之间是不是有关系? 如果有关系,在数据库中如何表示这种关系

    ```sql
    create table category(
      cid int primary key auto_increment,
      cname varchar(10),
      cdesc varchar(31)
    );

    insert into category values(null,'手机数码','电子产品,生产');
    insert into category values(null,'鞋靴箱包','江南皮鞋厂倾情打造');
    insert into category values(null,'香烟酒水','黄鹤楼,茅台,二锅头');
    insert into category values(null,'酸奶饼干','娃哈哈,蒙牛酸酸乳');
    insert into category values(null,'馋嘴零食','瓜子花生,八宝粥,辣条');

    select * from category;
    select cname,cdesc from category;

    --所有商品
    1.商品ID
    2.商品名称
    3.商品的价格
    4.生产日期
    5.商品分类ID

    商品和商品分类 : 所属关系
    create table product(
        pid int primary key auto_increment,
          pname varchar(10),
          price double,
          pdate timestamp,
          cno int
    );

    insert into product values(null,'小米mix4',998,null,1);
    insert into product values(null,'锤子',2888,null,1);
    insert into product values(null,'阿迪王',99,null,2);
    insert into product values(null,'老村长',88,null,3);
    insert into product values(null,'劲酒',35,null,3);
    insert into product values(null,'小熊饼干',1,null,4);
    insert into product values(null,'卫龙辣条',1,null,5);
    insert into product values(null,'旺旺大饼',1,null,5);

    //插入数据会失败
    insert into product values(null,'副表',1,null,12);

    ```

    #### 技术分析:

    - 多表之间的关系如何来维护

      外键约束: foreign key

      - 给product中的这个cno 添加一个外键约束

        alter table product add foreign key(cno)  references  category(cid);

      - 自己挖坑

      - 从分类表中,删除分类为5信息,

        - delete from category where cid =5;  //删除失败
        - 首先得去product表, 删除所有分类ID=5的所有商品

    - 建数据库原则:

      - 通常情况下,一个项目/应用建一个数据库


    - 多表之间的建表原则

      - 一对多 : 商品和分类

        - 建表原则: 在多的一方添加一个外键,指向一的一方的主键

          ​

      - 多对多: 老师和学生, 学生和课程

        建表原则: 建立一张中间表,将多对多的关系,拆分成一对多的关系,中间表至少要有两个外键,分别指向原来的那两张表

        ​

      - 一对一: 班级和班长, 公民和身份证, 国家和国旗

        - 建表原则:  

          - 将一对一的情况,当作是一对多情况处理,在任意一张表添加一个外键,并且这个外键要唯一,指向另外一张表
          - 直接将两张表合并成一张表
          - 将两张表的主键建立起连接,让两张表里面主键相等

        - 实际用途: 用的不是很多.    (拆表操作  )

          - 相亲网站: 
            - 个人信息 : 姓名,性别,年龄,身高,体重,三围,兴趣爱好,(年收入,  特长,学历, 职业, 择偶目标,要求)
            - 拆表操作 : 将个人的常用信息和不常用信息,减少表的臃肿, 

    更多相关内容
  • 与表之间关系

    千次阅读 2021-01-14 16:24:40
    今天就总结一下,表之间关系 先了解一个概念 什么是主键、外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号...

    最近领导一直在提“表之间关联”、“数据的身份证”之类的我听不懂的名词

    今天就总结一下,表之间的关系

     

    先了解一个概念

    什么是主键、外键:

    关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 
    比如  
    学生表(学号,姓名,性别,班级) 
    其中每个学生的学号是唯一的,学号就是一个主键 
    课程表(课程编号,课程名,学分) 
    其中课程编号是唯一的,课程编号就是一个主键 
    成绩表(学号,课程号,成绩) 
    成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键 
      
    成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键 
      
    同理 成绩表中的课程号是课程表的外键 

      
    定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
    1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。

    身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 
    2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

    比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键

     

    一、表关系的概念

      现实生活中,实体与实体之间肯定是有关系的,如:学生和老师,学生和课程,部门和员工,每个人和自己的身份证号码等。

      在设计表的时候,就应该体现出来表与表之间的这种关系。

      表与表之间的三种关系:

      •  一对多:最常用的关系,如部门和员工
      •  多对多:学生选课表和学生表,一门课程可以有多个学生选择,一个学生选择多门课程
      •  一对一:相对使用比较少,员工表,公民表,护照表

    二、一对多

      一对多(1:n)

      例如:部门和员工,客户和订单,分类和商品。

      一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键

      

     

    三、多对多

      多对多(m:n)

      例如:老师和学生,学生和课程,用户和角色

      多对多关系建表原则:需要创建第三张表,中间表至少两个字段,这两个字段分别作为外键指向各自一方的主键。

      多对多关系示意图:

      

    四、一对一

      一对一(1:1)

      在实际开发应用不多,因为一对一可以创建成一张表。

      两种建表原则:

      

    一对一的建表原则说明
    外键唯一主表的主键和从表的外键(唯一),形成主外键关系,外键唯一 UNIQUE
    外键是主键主表的主键和从表的主键,形成主外键关系

       关系示意图

     

     

     

    五、表与表之间的关系总结

    表与表的关系关系的维护
    一对多主外键的关系
    多对多中间表,两个一对多
    一对一1) 特殊一对多,从表中的外键设置为唯一
    2) 从表中的主键又是外键
    展开全文
  • **语法:**alter table 从 add [constraint] [外键名称] foreign key (从外键字段名) references 主 (主的主键); [外键名称] 用于删除外键约束的,一般建议“_fk”结尾 alter table 从 drop foreign ...

    一. 外键

    这里写图片描述
    这里写图片描述

    声明外键约束:
    **语法:**alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
    [外键名称] 用于删除外键约束的,一般建议“_fk”结尾
    alter table 从表 drop foreign key 外键名称

    使用外键的目的:
    保证数据完整性

    实例:
    1.登陆MySQL
    这里写图片描述

    2.创建并使用库web09
    这里写图片描述

    3.创建主表
    这里写图片描述

    4.创建从表product
    这里写图片描述

    5.设置编码
    这里写图片描述

    6.向主表中添加数据
    这里写图片描述

    7.向从表中添加数据
    这里写图片描述

    8.查询主表所有数据
    这里写图片描述

    9.查询从表所有数据
    这里写图片描述

    10.声明外键约束
    这里写图片描述

    11.主表不能删除从表已经使用的数据
    这里写图片描述

    12.必须先删除从表使用的数据
    这里写图片描述

    13.才能删除主表中的数据
    这里写图片描述

    总结:
    从表不能够添加(更新),主表中不存在的数据。
    主表不能够删除(更新),从表中已经使用的数据。

    二.表与表之间的关系

    表与表之间的关系,说的就是表与表数据之间的关系。
    这里写图片描述
    这里写图片描述

    展开全文
  • 精选30+云产品,助力企业轻松上云!>>> 表与表...

    精选30+云产品,助力企业轻松上云!>>> hot3.png

    表与表之间的关系

    1.表关系的概念

    在现实生活中,实体与实体之间肯定是有关系的。比如:员工和部门,老师和学生等。那么我们在设计表的时候,就应该体现出表与表之间的这种关系。

    表关系描述
    一对一相对使用比较少。如:员工表,简历表,护照表。
    一对多最常用的表关系。如:部门和员工。
    多对多学生选课表 和 学生表,一门课程可以有多个学生选择,一个学生可以选择多个课程。

    2. 一对一

    一对一(1:1) :在实际的开发中应用不多,因为一对一可以创建成一张表。

    • 两种建表原则:
    一对一的建表原则描述
    外键唯一主表的主键和从表的外键(唯一),形成主外键关系,外键唯一unique
    外键是主键主表的主键和从表的主键,形成主外键关系

    3. 一对多

    一对多(1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品

    • 建表原则:

    在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键

    3.1 一对多关系案例

    3.1.1 需求:一个旅游线路分类中有多个旅游线路

    • 界面:

    • 表与表的关系:

    3.1.2 具体操作

    -- 创建旅游线路分类表 tab_category
    -- cid 旅游线路分类主键,自动增长
    -- cname 旅游线路分类名称非空,唯一,字符串 100
    create table tab_category (
      cid int primary key auto_increment,
      cname varchar(100) not null unique
    )
    -- 添加旅游线路分类数据:
    insert into tab_category (cname) values ('周边游'), ('出境游'), ('国内游'), ('港澳游');
    select * from tab_category;
    -- 创建旅游线路表 tab_route
    /*
    rid 旅游线路主键,自动增长
    rname 旅游线路名称非空,唯一,字符串 100
    price 价格
    rdate 上架时间,日期类型
    cid 外键,所属分类
    */
    create table tab_route(
      rid int primary key auto_increment,
      rname varchar(100) not null unique,
      price double,
      rdate date,
      cid int,
      foreign key (cid) references tab_category(cid)
    )
    -- 添加旅游线路数据
    INSERT INTO tab_route VALUES(NULL, '【厦门+鼓浪屿+南普陀寺+曾厝垵 高铁 3 天 惠贵团】尝味友鸭面线 住 1 晚鼓浪屿', 1499,'2018-01-27', 1),
    (NULL, '【浪漫桂林 阳朔西街高铁 3 天纯玩 高级团】城徽象鼻山 兴坪漓江 西山公园', 699, '2018-02-22', 3),
    (NULL, '【爆款¥1699 秒杀】泰国 曼谷 芭堤雅 金沙岛 杜拉拉水上市场 双飞六天【含送签费 泰风情 广州往返 特价团】', 1699, '2018-01-27', 2),
    (NULL, '【经典•狮航 ¥2399 秒杀】巴厘岛双飞五天 抵玩【广州往返 特价团】', 2399, '2017-12-23',2),
    (NULL, '香港迪士尼乐园自由行 2 天【永东跨境巴士广东至迪士尼去程交通+迪士尼一日门票+香港如心海景酒店暨会议中心标准房 1 晚住宿】', 799, '2018-04-10', 4);
    
    select * from tab_route;
    

    4. 多对多

    多对多(m:n) 例如:老师和学生,学生和课程,用户和角色

    • 建表原则:

    多对多关系建表原则: 需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。

    4.1 多对多关系案例

    4.1.1 需求:一个用户收藏多个线路,一个线路被多个用户收藏

    • 界面:

    • 表与表的关系:

    对于多对多的关系我们需要增加一张中间表来维护他们之间的关系

    4.1.2 具体操作:

    /*
    创建用户表 tab_user
    uid 用户主键,自增长
    username 用户名长度 100,唯一,非空
    password 密码长度 30,非空
    name 真实姓名长度 100
    birthday 生日
    sex 性别,定长字符串 1
    telephone 手机号,字符串 11
    email 邮箱,字符串长度 100
    */
    create table tab_user (
      uid int primary key auto_increment,
      username varchar(100) unique not null,
      password varchar(30) not null,
      name varchar(100),
      birthday date,
      sex char(1) default '男',
      telephone varchar(11),
      email varchar(100)
    )
    -- 添加用户数据
    INSERT INTO tab_user VALUES
    (NULL, 'cz110', 123456, '老王', '1977-07-07', '男', '13888888888', '66666@qq.com'),
    (NULL, 'cz119', 654321, '小王', '1999-09-09', '男', '13999999999', '99999@qq.com');
    
    select * from tab_user;
    /*
    创建收藏表 tab_favorite
    rid 旅游线路 id,外键
    date 收藏时间
    uid 用户 id,外键
    rid 和 uid 不能重复,设置复合主键,同一个用户不能收藏同一个线路两次
    */
    create table tab_favorite (
      rid int,
      date datetime,
      uid int,
      -- 创建复合主键
      primary key(rid,uid),
      foreign key (rid) references tab_route(rid),
      foreign key(uid) references tab_user(uid)
    )
    -- 增加收藏表数据
    INSERT INTO tab_favorite VALUES
    (1, '2018-01-01', 1), -- 老王选择厦门
    (2, '2018-02-11', 1), -- 老王选择桂林
    (3, '2018-03-21', 1), -- 老王选择泰国
    (2, '2018-04-21', 2), -- 小王选择桂林
    (3, '2018-05-08', 2), -- 小王选择泰国
    (5, '2018-06-02', 2); -- 小王选择迪士尼
    
    select * from tab_favorite;
    

    5. 表与表之间的关系小结

    表与表的关系关系的维护
    一对一1) 特殊一对多,从表中的外键设置为唯一。2)从表中的主键,也是外键
    一对多主外键的关系
    多对多中间表,两个一对多

    OK,这篇就到这里

    展开全文
  • MySQL数据库表与表之间关系

    千次阅读 2019-09-06 21:52:54
    一对多(多对一) 用户和订单 用户表user和 订单表orders 一个用户可以对应多个订单 ------ 用户和订单是一对多的关系 ...在创建表的时候直接创建出外键约束:foreign key(uid) references user(uid) cre...
  • Power bi分析并建立表与表之间关系,同时通过表与表之间的数据绘制一些可视化图形。
  • 数据库表之间关系

    万次阅读 2018-09-15 08:53:14
    数据库表与表之间关系(设计表时考虑的)有三种:一对一、一对多(多对一)、多对多。 一对一 建表原则: 外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一unique。 外键是主键:主表的...
  • 如何创建数据库表之间的关联关系

    万次阅读 2015-10-24 16:04:22
    例如两张:Husband和wife,在数据库中设置彼此的主键id相互关联(少用) 此时在两个实体类中不用添加任何的对象属性 2.一对一的单向外键关联 例如两张:Husband和wife ***在设计实体类时建立联系: 对象
  • 知识点:数据库表的相关概念、创建数据库表的方法、设计数据库表、向数据库表中插入数据、建立不同数据库表之间关系、删除数据库表。 1、数据表相关的一些概念 1.1 数据库里的数据是如何保存的? 数据库...
  • 表与视图之间关系

    千次阅读 2019-04-16 09:42:03
    数据库中的数据都是存储在中的,而视图只是一个或多个依照某个条件组合而成的结果集,一般来说你可以用update,insert,delete等sql语句修改中的数据,而对视图只能进行select操作。但是也存在可更新的视图,...
  • 与表之间一般存在三种关系,即一对一,一对多,多对多关系。 下面分别就三种关系讲解数据库相关设计的思路和思考过程。 一、一对一关系 例如,下面的一张表,保存了人的相关信息,有男有女,要求查处所有的...
  • 关系型数据库表之间可存在的联系/关系(relationship)有三种:一对一、一对多和多对多。
  • 本篇博客讲解(子查询)非相关子查询/相关子查询,一对一,一对多,多对一,多对的的关系!准备:首先我们创建一列sex。再为部分行设置好值0(女)或者1(男);delete from stud where age=26; 删除年龄为26的行。 ...
  • 数据库表与表关系(超详细讲解)

    千次阅读 多人点赞 2020-01-22 22:06:48
    Spring Data JPA多操作表关系一对一一对多多对一多对多 本篇博文主要说明实际开发中常用的关联关系,一对多和多对多。 表关系 一对一 一对多 多对一 多对多 ...
  • 数据库设计 表和表之间的三种关系

    万次阅读 2017-12-15 17:29:50
    与表之间一般存在三种关系,即一对一,一对多,多对多关系。  下面分别就三种关系讲解数据库相关设计的思路和思考过程; (1)一对一关系  例如,下面的一张表,保存了人的相关信息,有男有女,要求查处所有...
  • 通常在实际工作中,数据库中表格都不是独立存在的,且表与表之间是有种联系的,比如两张表格,一张为分类表category,一张为商品表product。在分类表中有两个信息,cid、cname,商品表中有三个数据信息pid、name、...
  • 数据库表之间关系与实体类的对应

    千次阅读 2020-01-15 17:33:42
    如何在实体类中体现一对多,多对多的关系 一对多: 在从中添加主的实体类属性 在主中添加从的实体类的集合属性 多对多: 在两个中可添加另一个的实体类的集合属性 ...
  • 本文尝试用实际开发中常见的电商场景来厘清其背后需要的数据库中表与表之间关系,目的在于能够分析出常见购物网站的中实体间的关系,并能创建出对应的表。 文章目录1.实体间常见关系2.数据库实现(一对多)2.1一对...
  • 我想创建一个人员信息和部门信息,同时,我们想通过人员信息知道此人的部门信息。我们应该怎样建表呢。 下面我以表格的形式展示咱们数据库的结构。 人员信息 人员id 姓名 性别 部门id 001 小红...
  • 数据库(三) 表与表建立联系-外键

    千次阅读 2021-02-06 11:48:42
    1.理解表与表之间建立关系的必要性比如我们建立了一张个人信息表,把所有人的信息都存在这张表中这张表中有老师和他们所属的部门,并且不同的部门工作也是不同的所有数据存放在一张表中的弊端1.组织结构不清晰2.浪费...
  • MySQL 创建用户和好友

    千次阅读 2021-01-18 18:43:27
    人生如果错了方向,停止就是进步最近想做一个即时通讯的Android demo,但是一直不知道如何处理用户和好友之间的表关系。在网上找了好久也没找到...这一步相信大家都很明白,就是创建了一个my_chat的数据库创建表选...
  • Power BI(二十二)power pivot之使用Userelationship建立两表之间的多个关系 我们以销售记录以及日历年为例,假如我们想统计年份对应的下单数量及送货数量 使用USERELATIONSHIP函数,一般配合CALCULATE使用 ...
  • 一、一对多的关系 例:公司员工的关系,公司为一,公司员工为多,需要在多方建立外键指向一方的主键。...创建一张用户和一张角色,还需创建一张关系表关系表至少有两个外键,分别指向两张的主
  • 完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。...在启动Oracle数据库服务器时,实际上是在服务器的内存中创建一个Oracle实例(即在服务器内存中分配共享内存并创建相关的后台内存),然后由这个O...
  • sqlyog创建数据库表关系

    千次阅读 2019-09-25 14:04:14
    作为一个后台前端,数据库,需求分析,运维,PPT全包的码农来说。...第二步:把你要操作的拉进来 第三步:自动生成连接,把各个拖动到合适的位置。 就这么简单!好了,搞定,大家吃水果。 转载于:http...
  • 当我们所做的项目要和数据库打交道的时候,总会要在数据库中创建表。 而表之间关系:一对多,多对多,一对...表与表之间的关联关系: 一对多: CustomerDaoImpl.java package com.xbmu.dao.impl; import java.s
  • 如何让分类category和商品product之间产生关系? 如果有关系,在数据库中如何表示这种关系? 我们首先建立数据、插入数据: create table category( cid int primary key auto_increment, cname varchar(10)...
  • MYSQL创建及多关系

    千次阅读 2018-10-08 09:04:13
    前一篇博文学习总结了mysql的基本操作,DML创建的表与表之间有着一对多,多对多,一对一的关系,借着学习的劲头,总结一下这些关系。   一对多:部门和员工,卤肉店和肉,订单和商品  用户和订单  -- 创建...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 647,028
精华内容 258,811
关键字:

如何创建表与表之间的关系