• 多表设计和关联查询


    多表设计

    为什么要使用多表?

    因为需要存储不同的信息

    为什么需要多表关联?

    因为设计多张表的时候,减少了数据冗余,但是数据与数据之间有一定的关系,这时就需要多表关联。

    设计原则

    数据库设计范式

    ​ 为了建立冗余小、结构合理的数据库,设计数据库时需要遵循一定的规则。在关系型数据库中这种规则被称为范式。范式是符合某一种设计要求的总结。

    目前关系型数据库有5种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。

    1. 第一范式:确保每一列保持原子性

      第一范式是最基本的范式。意思就是说表中的每列都不可再分,如:

      编号姓名联系方式
      001张三15199996666
      002王五2766669999
      003李四1666666666

      三个人填的都是联系方式,问题来了:你知道他们填的是手机号?QQ号?又或者是微信号?确定起来非常麻烦。因此需要确保每列的原子性。可以将联系方式改为具体的手机号或者其他的。

    2. 第二范式:要有主键,其他字段都依赖于主键
      • 主键:能唯一标识一条记录且不能为空、不能重复的一组属性。
      • 主键的作用:①唯一地标识一行数据;②作为可以被外键引用的对象。
      • 其他字段为什么要依赖于主键?——>因为主键是唯一标识,不依赖主键就找不到他们。更重要的是其他字段组成的这行记录和主键所表示的是同一个东西,而主键是惟一的,其他的只需要依赖主键,也就成惟一的了。
    3. 第三范式:消除传递依赖,即“消除冗余”

      意思就是:不同的表只存储一类信息,然后通过主键和外键关联。

      如一个订单表:

      订单编号数量商品编号商品名称单价订单金额
      000120202手机20004000

      在这里知道商品编号后就可以知道商品名称和单价

      订单编号数量订单金额商品编号
      0001240000202
      商品编号商品名称单价
      0202手机2000

    一般来说,数据库只需要满足第三范式就可以了。

    什么是外键,外键的作用

    一个表的外键是另一个表的主键,外键可以重复,也可以是空值。外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。如:A表中的一个字段,是B表的主键,那么这个字段就是A表的一个外键。注意:一张表的主键只有一个,外键可以有多个。

    在多表关联时,有两种关联方式:

    1. 弱关联:表与表之间没有任何约束关系的

    2. 强关联:有外键约束

    添加外键

    /*创建表时添加外键*/
    CREATE TABLE score (
    	cid INT PRIMARY KEY AUTO_INCREMENT ,
    	score INT,
    	sid INT,
    	CONSTRAINT FK_students_score_id FOREIGN KEY (sid) REFERENCES students(id)
    )
    /*添加外键语句:
    	CONSTRAINT 约束名 foreign key(本表的外键名) references 外表(外表中的主键)
    	约束名规则:FK_外表_主表_外表的主键列
    	
    	注意:外表称为被参照表,
    		 主表称为参照表。
    	*/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    /*表已经创建时添加外键*/
    -- 添加列
    ALTER TABLE  score ADD COLUMN sid INT
    -- 添加外键约束
    ALTER TABLE score ADD CONSTRAINT FK_students_score_id FOREIGN KEY (sid) REFERENCES students(id)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    当参照表中没有记录时不能将记录添加到参照表中

    当参照表中有对应记录时,不能在被参照表中删除

    删除被参照表之前先删除参照表

    关联查询

    含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询。

    笛卡尔乘积现象:表1有m行,表2有n行,结果=m*n

    发生原因:没有有效的连接条件。只需要添加有效连接条件。

    连接条件的分类

    内连接

    分为等值连接、非等值连接、自然连接

    就是把满足条件的两张表中的交集数据查询出来

    语法:Select 结果 from 表1,表2 where 表1.column1 = 表2.column2

    外连接

    外左连接(left join):

    select 结果 from 表1 left join 表2 on 表1.column1 = 表2.column2

    外有链接(right join):

    select 结果 from 表1 right join 表2 on 表1.column1 = 表2.column2

  • 相关阅读:
    运行springBoot项目
    ElementUI之首页导航及左侧菜单(模拟实现)
    深度学习| 注意力机制
    MySQL开窗函数
    多视图几何(运动恢复结构sfm)---欧式结构只能获取和世界等比例的点云,这个地方可以解决项目之中的斜率问题,但是不能够解决实际高度的问题。
    【问题思考总结】截得两部分质量相等的点是否就是质心?
    “鼓浪屿元宇宙”,能否成为中国文旅产业的“升级样本”
    JavaWeb之HTTP、Tomcat、Servlet
    Coinbase早期投资人Garry:我对比特币有充足的预见 2021-04-16
    甲硝唑修饰二硫化钨MoS2/二硒化钨WSe2/碲化钨WTe2/二氧化锰MnO2/四氧化三铁Fe3O4/二氧化硅SiO2/二氧化钛TIO2纳米粒
  • 原文地址:https://blog.csdn.net/qq_55931044/article/details/127452395