精华内容
下载资源
问答
  • SQL创建及多表之间关系

    千次阅读 2018-11-29 22:46:32
    ### SQL 会创建及多关系 #### 需求: 分类和商品表之间是不是有关系? 如果有关系,在数据库中如何表示这种关系 ```sql create table category(  cid int primary key auto_increment,  cname varchar...

    ### 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的所有商品

    - 建数据库原则:

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


    - 多表之间的建表原则

      - 一对多 : 商品和分类

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

          ​

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

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

        ​

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

        - 建表原则:  

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

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

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

    展开全文
  • Power BI(二十二)power pivot之使用Userelationship建立两表之间的多个关系 我们以销售记录以及日历年为例,假如我们想统计年份对应的下单数量及送货数量 使用USERELATIONSHIP函数,一般配合CALCULATE使用 ...

     Power BI(二十二)power pivot之使用Userelationship建立两表之间的多个关系

    我们以销售记录以及日历年为例,假如我们想统计年份对应的下单数量及送货数量

    使用USERELATIONSHIP函数,一般配合CALCULATE使用

    我们知道下单日期与实际进货日期可能不为同一天,所以我们想创建

    销售记录(下单日期)-----日期

    销售记录(实际送货日期)----日期

    打开关系视图(建立连接关系)

    (之前在没有接触这个函数之前,会重新制定一张日历表,之后再建立关联,现在想想省了不少功夫)

    但是只有一种关系视活动的,上图实线是活动的,虚线是不活动的(两条线必须是我们建立的)

    建立度量值

    训练的下单数量:=SUM([数量])

    训练的送货数量:=CALCULATE(SUM([数量]),USERELATIONSHIP('销售记录'[实际送货日期],'日历年'[日期]))

    数据透视表

    完毕

    展开全文
  • 本文尝试用实际开发中常见的电商场景来厘清其背后需要的数据库中表之间关系,目的在于能够分析出常见购物网站的中实体间的关系,并能创建出对应的。 文章目录1.实体间常见关系2.数据库实现(一对多)2.1一对...

    本文尝试用实际开发中常见的电商场景来厘清其背后需要的数据库中表与表之间的关系,目的在于能够分析出常见购物网站的中实体间的关系,并能创建出对应的表。

    1.实体间常见关系

    • 购物网站中常有的实体一般包括:

      • 用户 订单 商品 分类
      • 这背后在数据库中都对应一张表来存放具体的数据,显然这些表之间不是孤立的,而是互相联系。
    • 常见关系:

      • 一对多:
        • 用户和订单:一个用户可以拥有多个订单,但是一个确定的订单只能属于一个用户
        • 分类和商品
      • 多对多:
        • 订单和商品:一个订单可以包含多个商品,而同一个商品可以出现在多个订单中
        • 学生和课程
      • 一对一:
        • 丈夫和妻子
    • ER图用来描述实体与实体之间的关系
      在这里插入图片描述

      • 实体用矩阵表示(一个实体对应一张表)
      • 属性用椭圆表示(属性对应字段)
      • 关系用菱形表示

    2.数据库实现(一对多)

    2.1一对多情况的引入

    • 假设现在有一张用户表和一个订单表,里面数据的具体关系如图:
      在这里插入图片描述
    • 上述表示张三拥有订单1和2,李四拥有订单3,但是数据库中显然不可能有划线的方式来表示关系,所以为了解决这个问题,引入外键。

    2.2利用外键实现一对多

    以一对多为例:

    • 在开发中,关系中的一方称之为主表或者一表,关系中的多方称之为多表或者从表,
      为了表示一对多的关系,一般会在多表的一方添加一个字段,字段名称自定义(建议:主表的名称_id)
      字段类型一般和主表的主键的类型保持一致,我们称这个字段为外键
    • 所以为了表示上述关系,我们需要在订单表中添加一个字段user_id
      在这里插入图片描述

    2.3数据库实现(一对多)

    2.3.1不设置外键的情况

    • 1.创建用户表
    create table user(
    id int primary key auto_increment,
    name varchar(20)
    );
    
    • 2.创建订单表
    create table orders(
    id int primary key auto_increment,
    totalprice double,
    user_id int
    );
    
    • 3.初始化数据
    insert into user values(3,'张三');
    insert into user values(4,'李四');
    
    insert into orders values(1,1314,3);
    insert into orders values(2,1314,3);
    insert into orders values(3,1314,4);
    

    在这里插入图片描述

    • 4.删除user表中id=4的数据
      在这里插入图片描述
    • 这时候有个问题,订单表中的属于id=4的用户的订单现在属于谁呢? 所有前面的步骤并没有实现一个外键,我们只是厘清了表之间的关系,建立了相关的字段,但是这两张表仍然是独立的,还没有关联起来。

    2.3.2为主(多)表和从(一)表之间添加外键

    • 为了保证数据的有效性和完整性,添加外键约束
    • 格式:alter table 多表名称 add foreign key(外键字段名称) references 一表名称(主键字段)
    • 例如:
    alter table orders add foreign key(user_id) references user(id);
    

    在这里插入图片描述

    • 这里出现了报错,就是因为刚才删除了id=4的数据导致现在的数据不是完整的,所以先添加一条id=4的数据到user表,再执行上述语句
    insert into user values(4,'赵云');
    alter table orders add foreign key(user_id) references user(id);
    

    在这里插入图片描述

    • 现在再尝试删除id=4的记录
    delete from user where id = 4;
    
    

    在这里插入图片描述

    • 现在就无法删除了,报错信息大意是无法删除主表的一行,由于有外键约束。

    2.3.3添加外键约束后的2个特点(重要)

    • 1.主表不能删除从表中已存在的数据(就是上述例子)
    • 2.从表中不能添加主表中不存在的数据

    2.3.4小结(重要)

    在开发中处理实体间一对多的关系时,往往在多表中添加一个外键字段,字段名为主表的名称_id,字段类型与主表的主键类型保持一致,然后在该外键字段上添加与主表的外键约束。

    3.数据库实现(多对多)

    在上述学习完成后,理解了一对多的外键实现,现在来学习多对多就相对简单了。

    3.1多对多情况的引入

    • 在下图中,一个订单含有多个商品,一个商品属于多个订单,这是典型的多对多的关系。
      在这里插入图片描述

    3.2利用中间表实现多对多

    • 多对多,在开发我们一般引入一张中间表,在中间表中存放两张表的主键,一般还会将这两个主键设置成中间表的联合主键,将多对多拆分成两个一对多,为了保证数据的有效性和完整性,在中间表上添加两个外键约束即可

    3.3数据库实现外键(多对多)

    • 创建商品表
    create table product(
    id int primary key auto_increment,
    name varchar(20),
    price double
    );
    
    • 创建中间表
    create table orderitem(
    oid int,
    pid int
    );
    
    • 添加外键约束
    alter table orderitem add foreign key(oid) references orders(id);
    alter table orderitem add foreign key(pid) references product(id);
    

    在这里插入图片描述

    3.4利用可视化工具(SQLyog)快速查看表之间的关系

    在这里插入图片描述

    3.5小结

    开发中处理多对多:

    • 引入一张中间表,存放两张表的主键,一般会将这两个字段设置为联合主键,这样就可以将多对多的关系拆成两个一对多了
    • 为了保证数据的有效性和完整性需要在中间表上添加两个外键约束即可.
    展开全文
  • 如何创建数据库表之间的关联关系

    万次阅读 2015-10-24 16:04:22
        一对一关联   1.一对一的单向主键关联: ...此时在两个实体类中不用添加任何的对象属性 2.一对一的单向外键关联 例如两张:Husband和wife ***在设计实体类时建立联系: 对象
    

             
                                             一对一关联
     
    1.一对一的单向主键关联:
    例如两张表:Husband和wife,在数据库中设置彼此的主键id相互关联(少用)
    此时在两个实体类中不用添加任何的对象属性
    2.一对一的单向外键关联
    例如两张表:Husband和wife
    ***在设计实体类时建立联系:
    对象模型:只在Husband类中添加属性private Wife wife;并生成getter和setter方法,
             如果不使用多表关联查询HQL语句,那么要进行多表查询需在Husband实体类中再添加private int wifeid;属性,这也是传统做法
    关系模型:以Wife表为主导:
             在Husband表中添加一个字段wifeid,该字段与wife表中的id建立关联关系
    或者:
    对象模型:只在Wife类中添加属性private Husband husband;并生成getter和setter方法,
             如果不使用多表关联查询HQL语句,那么要进行多表查询需在Wife实体类中添加private int husbandid;属性,这也是传统做法
    关系模型:以Husband表为主导:
             在wife表中添加一个字段husbandid,该字段与husband表中的id建立关联关系
    3.一对一的双向外键关联
    对象模型:在Husband类中添加属性private Wife wife;并生成getter和setter方法,同时在
             在Wife类中添加属性private Husband husband;并生成getter和setter方法
    关系模型:两种主导关系建立任意一种即可,不必两种主导关系同时建:
             以Wife表为主导:在Husband表中添加一个字段wifeid,该字段与wife表中的id建立关联关系或者
             以Husband表为主导:在wife表中添加一个字段husbandid,该字段与husband表中的id建立关联关系
            
    4.一对一双向主键关联----(不重要,此处不再介绍)

    ----------------------------------------------------------------------------------------------
    总结:一对一单向和双向在数据库中的表现是一样的,区别体现在java程序中,单向只能找一次,双向可以相互找到
    ----------------------------------------------------------------------------------------------
     
                                     一对多和多对一关联 ---- 原则:在多方添加外键
      两张表:user表和group表
    1.多对一的单向关联:
    对象模型:根据在多方添加外键的构思:在多方User类中添加属性:private Group group;
    关系模型:在user表中添加groupid字段,该字段和group表中的id关联
    2.一对多的单向关联:
    对象模型:在一的一方设置多方的集合属性:即在group中设置:private Set<User> users = new HashSet<User>();//此处最适合使用set集合,因为不会重复
    关系模型:和多对一在数据库的表现一致,同样遵循在多方设置外键的思想,即在user表中添加groupid字段,该字段和group表中的id关联
    3.多对一(一对多)的双向关联:
    对象模型:在单方添加集合属性,在多方添加对象属性
    关系模型:和单向在数据库的表现一致,同样遵循在多方设置外键的思想,即在user表中添加groupid字段,该字段和group表中的id关联
    ----------------------------------------------------------------------------------------------
    总结:数据库表现相同并遵循一个原则:在多方设置外键
    ----------------------------------------------------------------------------------------------

                                                多对多关联 --- 增加中间表
      两张表:teacher表和student表
    1.多对多单向关联:
    对象模型:在其中某一个实体类中设置set集合属性
    关系模型:增加中间表,包含studentid和teacherid,并分别向两张表做关联
    2.多对多双向关联:
    对象模型:在两个实体类中均设置set集合属性
    关系模型:和单向关联在数据库表现一致,增加中间表,包含studentid和teacherid,并分别向两张表做关联
    -----------------------------------------------------------------------------------------------
    总结:在数据库表现一致:增加中间表,类中设置set集合
    -----------------------------------------------------------------------------------------------

    -----------之前的BBS项目中数据库表设计:
    新闻表和评论表:
                 1.如果要先查询新闻再查询评论,则确定两张表为一对多关系
                 2.如果想在查询评论的时候查询它属于哪个新闻,则确定关系为多对一
    到底是一对多还是多对一对在数据库中的表现没有影响,都是在多方设置外键,但是在java类中的表现不同,
    是在一方添加set集合属性,还是在多方添加对象属性,这取决于关联关系,既然双向,单向在数据库中表现一致,
    那么在java类中建议设置成双向关联。


    展开全文
  • Neo4j-创建节点之间关系

    万次阅读 2018-12-14 11:22:40
    但是节点的关系创建有点复杂,因为需要考虑如何匹配到有关系两个节点,以及关系本身的属性如何设置。这里我简单学一下如何建立节点之间关系。 选择的顺序是由易到难,而不是场景的使用频率。 1,新节点+新关系+...
  • 数据库表之间关系

    万次阅读 2018-09-15 08:53:14
    数据库表之间关系(设计时考虑的)有三种:一对一、一对多(多对一)、多对多。 一对一 建表原则: 外键唯一:主的主键和从的外键(唯一),形成主外键关系,外键唯一unique。 外键是主键:主的...
  • 知识点:数据库的相关概念、创建数据库的方法、设计数据库、向数据库中插入数据、建立不同数据库表之间关系、删除数据库。 1、数据相关的一些概念 1.1 数据库里的数据是如何保存的? 数据库...
  • neo4j创建节点之间关系

    千次阅读 2019-04-18 10:38:35
    但是节点的关系创建有点复杂,因为需要考虑如何匹配到有关系两个节点,以及关系本身的属性如何设置。这里我简单学一下如何建立节点之间关系。 选择的顺序是由易到难,而不是场景的使用频率。 1,新节点+新关系+...
  • 大家好,今天遇到了在db2中 两个数据库之间两个表的联合查询 我知道oracle中有dblink,可是不知到db2的两个数据库联合查询怎么处理 我找了类似于 比如两个数据库: db1,db2 用户名 密码 select * from db1....
  • 其中A1和B1之前有外键关联关系(A1的有一个字段指向B1),如何跨用户建立两个表之间的外键关系: 1. grant select, insert, update, delete, references, alter, index on B1 to A;  其中,B1是指,A指用户,...
  • 表之间关系

    万次阅读 2018-05-29 16:42:45
    表与表之间关系表与表之间的关系(设计表时考虑的)有三种:一对一、一对多(多对一)、多对多。一对一一对一:一张表的一条记录一定只能与另外一张表的一条记录进行对应;反之亦然。 一常用表中的一条记录,...
  • 今天主要学习了Activity 组件...(1) 一Activity就是一类,并且这类要继承Activity (2) 需要复写onCreate() 方法 (3) 每一Activity都需要在AndroidManifest.xml文件中进行配置 (4) 为Activity添加必要的控件
  • SQL server 如何建立两个表关系

    千次阅读 2018-07-14 21:07:27
    5、sql server 两个表之间的关联(触发器)---- https://blog.csdn.net/fendou300/article/details/79037544 6、 SQL怎样把一个的数据插入到另一个表里?---- https://zhidao.baidu.com/question/5920017.html ...
  • MYSQL创建及多关系

    千次阅读 2018-10-08 09:04:13
    前一篇博文学习总结了mysql的基本操作,DML创建表之间有着一对多,多对多,一对一的关系,借着学习的劲头,总结一下这些关系。   一对多:部门和员工,卤肉店和肉,订单和商品  用户和订单  -- 创建...
  • alter table student add constraint stu_sub_fk foreign key (subjectid) references subject(id);
  • MySQL数据库表之间关系

    千次阅读 2019-09-06 21:52:54
    一对多(多对一) 用户和订单 ...通过创建外键约束的方式使两个表关联起来,外键创建在多的一方 创建外键的方式 在创建表的时候直接创建出外键约束:foreign key(uid) references user(uid) cre...
  • 我目前用的是pl/sql对数据库进行操作,数据库中大概有几百张表,我想看看这些表之间有没有关联关系(我需要用到的有没有关联关系以及是通过那些字段关联的)。我试着用网上的方法:新建一diagram window,...
  • Oracle: Oracle数据库的实例、空间、用户、表之间关系 完整的Oracle数据库通常由部分组成:Oracle数据库和数据库实例。 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等); 2...
  • 外键 通常在实际工作中,数据库中表格都不是独立存在的,且...两张要想有着某种联系,需要设定主键和外键两个属性,其中在分类(主)中将cid设置为主键,商品(从)中pid设置为外键。 外键特点:
  • mysql学习(5):多表之间关系

    千次阅读 2016-12-31 17:29:53
    mysql相互关联的表之间存在一对一,一对多(多对一),多对多的关系。 1,一对一的关系 这种关系即多个表具有相同的主键,实际中用的并不多,因为完全可以将这种关系的合并为同一张。 2,一对多(多对一)的关系 ...
  • 如何让分类category和商品product之间产生关系? 如果有关系,在数据库中如何表示这种关系? 我们首先建立数据、插入数据: create table category( cid int primary key auto_increment, cname varchar(10)...
  • 表之间一般存在三种关系,即一对一,一对多,多对多关系。 下面分别就三种关系讲解数据库相关设计的思路和思考过程。 一、一对一关系 例如,下面的一张,保存了人的相关信息,有男有女,要求查处所有的...
  • 一、一对多的关系 例:公司与员工的关系,公司为一,公司员工为多,需要在多方建立外键指向一方的主键。...创建一张用户表和一张角色表,还需创建一张关系表关系表至少有两个外键,分别指向两张表的主
  • 用主外键关系可以关联两个或多个,进行查询,但是,我也可以使用where tableName1.column1=tableName2.column2;来查询,差别不大,这个逻辑怎么理解?我是这么理解的,你是个男的,你要找一个女人生孩子,你可以找...
  • Hibernate关联映射——对象的三种关系Hibernate框架基于ORM设计思想,它将关系型数据库中的与...一对一创建表的原则有种: 唯一外键对应 在任意一方添加一外键来描述对应关系。如下图所示: 或者 主键对应
  • Oracle创建表空间、用户、全程指南 think about it,在SQL Server或者MySQL中,一般情况下(暂不考虑多租户等特殊情况),一项目对应DBMS中的一数据库,连接字符串中是用“用户名+密码+数据库名”来唯一标识...
  • Oracle - 数据库的实例、空间、用户、表之间关系

    千次阅读 多人点赞 2018-01-03 22:40:46
    完整的Oracle数据库通常由部分组成:Oracle数据库和数据库实例。...在启动Oracle数据库服务器时,实际上是在服务器的内存中创建Oracle实例(即在服务器内存中分配共享内存并创建相关的后台内存),然后由这
  • 之所以说这两个概念容易混淆,是因为对于PostgreSQL来说,这是完全相同的两个对象。唯一的区别是在创建的时候:  1.我用下面的psql创建了角色kanon:  CREATE ROLE kanon PASSWORD 'kanon';  接着我使用新创建...
  • 前言     SQL server中有五约束:primary key 主键约束,foreign key 外键约束,unique 唯一... 创建表 数据库→→ 二. 创建primary key主键约束 右击 三. 创建foreign key外键约束 四. ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 919,585
精华内容 367,834
关键字:

创建两个表之间的关系