三种主要的关系型表设计

Posted haoblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种主要的关系型表设计相关的知识,希望对你有一定的参考价值。

多表关系主要可以分三种:

1.一对一关系

2.多对一关系(如:员工与部门)

3.多对多关系(如:老师与学生)

mysql中建立这样的关系型多表的一般方案如下:

一、一对一关系

可以建立一个主表和一个副表,将数据量多的作为主表,其有自己id号作为主键,并有副表的id做为外键,

也可以直接将他们设计成一个表。

二、多对一关系

各建立一张表,多的表加上外键约束,建标语句如下:

CREATE TABLE department(
id varchar(30) PRIMARY KEY,
name varchar(30)
);

CREATE TABLE employee(
id varchar(30),
name varchar(30),
salary double,
department_id varchar(30),
PRIMARY KEY(id),
CONSTRAINT department_id_FK FOREIGN KEY(department_id) REFERENCES department(id) ON DELETE SET NULL
);

三、多对多关系

在建立两张基本信息表的同时,建立一个中间表,这个中间表通过两个键值来表达两个表的数据关系,见表语句如下:

CREATE TABLE teacher(
id varchar(30) PRIMARY KEY,
name varchar(30),
salary double
);

CREATE TABLE student(
id varchar(30) PRIMARY KEY,
name varchar(30)
);

CREATE TABLE teacher_student (
  teacher_id varchar(30) NOT NULL DEFAULT "",
  student_id varchar(30) NOT NULL DEFAULT "",
  PRIMARY KEY (teacher_id,student_id),
  CONSTRAINT student_id_FK FOREIGN KEY (student_id) REFERENCES student (id) ON DELETE CASCADE,
  CONSTRAINT teacher_id_FK FOREIGN KEY (teacher_id) REFERENCES teacher (id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

四、总结

  表中行的信息是通过id来标识的,多表的关系总是通过建立一个各个表的id映射来表达,这个映射表有时比较简单,就把它包含到其要映射的一个表中(如多对一关系表),而比较复杂时就单独提取出来(如多对多关系表),当然也可以不提取出来,但是那样设计会产生很多冗余空间,占用我们硬盘。

  但是我们要查询这些表时,将映射表提取出来的设计在这个时候就明显不如不提取出来的设计,因为多表查询总是比单表查询更耗费时间,所以为了节约查询时的成本我们有时候会把多表合并设计,其实就是提前求出了多表的笛卡儿积。

  把表分开节约空间,把表合并节约时间,所以具体表该怎么设计还是要看需求。

 

以上是关于三种主要的关系型表设计的主要内容,如果未能解决你的问题,请参考以下文章

关系类控件-明细表

建表原则

创建多对多表关系的三种方式

mysql数据库--外键的三种关系

HashMap原理:哈希函数的设计

数据表对应关系(一对一对多多对多)