��假设在关系模式:
Lending-schema = (branch-name, branch-city, assets, customer-name,
loan-number, amount)上有函数依赖集:
Branch-name→assets branch-cityLoan-number→amount
branch-name
那么如何根据函数依赖集进行模式分解呢?在进行模式分解之前,首先我们必须搞清楚:模式分解要达到的目标是什么?
1、模式分解的目标模式分解要达到的目标是:
��⑴�是一个无损连接分解;
��⑵�保持所有的函数依赖(应用Armstrong公里);
��⑶�分解后的模式最好是属于BCNF或3NF,因为属于这两种范式的关系模式可以避免出现前面5.7节中讲到的设计问题。
2、无损连接分解的条件
��令R为一关系模式,F为R上的函数依赖集。R1和R2
为R的无损连接分解的条件是:F中至少有如下函数依赖中的一个:
��⑴�R1∩R2→R1或
��⑵�R1∩R2→R2
也就是说两个模式的公共属性可以函数确定其中的一个模式。
3、分解模式Lending-schema
��⑴�第一步,对于函数依赖:branch-name→assets
branch-city,根据增补律可以得到函数依赖:
branch-name→branch-name assets branch-city
可以考虑将Lending-schema分解为两个模式,它们的公共属性为branch-name,且其中的一个模式包含属性branch-name、assets和branch-city。这样的分解符合无损连接分解的条件。这样关系模式Lending-schema就分解为如下两个模式:
Branch-schema = (branch-name, branch-city, assets)
Loan-info-schema = (branch-name, customer-name, loan-number, amount)
��⑵�第二步,根据第二个函数依赖:loan-number?amount branch-name继续对模式Loan-info-schema进行分解。根据增补律可以得到如下的函数依赖:
loan-number→loan-number amount branch-name
可以考虑将Loan-info-schema分解为两个模式,它们的公共属性为loan-number,且其中的一个模式包含属性loan-number、amount和branch-name。这样的分解符合无损连接分解的条件。这样关系模式Loan-info-schema就分解为如下的两个模式:
Loan-schema = (branch-name, loan-number, amount)
Borrower-schema = (loan-number, customer-name)
��⑶�第三步,根据前面的结果得到最终的分解结果如下:
Branch-schema = (branch-name, branch-city, assets)
Loan-schema = (branch-name, loan-number, amount)
Borrower-schema = (loan-number, customer-name)
有关这方面的更多内容,可以参考教材或其他书籍自学。 |
|