Database design 具有循环函数依赖的Boyce-Codd范式

Database design 具有循环函数依赖的Boyce-Codd范式,database-design,relational-database,functional-dependencies,bcnf,Database Design,Relational Database,Functional Dependencies,Bcnf,例如,在关系数据库设计中,有模式S(银行家、bname、客户)和函数依赖关系(FD) 银行家->银行名称 客户,bname->banker 架构S是否在BCNF中?或者应该是: (银行家,bname)和(客户,银行家)我认为应该是(银行家,bname)和(客户,银行家)。在我看来更像是外键关系。我不认为“S”在BCNF中。以下是Chris Date对BCNF的非正式定义 当且仅当唯一的行列式为候选时,BCNF中的relvar为 钥匙。(数据库系统简介,第7版,第367页) 术语行列式是指函数依赖

例如,在关系数据库设计中,有模式S(银行家、bname、客户)和函数依赖关系(FD)

银行家->银行名称 客户,bname->banker

架构S是否在BCNF中?或者应该是:
(银行家,bname)和(客户,银行家)

我认为应该是(银行家,bname)和(客户,银行家)。在我看来更像是外键关系。

我不认为“S”在BCNF中。以下是Chris Date对BCNF的非正式定义

当且仅当唯一的行列式为候选时,BCNF中的relvar为 钥匙。(数据库系统简介,第7版,第367页)

术语行列式是指函数依赖项的左侧。如果存在左侧不是候选键的函数依赖项,则该关系不在BCNF中

让我们用传统符号重写您的示例

R{ABC}
A->B
BC->A
有两个候选键:AC和BC。A->B的左侧不是候选关键点。所以R不在BCNF中

或者应该是:(银行家,bname)和(客户,银行家)


不。您的函数依赖关系非常清楚地表明,客户并不决定银行家。

我也这么认为,因此BCNF可以将一个FD分解为多个表,但不能将一个表中的FD分解为多个表,对吗?是的,由于关系模式的拆分,FD确实会变得无法表达。这种现象被称为“依赖性保留”。在逻辑数据库设计中,FD需要由逻辑数据库约束恢复(“替换”)。FD,banker->bname(customer,bname)->banker?