本文共 2143 字,大约阅读时间需要 7 分钟。
复杂类型的对象有以下几种表现形态:
一对多或多对一的对象存到数据库表的设计方案
这里以部门和员工的关系来说明一对多或多对一的对象是怎么存储到数据库表中的。数据库表的设计的原则:先不要去管这些对象的关系,而是看某个对象有什么基本属性,然后相应地设计一个表来保存此对象的基本数据。那么在数据库里面怎么去保证数据往数据库里面存的时候,关系不丢呢?这里面也有一个原则:在多的一方加外键描述数据之间的关系。
数据库表的设计方案如下: 数据库表的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));
多对多对象的数据库表的设计方案
这里,以老师和学生的关系来说明多对多的对象是怎么存储到数据库表中的。再次重申数据库表的设计的原则:先不要去管这些对象的关系,而是看某个对象有什么基本属性,然后相应地设计一个表来保存此对象的基本数据。那么在数据库里面怎么去保证数据往数据库里面存的时候,关系不丢呢?这时,需要加一个中间表来描述数据的关系。
数据库表的设计方案如下: 数据库表的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列值加在一起不能重复。
一对一对象的数据库表的设计方案
这里,以身份证管理系统来说明一对一的对象是怎么存储到数据库表中的。最后再重申一遍数据库表的设计原则:先不要去管这些对象的关系,而是看某个对象有什么基本属性,然后相应地设计一个表来保存此对象的基本数据。一对一的对象有一个主从关系,主可以没有从,但从不能没有主。在身份证管理系统中,一对一的关系表现为一个人只能有一张身份证,一张身份证只能属于一个人;主是人,从是身份证,一对一的对象有一个主从关系表现为人可以没有身份证,但身份证不能不属于人。
数据库表的设计方案如下: 数据库表的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));
自连接表的设计方案
这里,以家族管理系统来说明自连接表的设计。数据库表的设计方案如下:
温馨提示:自连接,外键列不能加非空约束。 数据库表的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));
面试题:请设计一个无限极分类的表
有一个常见的面试题,请设计一个无限极分类的数的数据库表,即是要设计一个无限极分类的表。这里,以一个商品分类表来说明怎样去设计一个无限极分类的表。下面用图来说明:
总结
如果不使用数据库的三大范式建表,而是直接设计一张表,把所有数据都存到一张表里,那么会出现冗余数据,但是查询性能很好,不需要查多表。例如,在多对多对象的表的设计中,我们也可以设计一张表,把所有数据存到一张表里。
转载地址:https://liayun.blog.csdn.net/article/details/52260359 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!