2016-05-20 9 views
0

私はこの関係を持っており、ボイスコッド正規形に分解しようとしています:ボイスコッド正規形分解第2の関係

私はjobRoleで終わったように、これらの手順で間違ったつもりはないが、何もスーパーの鍵た
Relationship R(workerName, pay, project, budgetAllocated, jobRole) 

     having key (workerName, project) 

     And the following Functional Dependencies: 

     workerName -> pay 
     project -> budgetAllocated 
     workerName, project -> Role 

I have come with this output so far, is this output correct? 

    workerName, project ->Role 
    project -> budgetAllocated, pay 
i know the first Relationship is in BCNF because of the super key (workerName, project) 

what about the second ? 

Using the Algorithm: 

S = {ABCDE}  // Intialization S = {R} 
S = {ACDE, AB} // Pick FD: A->B which violates BCNF 
S = {ACE, AB, CD} // Pick FD: C->D which violates BCNF 
// Return S as all relations are in BCNF 


R(workerName, pay, project, budgetAllocated, jobRole) 


workerName -> pay 
project -> budgetAllocated 
workerName, project -> Role 

S = {workerName, pay, project, budgetAllocated, jobRole }   // Intialization S = {R} 
S = {(project,budgetAllocated, jobRole) , (workerName, pay)  // Pick FD: workerName -> pay which violates BCNF 
S = {(jobRole), (workerName, pay) , (project, budgetAllocated) // Pick FD: project -> budgetAllocated which violates BCNF 

(workerName、project)?

+0

与えられた関数の依存関係から、2番目の結果で 'project - > pay'をどうやって得るのですか? – reaanb

+0

@reaanb私はこのアルゴリズムに従おうとしています。S = {ABCDE} //初期化S = {R} S = {ACDE、AB} //ピックFD:BCNFに違反するB- S = {ACE、AB 、CD} // FDを選択:BCNFに違反するC-> D //すべての関係がBCNFにあるので返信 – blueGOLD

答えて

1

この回答では、jobRoleRoleは同じ属性であるとします。

BCNFで分解するには、この形式に違反する依存関係、つまり行列式がスーパーキーではないことを見つけることから始める必要があります。

例えば、projectはスーパーキーではないため、この場合、依存関係はBCNFに違反します。依存関係の決定以来、

R1(project, budgetAllocated) {project → budgetAllocated} 
R2(workerName, pay, project, Role) {workerName → pay, project workerName → Role} 

さて、R1はBCNFである:そして、あなたは二つの部分、残りの属性+ projectprojectによって属性決定基と1、および1つ、すなわち、元の関係を分解しなければなりません鍵はR2は鍵がproject, workerNameであり、依存関係workerName → payは通常の形式に違反しているため、分解する必要があります。

R3(pay workerName) {workerName → pay} 
R4(Role project workerName) {project workerName → Role} 

だから、最後に、正しい分解がR1R3R4、およびすべての依存関係が維持されている。

だから、第二段階で、我々は R2に分解する。

+1

偉大な答えをありがとう。私はちょうど私が逃したこのアルゴリズムに従うことによって、私の元の質問にいくつかの編集を行った? – blueGOLD

+1

通常のフォームに違反する依存関係を選択すると、関係から*すべての*属性が削除されますが、確定された属性、*行列式ではない* LHSのみを削除する必要があります。 – Renzo

関連する問題