2011-07-31 8 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は簡単です:1つだけの関係で属性セット間のすべての依存関係が関係のスーパーキーの依存関係であることを確認してください。あなたの最初のものは近いですが、第2の関係は「状態」を省略する必要があります。 FDとの関係のすべてがBCNFの依存性を保持しているわけではないため、人々は3NFで止まることがよくあります。あなたは他の関係を分解するのに助けが必要ですか?あなたが必要なら、私は助けます。

編集:他の関係のヘルプ。

販売と機能は問題ありません。 BCNFに入るためには、モデルとユーザーを名前で分割する必要があります。あなたはこれがモデルのためにできることではないことを示しています。どうして?名前は矢印の右側にあるものを意味します。

+0

他人を分解するのに役立ちましたら、それは大変ありがとうございます。私はまだアルゴリズムを適用する方法を学んでいるので、そのような場合にそれを行う方法を知ることは大きな助けになるでしょう。 – Leif

+0

lhsはスーパーキーでなければなりません、そうですか? [Key(id)、makeId、name] [Key(name)、year、category]のように分割した場合、正しいでしょうか?助けてくれてありがとう。 – Leif

+0

最初に名前を入れてください。与えられた関係の中の依存関係は、その関係のスーパーキー上になければならない。そのスーパーキーはオリジナルのスーパーキーである必要はありません。上記のコメントで示唆している分解は、正しい、依存性を保持し、ロスレスなBCNF分解です。 – Patrick87