首页 > 数据库 > 数据库开发技术 > 关系型数据库:应用第一范式(转)
示例数据库的超关键字 Books表格事实上有更多的超关键字,例如Title、ISBN和Publisher,但是要包含所有这些关键字就又太多了。 找到备选关键字 现在是缩短超关键字列表来找到备选关键字的时候了,这些备选关键字包含有一个字段里满足唯一性所需的最少列。Categories表格在这一点上不存在问题,因为它只有一个字段。Authors表格只有一个超关键字,所以很明显它就是备选关键字。 但是,Books表格有点麻烦,但是在最终的分析里,ISBN字段是备选关键字的最好选择。ISBN字段应该是唯一的,但是由于这些数字是由出版商来指定的,所以还是可能出现使用同一ISBN的两本书。实际情况是,只使用ISBN可能永远也不会碰到问题,但是一旦出现这样的小错误,你的整个数据库可能都会崩溃。因此,我决定把Title和ISBN这两个复合超关键字作为Books表格的备选关键字。 确定主关键字 主关键字只不过是你最后用来唯一辨别表格里每条记录的备选关键字。在做完这些事之后,为每个表格分配主关键字就很容易了。现在我为每个示例数据库定义了下列表格(星号表示主关键字字段): Books: {*Title, *ISBN, Price, Publisher} Authors: {*FirstName, *LastName} Categories: {*Category, Description} 要注意,Categories包含有一个新的字段――Description。单字段的表格是可以接受的,但是加入了描述文本的字段将有助于更加完全地解释每个分类。 -------------------------------------------------------------------------------- 将计数字段(counter field)作为主关键字 大多数关系型数据库管理系统(RDBMS)都会提供一类计数或者自动编号的数据类型,它会为每条记录分配一个连续的数值。尽管这些计数字段会保证你得到一个备选关键字,但是这个关键字对于搜索是毫无疑义的。如果你把计数字段作为主关键字,你至少还需要另一个字段,这样才能以有意义的方式找到记录。 -------------------------------------------------------------------------------- 那么Authors又会是什么样的呢?在Authors表格里出现重复的姓和名的机会好像不多,尤其当你的数据库很小的时候。但是不管怎么说这不是不可能的。你可以为这个表格分配一个计数字段,这肯定会解决唯一性的问题,但是这不会有助于你区别不同的作者。 在这里,解决我们问题最简单的方法是加入某种联系信息,例如电子邮件地址或者作者所居住的州或者地区等信息,但是这还是不够明确。你有可能碰到住在同一个州同名同姓的两个作者。这样的情况不多但不是没有可能,所以最好还是为出错做好准备。你可以考虑加入每个作者的邮件地址,但是为了保持例子的简单,我只加入了州名和邮政编码,并扩展主关键字,让其能够同时包含两个新的字段: Authors: {*FirstName, *LastName, *State, *ZIP} 在这一点上,这真的是保证Authors表格唯一性的唯一方法。 删除重复值 1NF需要我们满足的最后一条要求是在数据里不能有重复的组(group)。在没有检查真实数据之前,要确定你是否满足了这一要求是相当困难的,但是既然我们已经碰到了,不管怎么样就应该着手解决。之后,如果看到一个值重复了多次,我就会考虑把这个字段移动到一个新的表格里。如果我数据库里的表格通过别的途径被正确地规范化了,那么重新建模将不会是个大问题。事实上,许多数据库应用程序似乎总在不停地扩展 这最后一条规则最明显的违反者是Books表格里的Publisher(出版商)字段。尽管有很多出版商,但是我毫无疑问会发现自己一次又一次地碰到同一个出版商。为了让Books满足1NF,我必须要把这个字段移动到另一个表格里。现在示例数据库看起来像下面这样: Books: {*Title, *ISBN, Price} Authors: {*FirstName, *LastName, *State, *ZIP} Categories: {*Category, Description} Publishers: {*Publisher} 你可能不会碰到重复的出版商名,但是为了安全起见,你可以决定将自动编号字段作为主关键字。如果这样做的话,你的表格设计应该会像下面这样: Publishers: {*PublisherID, Name} 最后,示例数据库里的表格看上去都符合1NF的要求了。每个字段都尽可能的小,没有重复的组和多值字段,每个表格都有一个关键字。你可能会问还差什么?毕竟,开始的时候只有一个表格,
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8225414/viewspace-957199/ ,如需转载,请注明出处,否则将追究法律责任。