第七章   多张表的设计

         很多时候,单单的一张表已经不能满足业务的需要,这个时候,我们需要在数据库中设计多张表,并通过主键外键的关系,将他们连接起来。

         表应该是为了节省精力而设计,别为了克服设计不良的表而执意改善查询。

一.外键

          外键是表中的某一列,它引用到另一个表的主键

          外键可能与他引用的主键名称不同。

         外键使用的主键也被称为父键,主键所在的表也被称为父表。

         外键能用于确认一张表中的行与另外一张表中的行对应。

         外键的值可以使NULL,及时主键值不可为NULL

         外键的值不需要唯一,事实上,外键都没有唯一性。

         外键为NULL,表示在父表中没有相符的主键。

         可以使用外键来引用父表中某一个唯一的值。

          外键不一定必须是父表中的主键,但必须有唯一性。

二.表关系

          1.一对一

              定义:A表中的某条记录在B表中最多只能有一条相对应的记录。

              使用一对一表的时机:

a.       抽出数据或许能让你写出更快的查询。

b.      如果有列包含还不知道的值,可以单独存储这一列,以避免主要表中NULL的出现。

c.       我们把不需要经常被访问到的数据单独存储。

d.      比较大块的数据,例如BLOB类型,这类数据或许存储为另一张表会更好。

      2.一对多

             定义:A表中的某一条记录可以对应到B表中的多条记录,但是B表中的某一条记录,只能对应到A表中的某一条记录。

     3.多对多

         定义:A表中的某一条记录可以对应到B表中的多条记录,B表中的某一条记录也可以对应到A表中的多条记录。

        通常,我们需要使用连接表(junction table),用它来存储两个相关的主键,使得两张多对多的表,分开成两个多对一和一对多的模式。

三.规范化设计

        当某列的数据必须随着另一列数据的改变而改变时,表示第一列函数依赖于第二例。

        非主键的列依赖于组合主键的某个部分,称为部分函数依赖。

        如果改变任何非键列可能造成其他列的改变,即为传递依赖。

1.       第二范式:2NF

规则:a.先符合1NF

              b.没有部分函数依赖

   2.第三范式:3NF

           规则:a.符合2NF

                        b.没有传递函数依赖

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第七章    多张表的设计
         很多时候,单单的一张表已经不能满足业务的需要,这个时候,我们需要在数据库中设计多张表,并通过主键外键的关系,将他们连接起来。
         表应该是为了节省精力而设计,别为了克服设计不良的表而执意改善查询。
一.外键
          外键是表中的某一列,它引用到另一个表的主键
          外键可能与他引用的主键名称不同。
         外键使用的主键也被称为父键,主键所在的表也被称为父表。
         外键能用于确认一张表中的行与另外一张表中的行对应。
         外键的值可以使NULL,及时主键值不可为NULL。
         外键的值不需要唯一,事实上,外键都没有唯一性。
         外键为NULL,表示在父表中没有相符的主键。
         可以使用外键来引用父表中某一个唯一的值。
          外键不一定必须是父表中的主键,但必须有唯一性。
二.表关系
          1.一对一
              定义:A表中的某条记录在B表中最多只能有一条相对应的记录。
              使用一对一表的时机:
a.       抽出数据或许能让你写出更快的查询。
b.      如果有列包含还不知道的值,可以单独存储这一列,以避免主要表中NULL的出现。
c.       我们把不需要经常被访问到的数据单独存储。
d.      比较大块的数据,例如BLOB类型,这类数据或许存储为另一张表会更好。
      2.一对多
             定义:A表中的某一条记录可以对应到B表中的多条记录,但是B表中的某一条记录,只能对应到A表中的某一条记录。
     3.多对多
         定义:A表中的某一条记录可以对应到B表中的多条记录,B表中的某一条记录也可以对应到A表中的多条记录。
        通常,我们需要使用连接表(junction table),用它来存储两个相关的主键,使得两张多对多的表,分开成两个多对一和一对多的模式。
三.规范化设计
        当某列的数据必须随着另一列数据的改变而改变时,表示第一列函数依赖于第二例。
        非主键的列依赖于组合主键的某个部分,称为部分函数依赖。
        如果改变任何非键列可能造成其他列的改变,即为传递依赖。
1.       第二范式:2NF
规则:a.先符合1NF
              b.没有部分函数依赖
   2.第三范式:3NF
           规则:a.符合2NF
                        b.没有传递函数依赖