本帖最后由 roych 于 2015-7-18 12:12 编辑
并非崇洋媚外,但对比国外,国内不少Access书籍关于范式的讲解真的是泛泛而谈,一页甚至几百字就讲完了。以至于很多新手,包括我在内,开始时都没想过,觉得似乎这查询不好做,代码总可以吧?论坛不是有很多高手么?上论坛问下呗。
所以每每看到设计比较糟糕的表,总会有股莫明火却无法发作,不能怪版友,毕竟人家是新手,但是这又偏偏层出无穷,只能默默怪某些人急功近利,误人子弟了。于是,便有一种想法,试图把这些整理下,供新手们参考。
我们还是回到主题上来。
什么是范式?范式就是数据表规范化的指导思想,其等级按1~5编号,称为第一范式至第五范式(1NF~5NF)。不过一般数据库设计符合第三范式就够了。
第一范式(列不可分):删除重复组
当规范化到第一范式时,从表中删除重复字段(又称重复组),由于仍需获取和报告数据,因此终止为相关数据的每个表创建单独的表。其操作如下:
1. 删除单个表中重复的组
2. 为每个集合中相关数据创建单独的表
3. 使用主键识别每个集合中的相关数据
避免在单个表使用多个字段(重复值)存储相同的数据。最常见表设计是这样的:宝贝A | 7月9日 | 7月10日 | 7月11日 | 7月12日 | 销量 | 3200 | 2890 | 3107 | 3520 | 转化率 | 5.30% | 4.50% | 4.90% | 6.20% |
不少从Excel转向Access学习的用户,开始时可能会这样设计表,因为看起来直观。但问题在于数据库部署之后,修改表(例如增加一天的数据)会影响前台跟后台,且需要耗费程序员大量精力和时间(总要写代码,动态去修改字段吧?)。
替代方法是为销量和转化率创建单独的数据表,存储每天的数据,再以某个字段建立连接。如下所示:宝贝名称 | 日期 | 销量 | 转化率 | 宝贝A | 7月9日 | 3200 | 5.30% | 宝贝A | 7月10日 | 2890 | 4.50% | 宝贝A | 7月11日 | 3107 | 4.90% | 宝贝A | 7月12日 | 3520 | 6.32% |
|