当前位置: 首页 > article >正文

<MySQL> 如何合理的设计数据库中的表?数据表设计的三种关系

目录

一、表的设计

二、一对一关系

三、一对多关系

四、多对多关系


一、表的设计

        数据库设计就是根据需要创建出符合需求的表。

        首先根据需求找到体系中的关键实体对象,通常每个实体对象都会有一个表,表中包含了这个实体的相关属性。

        再理清楚实体对象间的关系,不同的关系有不同的设计表的方式。

表的三种关系有:

关系说明
一对一的关系表1中一行数据和表2的一行数据一一对应。
一对多的关系表1中一行数据可以对应表2的多行数据。
多对多的关系表1中一行数据可以对应表2的多行数据,表二的一行数据同样可以对应表1中的多行数据。

二、一对一关系

图示:

示例:

语句create table register(id int primary key,date datetime);
说明创建表格register,以id作为主键。
语句

create table student(

        stu_id int primary key,name varchar(32),reg_id int unique,

        foreign key(reg_id) references register(id)

        );

说明

创建表格student,以stu_id作为主键,reg_id是唯一键,

以reg_id作为外键,与表格register中的id一一对应

总结:根据上述示例可以发现,一对一关系下,外键和外键关联的其他键通常是主键或唯一键。

三、一对多关系

图示:

示例:

语句

create table class(num int primary key,name varchar(32));

说明创建表格class,以num作为主键。
语句

create table student(

        stu_id int primary key,name varchar(32),class_num int,

        foreign key(class_num) references class(num)

        );

说明创建表格student,以stu_id作为主键,以class_num作为外键,与表格class中的num对应
总结:根据上述示例可以发现,一对多关系下,外键并不是唯一键,而外键关联的其他键则是主键或唯一键。这代表外键的值可以重复,但是其取值范围只能被限定在外键关联键已有的值中。

四、多对多关系

图示:

示例:

语句

create table course(id int primary key,name varchar(32));

说明创建表格course,以id作为主键。
语句

create table student(id int primary key,name varchar(32));

说明创建表格student,以id作为主键。
语句

create table cou_stu(

        cou_id int,stu_id int

        foreign key(cou_id) references course(id)

        foreign key(stu_id) references student(id)

        );

说明

创建表格cou_stu,

以cou_id作为外键,与表格course中的id对应,

以stu_id作为外键,与表格student中的id对应。

总结:

根据上述示例可以发现,多对多关系下,需要创建一张关联表来记录数据。

关联表中的作为外键的字段并非唯一键,而外键关联的其他键则是主键或唯一键。

这与一对多关系的设计类似,外键的值可以重复,但是其取值范围只能被限定在外键关联键已有的值中。

不同的是,多对多关系的表设计中,外键关联语句存在多条。



http://www.kler.cn/a/133181.html

相关文章:

  • 使用 Web Search 插件扩展 GitHub Copilot 问答
  • 后端——接口文档(API)
  • 解决部署RKE2或K3S-“docker.io/rancher/mirrored-pause:3.6\“: -无法拉取镜像办法
  • Ubuntu+ROS 机械臂拾取和放置
  • 全面解读 USB Key:定义、使用场景、加密技术及 Java 实现
  • 【Visual Studio】设置文件目录
  • iptables详解:链、表、表链关系、规则的基本使用
  • Linux命令(126)之help
  • CentOS 7搭建Gitlab流程
  • nacos集群部署
  • 在VS Code中使用VIM
  • OSI网络模型与TCP/IP协议
  • 蓝桥杯每日一题2023.11.16
  • 春秋云境靶场CVE-2022-28512漏洞复现(sql手工注入)
  • 定时获取公网ip并发送邮件提醒
  • 【备忘】websocket学习之挖坑埋自己
  • conda从4.12升级到最新版23.9 自动升级失败 手动升级方法
  • mac苹果电脑需要安装杀毒软件吗?
  • Windows Server 2012 R2系统服务器远程桌面服务多用户登录配置分享
  • 要做好解决方案工程师,这些核心技能是必须要掌握的。
  • iceoryx(冰羚)-通信中间件解析
  • C++二分查找算法:查找和最小的 K 对数字
  • (七)什么是Vite——vite优劣势、命令
  • fopen/fwrite/fread 对UNICODE字符写入的总结
  • 【XTDrone Ubuntu20.04】XTDrone+ Ubuntu20.04 + PX4安装
  • 论文阅读:Auto White-Balance Correction for Mixed-Illuminant Scenes