数据库正规化和设计技巧(2)
二阶规范化形式
1.为应用于多个记录的字段建立独立的表。
2.使用外键来关联这些表的值。
我们将url的值放在一个单独的表中,这样我们可以在将来添加更多的数据,而不用担心重复的值。我们还通过主键值关联这些字段:
用户
用户名公司公司地址
1乔ABC 1工作车道
吉尔·XYZ街1号
资源定位符
urlId relUserId url
11 abc.com
21 xyz.com
3 2 abc.com
4 2 xyz.com
如上所示,我们已经创建了一个独立的表,users表中的主键userid现在与url表中的外键relUserId相关联。目前的情况似乎已经有了明显改善。但是,如果我们想为ABC公司添加一条员工记录,该怎么办呢?或者更多,200?这样我们就要重用公司名称和地址
,显然不够冗余。因此,我们将应用第三级标准化方法:
三阶规范化形式
1.消除不依赖于该键的字段。
公司名称和地址与用户Id无关,所以它们应该有自己的公司Id:
用户
用户Id名称relCompId
1乔1
吉尔2
公司
compId company公司_地址
1 ABC 1工作车道
XYZ 2号,就业街1号
资源定位符
urlId relUserId url
11 abc.com
21 xyz.com
3 2 abc.com
2 xyz.com这样,我们将把companies表中的主键comId与users表中名为relCompId的外键关联起来。即使我们加入ABC公司的200名员工,公司中也只有一个记录。我们的用户和URL表可以不断扩展,而不用担心插入不必要的数据。大多数
开发者认为三步形式化就足够了,这个数据库的设计可以轻松处理整个企业的负担。这种观点在大多数情况下是正确的。
我们可以关注一下url字段——有没有注意到数据的冗余?如果用户输入这些url数据的HTML页面是一个文本框,可以任意输入,这不是问题。两个用户输入同一个收藏夹的可能性较小。但如果是通过下拉菜单,用户只能选择两个网址输入,或者多一点。在这种情况下,我们的数据库可以进行下一级优化——第四步,这一步被大多数开发人员所忽略,因为它依赖于一种非常特殊的关系——多对多关系,这种关系在我们的应用中从未遇到过。
位律师回复
0条评论