mysql数据库表设计

一: 三范式

 第一范式(1NF):字段值具有原子性,不能再分(所有关系型数据库系统都满足第一范式);
            例如:姓名字段,其中姓和名是一个整体,如果区分姓和名那么必须设立两个独立字段;
         
 第二范式(2NF):一个表必须有主键,即每行数据都能被唯一的区分;
            备注:必须先满足第一范式;
         
 第三范式(3NF):一个表中不能包涵其他相关表中非关键字段的信息,即数据表不能有沉余字段;
            备注:必须先满足第二范式;
         
 备注:往往我们在设计表中不能遵守第三范式,因为合理的沉余字段将会给我们减少join的查询;
              例如:相册表中会添加图片的点击数字段,在相册图片表中也会添加图片的点击数字段;

通俗地理解三个范式 
  通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解 
  三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解): 
  第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 
  第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性; 
  第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。 

二:三少原则

(1) 一个数据库中表的个数越少越好。只有表的个数少了,才能说明系统的E--R图少而精,去掉了重复的多余的 
   实体,形成了对客观世界的高度抽象,进行了系统的数据集成,防止了打补丁式的设计; 

(2) 一个表中组合主键的字段个数越少越好。因为主键的作用,一是建主键索引,二是做为子表的外键,所以组 
  合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间; 

(3) 一个表中的字段个数越少越好。只有字段的个数少了,才能说明在系统中不存在数据重复,且很少有数据冗 
  余,更重要的是督促读者学会“列变行”,这样就防止了将子表中的字段拉入到主表中去,在主表中留下许 
  多空余的字段。所谓“列变行”,就是将主表中的一部分内容拉出去,另外单独建一个子表。这个方法很简 
  单,有的人就是不习惯、不采纳、不执行。

三: 视图

视图技术在数据库设计中很有用 
 与基本表、代码表、中间表不同,视图是一种虚表,它依赖数据源的实表而存在。视图是供程序员使用数据库的 
 一个窗口,是基表数据综合的一种形式, 是数据处理的一种方法,是用户数据保密的一种手段。为了进行复杂处理、 
 提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层。 若三层视图仍不够用, 则应在视图上定义临时表, 
 在临时表上再定义视图。这样反复交迭定义, 视图的深度就不受限制了。 

你可能感兴趣的:(mysql)