数据库设计原则(简明)

本文摘录自http://blog.csdn.net/haiross/article/details/50427382  原文有更详细讲解。

范式标准 


知乎 https://www.zhihu.com/question/24696366

基本表及其字段之间的关系,应尽量满足第三范式。但是,满足第三范式的数据库设计,往往不是最好的设计。 
  为了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余,达到以空间换时间的目的。 

  例:有一张存放商品的基本表,如表1所示。“金额”这个字段的存在,表明该表的设计不满足第三范式, 
  因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段, 
  可以提高查询统计的速度,这就是以空间换时间的作法。 
  在Rose 2002中,规定列有两种类型:数据列和计算列。“金额”这样的列被称为“计算列”,而“单价”和 
“数量”这样的列被称为“数据列”。 

通俗地理解三个范式 

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

  没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降 
  低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理 
  数据模型设计时考虑。降低范式就是增加字段,允许冗余。 

 

正确处理多对多的关系 

若两个实体之间存在多对多的关系,则应消除这种关系。消除的办法是,在两者之间增加第三个实体。这样,原来一 
  个多对多的关系,现在变为两个一对多的关系。

正确认识数据冗余 

主键与外键在多表中的重复出现,不属于数据冗余,这个概念必须清楚,事实上有许多人还不清楚。非键字段的重 
  复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。高级冗余不是字段的重复出现,而是字段的派生出现。 

 

防止数据库设计打补丁的方法是三少原则” 

 (1) 一个数据库中表的个数越少越好。

(2) 一个表中组合主键的字段个数越少越好。因为主键的作用,一是建主键索引,二是做为子表的外键,所以组合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间; 
(3) 一个表中的字段个数越少越好。督促读者学会“列变行”,这样就防止了将子表中的字段拉入到主表中去

提高数据库运行效率的办法 

 在给定的系统硬件和系统软件条件下,提高数据库系统的运行效率的办法是: 
 (1) 在数据库物理设计时,降低范式,增加冗余,少用触发器,多用存储过程。 
(2) 当计算非常复杂、而且记录条数非常巨大时(例如一千万条),复杂计算要先在数据库外面,最后才入库追加到表中去。
(3) 发现某个表的记录太多,例如超过一千万条,则要对该表进行水平分割。水平分割的做法是,以该表主键 
PK的某个值为界线,将该表的记录水平分割为两个表。若发现某个表的字段太多,例如超过八十个,则垂直分割该表,将原来的一个表分解为两个表。 
(4) 对数据库管理系统DBMS进行系统优化,即优化各种系统参数,如缓冲区个数。 
(5) 在使用面向数据的SQL语言进行程序设计时,尽量采取优化算法。 
    总之,要提高数据库的运行效率,必须从数据库系统级优化、数据库设计级优化、程序实现级优化,这三个层次上同时下功夫。 

猜你喜欢

转载自blog.csdn.net/csdn9988680/article/details/79060317