Java Web基础入门第四十四讲 数据库表的设计

复杂类型的对象有以下几种表现形态:
Java Web基础入门第四十四讲 数据库表的设计_第1张图片

一对多或多对一的对象存到数据库表的设计方案

这里以部门和员工的关系来说明一对多或多对一的对象是怎么存储到数据库表中的。数据库表的设计的原则:先不要去管这些对象的关系,而是看某个对象有什么基本属性,然后相应地设计一个表来保存此对象的基本数据。那么在数据库里面怎么去保证数据往数据库里面存的时候,关系不丢呢?这里面也有一个原则:在多的一方加外键描述数据之间的关系。
数据库表的设计方案如下:
Java Web基础入门第四十四讲 数据库表的设计_第2张图片
数据库表的SQL语句如下:

  • department表

    create table department
    (
        id int primary key,
        name varchar(40)
    );
    
  • employee表

    create table employee
    (
    	id int primary key,
    	name varchar(40),
    	salary decimal(8,2),
    	department_id int,
    	constraint department_id_FK foreign key(department_id) references department(id)
    );
    

多对多对象的数据库表的设计方案

这里,以老师和学生的关系来说明多对多的对象是怎么存储到数据库表中的。再次重申数据库表的设计的原则:先不要去管这些对象的关系,而是看某个对象有什么基本属性,然后相应地设计一个表来保存此对象的基本数据。那么在数据库里面怎么去保证数据往数据库里面存的时候,关系不丢呢?这时,需要加一个中间表来描述数据的关系。
数据库表的设计方案如下:
Java Web基础入门第四十四讲 数据库表的设计_第3张图片
数据库表的SQL语句如下:

  • teacher表

    create table teacher
    (
        id int primary key,
        name varchar(40),
        salary decimal(8,2)
    );
    
  • student表

    create table student
    (
        id int primary key,
        name varchar(40)
    );
    
  • teacher_student表(中间表)

    create table teacher_student
    (
        teacher_id int,
        student_id int,
        primary key(teacher_id,student_id),
        constraint teacher_id_FK foreign key(teacher_id) references teacher(id),
        constraint student_id_FK foreign key(student_id) references student(id)
    );
    

    温馨提示:关于中间表的设计,在设计主键时,应将teacher_id和student_id这2列作为联合主键,即这2列值加在一起不能重复。

一对一对象的数据库表的设计方案

这里,以身份证管理系统来说明一对一的对象是怎么存储到数据库表中的。最后再重申一遍数据库表的设计原则:先不要去管这些对象的关系,而是看某个对象有什么基本属性,然后相应地设计一个表来保存此对象的基本数据。一对一的对象有一个主从关系,主可以没有从,但从不能没有主。在身份证管理系统中,一对一的关系表现为一个人只能有一张身份证,一张身份证只能属于一个人;主是人,从是身份证,一对一的对象有一个主从关系表现为人可以没有身份证,但身份证不能不属于人。
数据库表的设计方案如下:
Java Web基础入门第四十四讲 数据库表的设计_第4张图片
数据库表的SQL语句如下:

  • person表

    create table person
    (
        id int primary key,
        name varchar(40)
    );
    
  • idcard表

    create table idcard
    (
        id int primary key,
        city varchar(40),
        constraint id_FK foreign key(id) references person(id)
    );
    

自连接表的设计方案

这里,以家族管理系统来说明自连接表的设计。数据库表的设计方案如下:
Java Web基础入门第四十四讲 数据库表的设计_第5张图片
温馨提示:自连接,外键列不能加非空约束。
数据库表的SQL语句如下:

  • person表

    create table person
    (
        id int primary key,
        name varchar(40),
        parent_id int,
        constraint parent_id_FK foreign key(parent_id) references person(id)
    );
    

面试题:请设计一个无限极分类的表

有一个常见的面试题,请设计一个无限极分类的数的数据库表,即是要设计一个无限极分类的表。这里,以一个商品分类表来说明怎样去设计一个无限极分类的表。下面用图来说明:
Java Web基础入门第四十四讲 数据库表的设计_第6张图片

总结

如果不使用数据库的三大范式建表,而是直接设计一张表,把所有数据都存到一张表里,那么会出现冗余数据,但是查询性能很好,不需要查多表。例如,在多对多对象的表的设计中,我们也可以设计一张表,把所有数据存到一张表里。
在这里插入图片描述

你可能感兴趣的:(Java,Web基础入门)