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

    总结:

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

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

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

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


  • 相关阅读:
    flink学习知识点小结
    python 无监督生成模型
    vector+算法sort与list+sort的效率比较,容易写错的地方原因探析
    java集成WebSocket
    day3 力扣
    mellanox在vmware中的切割
    uniapp(uncloud) 使用生态开发接口详情3(新增产品分类,产品列表,新闻列表)
    latex:表格(包含表格标题)实例
    Privacy Policy for 高中英语
    配置网卡多队列
  • 原文地址:https://blog.csdn.net/zzy734437202/article/details/134486591