弄清楚应用程序是什么性质的
- 事务处理型(OLTP):应用程序的最终用户更关注数据的增删改查。
- 分析型(OLAP):应用程序的最终用户更关注数据的分析、报表、趋势预测等功能。这一类数据库的插入、更新操作比较少。他们的主要目的是更快速地查询、分析数据。
- 结论:如果你认为插入、更新、删除数据这些操作在你的程序中更为突出的话,那就设计一个规范化的表否则的话就去创建一个扁平的、不规范化的数据库结构。
把数据按照逻辑意义分成不同的块
这个规则其实就是 “三范式” 中的第一范式。违反这条规则的一个标志就是,你的查询使用了很多字符串解析函数,例如:substring、charindex。
图1如果要搜索Raju,除了遍历,还要把每个遍历的结果都拆分开了进行对比。因此,图2的设计会更好。
(拆分需要符合逻辑,不可过度使用)
对重复、不统一的数据进行重构
例如图1的数据,容易造成数据的混乱,因此换成图2的方法会更好管理数据。
字段不可再分
图1的课程不好管理,最好使用图2的方法。
所有字段必须完整地依赖主键而不是部分依赖
Syllabus:课程
Standard:课程级别
课程与课程级别有关,如果更改学生课程的话按照第一种方法需要把每个学生的课程都更改一遍。
仔细选择派生列
如下图所示,平均值可从表中数据获得。如果要开发事务处理型(OLTP)的应用程序(注重增删改查),就要尽量避免使用派生字段如平均值,除非迫切的性能要求,需要经常求和、计算等情况。
多维数据
OLAP项目主要是解决多维数据问题,下图的销售额是包含了三个维度的交叉。
正常而言,应该先创建一个简单的主要销售表,再通过外键把其他不同维度的表连接起来,如下图所示。