首页 > 解决方案 > 转换为只有一个关系而没有数据的 BCNF

问题描述

我必须将以下关系转换为 BCNF。但该练习并未表明主要决定因素是什么。没有下划线。我知道不同的步骤,但我在编写函数依赖项时遇到了一些困难,因为我只有关系而没有数据......请你帮我或指导我如何开始

将以下关系转换为 BCNF。做出并陈述关于功能依赖的适当假设,并展示转换中的步骤

发票(编号、客户名称、客户编号、客户地址、项目编号、项目价格、项目数量、销售人员编号、销售人员姓名、小计、税收、TotalDue)

我的问题是如果我们只有上面的关系,如何编写函数依赖

我试过了,但我不确定,我只是通过猜测来做到这一点

编号 ---> (客户名称、客户编号、客户地址)

客户编号--->(客户名称,客户地址)

ItemNumber---> (Number,ItemPrice)

(Number,ItemNumber)--->(ItemQuantity,SalespersonNumber,SalespersonName,Subtotal,Tax,TotalDue)

谢谢

标签: dataframedatabase-designrdbmsdatabase-normalizationfunctional-dependencies

解决方案


通常,如果对不同属性的含义有所了解,则可以解决此类练习,因为函数依赖关系涉及数据的含义。

我们可以猜测,在您的情况下,所有带有“客户”、“项目”和“销售人员”前缀的属性代表不同对应实体的属性,而其他属性与发票相关,涉及销售(单一?)产品到(单一?)客户,从(单一?)销售人员。当然,这只是一个猜测,可能是非常错误的。

在这些假设下,以及带有后缀 Number 的属性唯一标识某个实体的假设下,我们可以定义以下函数依赖关系作为关系 FD 的覆盖:

CustomerNumber -> CustomerName, CustomerAddress
ItemNumber -> ItemPrice, ItemQuantity
SalespersonNumber -> SalespersonName
Number -> CustomerNumber, ItemNumber, SalespersonNumber, Subtotal, Tax, TotalDue

如果这是正确的,那么关系的 BCNF 分解可能如下:

Customers (CustomerNumber, CustomerName, CustomerAddress)
Items (ItemNumber, ItemPrice, ItemQuantity)
Salespersons (SalespersonNumber, SalespersonName)
InvoiceData (Number, CustomerNumber, ItemNumber, SalespersonNumber, Subtotal, Tax, TotalDue)

但是,当然,我再说一遍,这只是基于(假定的)命名约定的猜测。

例如,打破上述假设的约定,另一种可能性是 ItemQuantity 不是 Item 的属性,而是 Invoice 的属性。

因此,在这种情况下,FD 的封面应如下所示:

CustomerNumber -> CustomerName, CustomerAddress
ItemNumber -> ItemPrice
SalespersonNumber -> SalespersonName
Number -> CustomerNumber, ItemNumber, ItemQuantity, SalespersonNumber, Subtotal, Tax, TotalDue

如果这是正确的,那么关系的 BCNF 分解可能如下:

Customers (CustomerNumber, CustomerName, CustomerAddress)
Items (ItemNumber, ItemPrice)
Salespersons (SalespersonNumber, SalespersonName)
InvoiceData (Number, CustomerNumber, ItemNumber, ItemQuantity, SalespersonNumber, Subtotal, Tax, TotalDue)

哪个是正确答案?好吧,除非确定数据的含义,否则没有人能说出来。


推荐阅读