数据库的设计要遵从三范式的原则。
第一范式
1、每一列属性都是不可再分的属性值,确保每一列的原子性。
2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。
个人理解就是原子性。如果说每一列的属性都是一块砖的话,那么不能在一列里面放两块砖,尽量的把两个半截砖头拼成一块放在一列,拼不成的就不勉强了。
第二范式
1、每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。
个人理解就是专业性。一块砖头只做一件事,既要做承重又要做外墙装饰,那就必须要更多的砖头。
第三范式
3、 数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系。
举个简单的列子,一个表中有员工姓名、公司名称和公司地址。这就是一个典型的传递关系:员工姓名>公司名称>公司地址。这样的表不符合第三范式,需要改成两张表,第一张表(员工姓名+公司名称),第二张表(公司名称+公司地址)。
其他问题
三大范式只是一般设计数据库的基本理念,并不是数据库必须这么设计。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。根据要建的房子选择砖头,而不是根据砖头建房子。