• <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对应。

    总结:

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

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

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

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


  • 相关阅读:
    TCP/IP 网络分层模型
    c++ 哈希表(Hash Table)
    2000-2021年全国30省市水土流失治理面积、水库数量、水库总容量、除涝面积数据
    Java数据结构之稀疏数组
    【leetcode】数组排序
    标准C++day2——函数重载、默认形参和引用
    量子计算和量子通信技术
    敏捷开发精准估算
    vue-cli、create-react-app等常用工具安装、更新、查看版本等操作命令汇总
    pdf如何添加水印?
  • 原文地址:https://blog.csdn.net/zzy734437202/article/details/134486591