dataframe - 转换为只有一个关系而没有数据的 BCNF
问题描述
我必须将以下关系转换为 BCNF。但该练习并未表明主要决定因素是什么。没有下划线。我知道不同的步骤,但我在编写函数依赖项时遇到了一些困难,因为我只有关系而没有数据......请你帮我或指导我如何开始
将以下关系转换为 BCNF。做出并陈述关于功能依赖的适当假设,并展示转换中的步骤
发票(编号、客户名称、客户编号、客户地址、项目编号、项目价格、项目数量、销售人员编号、销售人员姓名、小计、税收、TotalDue)
我的问题是如果我们只有上面的关系,如何编写函数依赖
我试过了,但我不确定,我只是通过猜测来做到这一点
编号 ---> (客户名称、客户编号、客户地址)
客户编号--->(客户名称,客户地址)
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, 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)
哪个是正确答案?好吧,除非确定数据的含义,否则没有人能说出来。
推荐阅读
- python - 为什么即使我尝试过,它也会出现错误?
- python - Pandas Dataframe 覆盖现有行
- shell - macos shell脚本不返回控制
- html - 如何将工具提示添加到 primeNG 表中的特定标题列
- html - 不能改变html的宽度
- linux - 当 NFS 客户端尝试在共享文件夹上创建文件时,出现不允许的操作,服务器和客户端都在容器中
- c# - Unity 起始代码告诉我方法必须有返回类型
- javascript - 三元内联语句不适用于第三个条件?
- erlang - Erlang异常错误:没有函数子句匹配
- java-8 - 是否有一个实用函数可以将在 Java8 中抛出异常的供应商转换为可选?