数据库设计技巧[转载]
|
数据库设计技巧(一) 简单说来,正规化就是在表格设计时,消除冗余性和不协调的从属关系。在本文中,我将通过五个渐进的过程来告诉 这里假定我们要建立一个用户信息的表格,其中要存储用户的名字、公司、公司地址和一些个人的收藏夹或url。在开 零状态形式 users name company company_address url1 url2 Joe ABC 1 Work Lane abc.com xyz.com Jill XYZ 1 Job Street abc.com xyz.com 由于没有进行任何的正规化处理,我们将这种形式的表称为零状态形式的表。留意其中的url1和url2字段---如果我们 第一级正规化形式 1.消除每个表格中重复的组 2.为每套相关的数据建立一个独立的表格 3.使用一个主键来标识每套相关的数据 以上的表格明显违反了上面第一条的规定,那么第三条的主键又是什么意思呢?很简单,它只是在每个记录中加入一 users userId name company company_address url 1 Joe ABC 1 Work Lane abc.com 1 Joe ABC 1 Work Lane xyz.com 2 Jill XYZ 1 Job Street abc.com 2 Jill XYZ 1 Job Street xyz.com 现在我们的表格可以说已经处在第一级正规化的形式了,它已经解决了url字段的限制问题,不过这样的处理后又带来 2.通过一个foreign key来关联这些表格的值
users userId name company company_address 1 Joe ABC 1 Work Lane 2 Jill XYZ 1 Job Street urls urlId relUserId url 1 1 abc.com 2 1 xyz.com 3 2 abc.com 4 2 xyz.com 如上所示,我们创建了独立的表格,users表中的主键userid现在与url表中的foreign key relUserId关联。现在的情 第三级正规化形式 1.消除不依赖于该键的字段 公司名及地址与User Id都是没有关系的,因此它们应用拥有自己的公司Id: users userId name relCompId 1 Joe 1 2 Jill 2 companies compId company company_address 1 ABC 1 Work Lane 2 XYZ 1 Job Street urls urlId relUserId url 1 1 abc.com 2 1 xyz.com 3 2 abc.com 4 2 xyz.com 这样我们就将companies表中的主键comId和users表中名字为relCompId的foreign key关联起来,就算为ABC公司加入 我们可以留意一下URL的字段--你注意到数据的冗余了吗?如果给用户用户输入这些url数据的HTML页面是一个文本 然后看看第二个正规化的例子。对于每个用户记录,我们的表格允许有多个urls的记录与之关联。这是一个一对多的 对于多对多的关系来说,就有点复杂了。在我们的第三个正规化形式的例子中,我们的一个用户与很多的url有关,而 users userId name relCompId 1 Joe 1 2 Jill 2 companies compId company company_address 1 ABC 1 Work Lane 2 XYZ 1 Job Street urls urlId url 1 abc.com 2 xyz.com url_relations relationId relatedUrlId relatedUserId 1 1 1 2 1 2 3 2 1 4 2 2 为了进一步减低数据的冗余,我们运用第四级正规化形式。我们创建了一个颇奇怪的url_relations表,里面的字段均 第四个正规化形式 1.在一个多对多的关系中,独立的实体不能存放在同一个表格中 由于它仅应用于多对多的关系,因此大多数的开发者可以忽略这条规定。不过在某些情况下,它是非常实用的,这个 为了令你更容易明白,我们举个具体的例子,以下将用一个SQL语句选择出所有属于joe的urls: SELECT name, url FROM users, urls, url_relationsswheresurl_relations.relatedUserId = 1 AND 如果我们想要遍历每个人的个人信息和url信息,我们可以这样做: SELECT name, url FROM users, urls, url_relationsswheresusers.userId = url_relations.relatedUserId AND 第五级正规化形式 还有一级正规化的形式,它并不常见,有点深奥,并且在大部分的情况下都是不必要的。它的原则是: 1.原来的表格必须可以通过由它分离出去的表格重新构建 使用这个规定的好处是,你可以确保不会在分离的表格中引入多余的列,所有你创建的表格结构都与它们的实际需要 希望这篇文章对你有用,并且可以帮助你在所有的项目中应用这些正规化的规定。你可能想知道这些方法是从哪来 |
