BCNF表设计了多个值

时间:2011-10-20 18:09:27

标签: mysql database

我正在为数据库中的产品设计关系数据库。这是一个大纲

产品(名称,ID,类别,价格,位置......)

我坚持认为每个产品可以有多个类别。我如何处理这是一个BCNF设计?我正在考虑制作一个单独的表来映射Id - >类别,但这里没有功能依赖,因为每个Id可以有多个类别......

有人可以向我解释一下类别中的功能依赖性以及如何在BCNF设计中解决它吗?

2 个答案:

答案 0 :(得分:1)

来自:http://www.google.com/url?sa=t&rct=j&q=multivalued%20attributes%20in%20relational%20tables&source=web&cd=2&ved=0CCYQFjAB&url=http%3A%2F%2Fwww.cs.sjsu.edu%2Ffaculty%2Flee%2Fcs157%2F26Presentation_Jung_T_Chang.ppt&ei=f2SgTsr3NqnA0AGo2dCeBQ&usg=AFQjCNH_RoewSGJRuT4KOMtudGnX0uMimw&cad=rja(如何将ER模型转换为关系模型By:Jung T. Chang):

For each multivalue attribute in an entity set/relationship set:
- Build a new relation schema with two columns
- One column for the primary keys of the entity set/relationship set that has the multivalue attribute
- Another column for the multivalue attributes.  Each cell of this column holds only one value.  So each value is represented as an unique tuple 
- Primary key for this schema is the union of all attributes

他的powerpoint的一个例子: (我尝试从他的强力点上传一个屏幕截图,但是imgurl现在不适合我....请查看上面链接中的幻灯片#19以查看示例)

在您的情况下,它取决于ProductCategory之间的关系。

如果它是多对一关系(意味着每个产品的类别都是唯一的,但每个产品都有多个):创建一个Categories表,外键指向Product表。

如果它是多对多关系(意味着一个Product可以包含多个Categories且任何一个Category都可以属于多个Products,则为“关联实体” “(http://en.wikipedia.org/wiki/Associative_Entities)是必需的。这基本上是一个简单的”map“表,其中包含Product表的外键,以及Categories表的外键和组合这两个中创建了一个复合主键(http://en.wikipedia.org/wiki/Compound_key)。

修改

您在评论中提到CategoryProduct的多值属性,这意味着对于单个产品,产品属于多个类别。使用任何多值属性,您将需要另一个表来表示数据。剩下的唯一问题是询问它是ProductCategory之间的One-to-many关系,还是many-to-many关系。 您已经确认它是多对多的,这意味着单个产品可以包含多个类别,而单个类别可以包含多个产品,因此可以回答此问题。

为了开发解决方案,您需要三个表:

Product(Name, Id, Price, Location...)

ProductCategory(ProductID, CategoryID)

Category(Name, Id...)

主键中两个表中的Id字段。这仍然是BCNF,因为ProductCategory表中的所有属性都依赖于Id关键字段和A 3NF table which does not have multiple overlapping candidate keys is guaranteed to be in BCNF.ProductCategory表中的主键是ProductIDCategoryID的组合键。您不需要Products表中提及类别的函数依赖项,以便您实现BCNF;实际上,你可能不应该这样做,因为在这种情况下这两个实体在逻辑上是不同的。

答案 1 :(得分:0)

您在产品和类别之间存在多对多关系。您想引入一个中间联结表来将其解析为两个1-many关系。

(我有附图显示,但目前图片上传已被破坏。)

相关问题