2011-07-31 4 views
0

여러 테이블을 BCNF로 분해하려고합니다. 나는 첫 번째 것이 정확하게 분해된다고 믿지만 다른 것들이 분해 될 수 있는지 여부는 확신 할 수 없다. 어떤 도움이BCNF 분해 (데이터베이스 설계)

을 감사
**make(id, name, est, founder, city, state)** 

id->name; 
name->est, city, state, founder; 
city->state 

New Relations: [Key(id),name], [Key(name),est,city,state,founder], [Key(city),state] 

**model(id, makeId, name, year, category)** 

id->makeId, name; 
name->year, category (not superkey, but can't really decompose) 

**features(id, modelId, abs, tpms, sidebags, drl)** 

id->modelID, abs, tpms, sidebags, drl 

**user(id, name, pass, first, last, phone, isAdmin)** 

id->name, pass, isAdmin; name->first, last, phone 

**selling(id, price, modelId, mileage, userId)** 

id->price, modelId, mileage, userID 

답변

1

BCNF는 간단합니다 : 단지 하나의 관련 속성 세트 사이의 모든 종속성 관계의 퍼키에 종속되어 있는지 확인합니다. 귀하의 첫 번째 가깝지만, 두 번째 관계는 "상태"를 생략해야합니다. FD와의 모든 관계가 종속성 보존 BCNF 분해를 가지지 않기 때문에 사람들은 종종 3NF에서 멈 춥니 다. 다른 관계를 분해하는 데 도움이 필요합니까? 네가 필요하다면 나는 도울 것이다.

편집 : 다른 관계에 대한 도움말.

판매 및 기능은 훌륭합니다. BCNF가되기 위해서는 모델과 사용자를 이름으로 분리해야합니다. 이것은 당신이 모델을 위해 할 수있는 일이 아니라는 것을 나타냅니다. 왜? 이름은 화살표 오른쪽에있는 물건을 의미합니다.

+0

네가 다른 사람들을 분해하는 데 도움이된다면 크게 감사하겠습니다. 나는 알고리즘을 적용하는 방법을 여전히 배우고 있으므로 이러한 경우에 어떻게 수행하는지 보는 것은 큰 도움이 될 것입니다. – Leif

+0

lhs는 수퍼 키야, 맞습니까? 내가 'Key (id), makeId, name] [Key (name), year, category]와 같이 부러 뜨리면 그 것이 맞을까요? 도와 주셔서 감사합니다. – Leif

+0

첫 번째에 이름을 유지합니다. 예. 주어진 관계 내의 종속 관계는 그 관계의 수퍼 키에 있어야합니다. 그 슈퍼 키는 원본의 수퍼 키일 필요는 없습니다. 위의 주석에서 제시 한 분해는 올바른 종속성 보존 및 무손실 BCNF 분해입니다. – Patrick87