码迷,mamicode.com
首页 > 其他好文 > 详细

三种主要的关系型表设计

时间:2018-02-09 20:27:48      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:pos   int   自己   多对一   一个   语句   ade   null   学生   

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

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映射来表达,这个映射表有时比较简单,就把它包含到其要映射的一个表中(如多对一关系表),而比较复杂时就单独提取出来(如多对多关系表),当然也可以不提取出来,但是那样设计会产生很多冗余空间,占用我们硬盘。

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

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

 

三种主要的关系型表设计

标签:pos   int   自己   多对一   一个   语句   ade   null   学生   

原文地址:https://www.cnblogs.com/haoblog/p/8436062.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!