簡體   English   中英

如何將表分解為3NF和BCNF

[英]How to decompose table to 3NF and BCNF

我以這種方式找到了一種關系- CUSTOMER (NAME, STREET, CITY, STATE, ZIP)

對於以下每種方式都使用縮寫,

Name - N
STREET - R
CITY - C
STATE - T
ZIP - Z

並給定F = {N->RCT, RCT->Z, Z->CT}

而問題則分解為3NFBCNF

我將其分解為3NF ,在這里我考慮了實用的方法,

R1(N,R,Z)
R2(Z,C,T)

這是正確的嗎?

還是只考慮給定的功能依賴項進行分解。 如果我這樣考慮並分解為3NF ,那么答案將是

R1(N,R,C,T)
R2(R,C,T,Z)

請有人建議我正確的方法。

您的第一個分解是不正確的,而第二個是。 為了在3NF中進行分解,“合成”算法的第一步需要找到一組依賴項的規范覆蓋,然后將組中找到的依賴項用相同的左手分組。

由於您的依賴項中沒有多余的依賴項或多余的屬性,因此我們可以從左側有不同的三個依賴項開始,產生三個關系:

 from N → RCT, R1 (N, R, C, T), with key N
 from RCT → Z, R2 (R, C, T, Z), with key RCT
 from Z → CT, R3 (C, T, Z), with key Z

然后,注意到第三個關系完全包含在第二個關系中,我們可以消除它。 該算法的最后形式步驟要求我們檢查是否在某個分解關系中存在原始關系的鍵(否則應添加與該鍵的新關系)。 這是正確的,因為Z是這樣的鍵,它存在於第二種關系中。 因此,最終分解為:

 R1 (N, R, C, T), with key N
 R2 (R, C, T, Z), with key RCT

請注意,通過應用“分析”算法找到BCNF,我們獲得了不同的解決方案:

R1 <(N, R, C, T),
    { N → RCT }>

R2 <(C, T, Z),
    { Z → CT } >

R3 <(R, Z),
    { } >

但是在這種分解中,功能依賴性CRT → Z丟失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM