将数据库转为范式的过程中,需要把一系列数据表关联起来,这种关联用数据库术语来说就是“关系”。一般来说,两个数据表之间的关系大致有三种:
1、1:1关系。两个表之间是1:1,代表了第一个数据表里的每一条记录分别对应着第二个数据表里的一条记录,同时第二个表的记录也分别对应着第一个表中的一条记录,实际工作中,很少见到这种关系,因为既然是1:1,那么证明他们是可以合并为一张表的(但在WEB处理的时候就不是这样,比如用户基本信息,用户扩展信息,他们肯定是1:1的,但如果扩展信息中有TEXT字段,而用户信息又经常被读取,那么我们就会把经常读取的字段分为一张表,不是经常读取的或者是含有TEXT内容的字段分拆为另外一张表,以加快读取速度。)
2、1:N关系。两个表之间是1:N,代表第一个数据表里的一条数据可以对应着第二个数据表里的多条记录。(大多数举例都是用工厂和产品来进行举例,从WEB方面来说,我们可以从用户表来分析,一个用户可以有多条地址簿,家庭、工作单位等,看淘宝在下单时选择地址就知道了)
3、N:M关系。两个表之间是N:M时,代表第一个数据表的一条记录可以对应着第二个数据表里的多条数据记录。同时第二个表中某条记录也可以对应着第一个数据表的多条记录。这里一般是用订单来做介绍:一个订单可以购买多个产品,一个产品也可能存在于多个订单中。
1:1关系
这种类型的表起源通常因为人们把某个数据表拆分成两个使用同一个主键的数据表。把1:1表分拆大致有两种原因,一种是信息安全方面考虑,还有一种就是上文说的效率方面的考虑。
1:N关系
1:N关系是最常见的两表之间的关系了。只要在第一个表的数据记录里有一个特定字段引用了第二个表中的数据列,就会形成1:N关系。
一般来说,1:N有点象1:1表,大多数情况下都是采用主键关联,只有这样才会保证1:N,而不是N:M,例如:分类表与文章表、用户表与地址簿表,论坛主题与跟贴,用户表与订单表,员工表与员工履历表等,这些都属于1:1表。
N:M关系
其实1:N在设计的不太好时,很容易就会变成N:M表。N:N表大致用于订单与产品、用户表与回贴表、员工表与考勤表等等