关系型数据库表与表之间一般存在三种关系:

一对一

多对一(如:老师与学院)

多对多(如:老师与学生)

下面分别就三种关系讲解数据库相关设计的思路和思考过程:

# 一对一关系(少见)

建立一个父表和一个子表,最好将数据量多的作为子表,内有自己 id 号作为主键,并有父表的主键(id)做为外键。

# 多对一关系

各建立两张表,多端表指向另一张表(即多指向一),同时多端表中加上外键约束。

例 1:每个教师只担任一门课的教学,一门课由若干教师任教。“教师”有属性:职工号,教师姓名,职称,“课程”有属性:课程号、课程名。

解析:由题目可知,需要创建两张表:教师表和课程表,其关系为多对一,则教师表为子表,课程表为父表,教师表指向课程表(多指向一)。

E-R 图如下(使用 PowerDesigner15.1 绘制):

mysql多张表数据汇总到一张表进行数据对比 mysql数据库多张表建立联系_多对一

建表语句如下:

mysql多张表数据汇总到一张表进行数据对比 mysql数据库多张表建立联系_主键_02

# 多对多关系

方法一:选择一张表作为父表,另一张作为子表,在子表中添加外键。建表语句与例 1 中相似,就不做过多赘述。

方法二:在建立两张基本信息表的同时,建立一个中间表,这个中间表通过两个 id 映射作为一个多列索引来表达两个表的数据关系。

例 2:一个产品由多种零件组成,一种零件也可装配出多种产品。产品有产品号和价格,零件有零件号、重量和价格。

方法二:需要创建三张表:零件表、产品表和关系表。

E-R 图如下:

mysql多张表数据汇总到一张表进行数据对比 mysql数据库多张表建立联系_mysql设计表之间的联系_03

建表语句如下:

mysql多张表数据汇总到一张表进行数据对比 mysql数据库多张表建立联系_主键_04

# 总结

表中行的信息是通过 id(主键)来标识的,多表的关系总是通过建立一个各个表的 id 映射(外键)来表达,这个映射表有时比较简单,就把它包含到其要映射的一个表中(如多对一关系表);而比较复杂时就需要单独提取出来(如多对多关系表),当然也可以不提取出来,但是那样设计会产生很多冗余空间,占用我们硬盘。把表分开节约空间,把表合并节约时间,具体表该怎么设计最终还是要看需求。