数据库规范化

时间:2011-07-22 16:27:47

标签: database normalization

如何将表从关系模式规范化到BCNF。有人可以详细解释下面的关系模式到BCNF的规范化。

info(id, companyName, contactName, contactTitle, address, city, postalCode, country, phone, fax, email, website)

2 个答案:

答案 0 :(得分:3)

只有在定义了功能依赖项后,才能进行规范化。给我一组功能依赖(例如,id唯一地确定companyName,postalCode唯一地确定Country等),我们可以谈论规范化。

让我再说一次:如果没有给予我们功能依赖,没有理性的人可以尝试回答你的问题。如果您希望帮助为此架构提供一组有意义的功能依赖关系,我们可以粗略地假设您的数据应遵循哪些规则,但最终由您来告诉我们您的业务规则是什么。

话虽如此:一旦你拥有了功能依赖,在BCNF中获得关系是相当简单的。如果每个功能依赖的左侧都是超级密钥,那么您的关系在BCNF中。如果您有一个违反此功能的函数依赖项,只需将其作为新关系旋转即可。然后你将你的非BCNF关系转换成一组关系,这些关系要么在BCNF中,要么在BCNF中;如果是的话,停止;否则,继续。请注意,此过程最终会终止,因为与两列的关系在BCNF中非常简单。

答案 1 :(得分:-3)

Boyce Codd普通形式只是意味着您处于第3范式,并且外键在表之间链接,而其他列无法导致不一致。我喜欢下面链接中的示例,其中显示了一个描述“Shop Near Person”的表格。它有一个人的主键,一个商店的主键,然后是另一个显示商店类型的字段。这违反了BCNF,因为“商店类型”字段可能与商店的主键不一致。

BCNF在这里得到了很好的解释:http://en.wikipedia.org/wiki/Boyce%E2%80%93Codd_normal_form

我正在做一些假设,但这是我如何分割字段。有些人喜欢进一步分析地址,但我觉得这超出了第3种形式。我注意到你有一个国家/地区字段,因此我也将电话字段拆分为国际拨号,因为号码会根据您拨打的国家/地区而改变。

公司

company_id,companyName,address,city,state,postalCode,country_id,phoneCountryCode,phoneAreaCode,phoneVoiceNumber,phoneExtension,phoneFaxNumber

联系人

contact_id,company_id,contactName,contactTitle,contactEmail

国家

country_id,countryName