1.三大范式
第一范式(确保每列保持原子性);
第二范式(确保表中的每列都和主键相关,避免低级冗余);
第三范式(第二范式的基础上,确保非主键之间不存在依赖关系,避免高级冗余和低级冗余)。
高级冗余:派生字段;低级冗余,别的表也有的字段。
2.OLTP(Transactional)还是 OPAP(Analytical)
OLTP关注数据的CRUD。
OLAP关注数据分析、报表、趋势预测。“插入” 和 “更新” 操作相对比较少。目的是更加快速地查询、分析数据。
3.不用绝对遵循“避免冗余”
如果对性能有迫切的需求,考虑一下打破常规。常规情况下你需要做多个表的连接操作,而在非常规的情况下这样的多表连接是会大大地降低性能的。
4.若两个实体之间存在多对多的关系,则应消除这种关系。消除的办法是,在两者之间增加第三个实体。这样,原来一个多对多的关系,现在变为两个一对多的关系。
eg:在“图书馆信息系统”中,“图书”和“读者”。一本书被多人借阅,一个借多本书。要在二者之间增加第三个实体,该实体取名为“借还书”,属性为:借还时间、借还标志(0表示借书,1表示还书),两个外键(“图书”的主键,“读者”的主键)。
5.主键与外键在多表中的重复出现,不属于数据冗余。非键字段的重复出现, 是一种低级冗余,即重复性的。高级冗余不是字段的重复出现,而是字段的派生出现。