问题描述
我必须将以下关系转换为 BCNF。但该练习并未说明主要决定因素是什么。没有下划线。我知道不同的步骤,但是我在编写函数依赖项时遇到了一些困难,因为我只有关系而没有数据...... 你能帮我或指导我如何开始
将以下关系转化为BCNF。做出并陈述关于函数依赖的适当假设,并展示转换的步骤
发票(编号、客户名称、客户编号、客户地址、项目编号、项目价格、项目数量、销售人员编号、销售人员姓名、小计、税、总到期)
我的问题是如果我们只有上面的关系,如何编写函数依赖
我试过了,但我不确定,我只是猜测
号码 ---> (CustomerName,CustomerNumber,CustomerAdress)
客户编号--->(客户名称,客户地址)
ItemNumber---> (Number,ItemPrice)
(Number,ItemNumber)--->(ItemQuantity,SalespersonNumber,SalespersonName,Subtotal,Tax,TotalDue)
谢谢
解决方法
如果您了解不同属性的含义,通常可以解决此类练习,因为函数依赖关系涉及数据的含义。
我们可以猜测,在你的情况下,所有带有前缀的属性,如“客户”、“项目”和“销售员”代表不同对应实体的属性,而其他属性与发票相关,涉及从(单个?)销售人员向(单个?)客户销售(单个?)产品。当然,这只是猜测,可能大错特错。
在这些假设下,以及后缀为 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,TotalDue)
当然,我再说一遍,这只是基于(假设的)命名约定的猜测。
比如打破上面假设的约定,另一种可能是ItemQuantity不是Item的一个属性,而是Invoice的一个属性。
因此,在这种情况下,FD 的封面应如下所示:
CustomerNumber -> CustomerName,CustomerAddress
ItemNumber -> ItemPrice
SalespersonNumber -> SalespersonName
Number -> CustomerNumber,ItemQuantity,ItemPrice)
Salespersons (SalespersonNumber,TotalDue)
正确答案是什么?好吧,没有人能说清楚,除非数据的含义是确定的。