MySQL-多表设计

黑马程序员JavaWeb开发教程

  • 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:
    • 一对多(多对一)
    • 多对多
    • 一对一

一、一对多(多对一)

  1. 一对多实现:在数据库表中多的一方,添加字段,来关联一的一方的主键
  2. 外键语法
    • 创建表时指定 create table 表名
create table  baoming (
    字段名 数据类型,
    ...
    [constraint] [外键名称] foreign key(外键字段名) references 主表(字段名)
);
- 建表完成之后添加外键
alter  table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(字段名);
  1. 外键分类
    • 物理外键
      • 概念:使用foreign key 定义外键关联另一张表
      • 缺点:影响增删改查的效率(需要检查外键关系)
      • 仅用于单节点数据库,不适用于分布式、集群场景
      • 容易引发数据库的死锁问题,消耗性能
  • 逻辑外键
    • 概念:在业务逻辑中,解决外间关联
    • 通过逻辑外键,就可以很方便的解决上述问题

二、一对一

  1. 案例:用户与身份证信息的关系
  2. 关系:一对一关系,多用于单标拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率
  3. 实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(unique)

三、多对多

  1. 案例:学生与课程的关系
  2. 关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择
  3. 实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

相关推荐

  1. MySQL-设计

    2024-04-22 18:54:05       31 阅读
  2. MySQL:DQL语句和设计

    2024-04-22 18:54:05       32 阅读
  3. MySQL中的设计

    2024-04-22 18:54:05       26 阅读
  4. MySQL - 查询

    2024-04-22 18:54:05       64 阅读
  5. MySQL-查询

    2024-04-22 18:54:05       74 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 18:54:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 18:54:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 18:54:05       82 阅读
  4. Python语言-面向对象

    2024-04-22 18:54:05       91 阅读

热门阅读

  1. PG用户密码有效期设置

    2024-04-22 18:54:05       38 阅读
  2. Shell流程if与模式匹配case

    2024-04-22 18:54:05       34 阅读
  3. Redis:redis 版本过低

    2024-04-22 18:54:05       31 阅读
  4. 华为校招机试 - 扑克牌消除(20240417)

    2024-04-22 18:54:05       30 阅读
  5. HarmonyOS之http请求数据返回值为字符串存储渲染

    2024-04-22 18:54:05       35 阅读
  6. 基于AI的pdf转word方法

    2024-04-22 18:54:05       53 阅读
  7. html中字体加粗

    2024-04-22 18:54:05       34 阅读
  8. 用Python设计一个计算器

    2024-04-22 18:54:05       34 阅读