Database Design Best Practice (2)
标题里虽然是将Database Design的best practice, 但下面内容并不仅限于design阶段的良好习惯。
1. Should binary files (such as word, pdf, image, video) be
stored in database?
(1) performance. 根据[2], blob column并不是储存在datarow中,datarow中只是包含了一个指向真正数据的指针,因此,性能并不会收到影响。
(2) full text search. 如果把word, pdf等文件存放在文件系统中,有许多工具支持对这些文档进行全文搜索,但是如果放在数据库中,这种支持可能就没这么多了(利用PDF IFilter可以对数据库里的pdf进行FTS)。
(3) 从原则上讲,数据库里面存放的应该是“数据”。而word,pdf则混杂了数据和格式。
(4) 如果把binary files存放在文件系统上,而在数据库中维护这些文件的路径,那么程序中就要维护数据库中文件路径和文件系统上文件的一致性。
2. insert语句中应该要写清楚要插入的column的名字,否则当这张表的column发生变化时,这个语句就会不成立。
3. 数据库设计的目标
(1) 最少的数据冗余。normalization这个过程就是用来实现这个目标的,但要注意过度normalization的问题(在这种情况下,有时候执行一个比较简单的查询就要join好几张表,sql语句比较复杂,这样就得不偿失了)因此有时候为了使数据库关系简单,应该允许redundancy的存在。这里必须达成一个compromise。
(2) 占用较小的空间。
(3) 预防错误发生的措施(foreign key, unique key等)。
[1]Best Practices in Database Design