1

私は従業員とホテルで働いていた時間を追跡する関係を分解しました。これらのテーブルは3番目の正規形式ですか?

私は、次の3つのテーブル

1. 
Employees: 
national insurance number(A) 
eName(D) 
PRIMARY KEY(A) 


2. 
Works at: 
contract Number(B) 
Hours(C) 
national insurance number(A) 
PRIMARY KEY(B, AND A) 

3. 
Hotel: 
contract Number(B) 
hotel Number(E) 
hotel Location(F) 
PRIMARY KEY(B) 
を作成している。このことから機能的な依存関係に

F:(A->D, E->F, AB->C, B->E, BA->E) 

を発見した

R(A, B, C, D, E, F) 

のように書き換える

R(national insurance number, contract Number, hours, eName, hotel Number,  hotel Location) 

を次のように元の関係があります

私の3番目のテーブルには、ホテルの番号と場所の両方を判断できるプライマリキーがあります。ホテルの番号は のホテルの所在地を特定することもできます。ホテルのロケーションを新しいテーブルに移動する必要があります(ホテル番号のみ)。それはより多くのスペースを使いますが、3RDの通常の形に到達する必要がありますか?

+1

はテーブル「での作品」「ホテル」テーブルで同じ契約番号での契約数ですか? –

+0

私は契約が従業員を契約に結びつけているテーブルでの作業で、独自のテーブルになると期待します。 1つのホテルに1つの契約のみがある場合、契約番号はホテル内にありますが、契約が切れた場合やホテルが複数の契約を結ぶ場合はどうなりますか?その場合、それらの用語を管理するホテル契約のリンクテーブルがあります。 –

+0

いずれにしても、契約番号がホテルのテーブルのPKであるとは思われません。 –

答えて

1

あなたの設定で3番目の正規形を達成するために、FDが派生したと仮定すると、Hotel(B,E,F) { B->E, E->F }HotelContract(B,E) { B->E }Hotel(E,F) { E->F }に分割する必要があります。 { B->E, E->F }の場合、Bが(ソール)キーであり、Eは「非プライム」属性(つまり、どのキーの一部でもない)なので、Fはキーの非プライム属性を介して推移します。これは第3正規形に違反します。

3NFに違反するスキーマHotel(B,E,F) { B->E, E->F }を使用すると、「削除の異常」が発生します。つまり、タプルを削除するときに必要以上に多くの情報が失われてしまいます。HotelHotelの以下の拡張子を仮定します

Hotel 
B | E | F 
---|---|--- 
b1 | e1| f1 
b2 | e2| f2 

あなたはタプル(b2,e2,f2)を削除すると、あなたはあなただけの契約を削除したかったが、ホテルe2は、f2に位置していることを情報を失います。

、あなたが実際には同じホテルe1を例f1f2のための2つの異なる場所、取得することを可能にするだろうFD E->F、省略あなたは

Hotel: 
contract Number(B) 
hotel Number(E) 
hotel Location(F) 
PRIMARY KEY(B) 

にスキームを変換する際に、さらに悪い:

Hotel 
B | E | F 
---|---|--- 
b1 | e1| f1 
b2 | e1| f2 -> permitted by your scheme, but not intended! 

したがって、イントロで推奨されているとおりにテーブルを分割します。

1

あなたが正しいようです。ホテルは別のテーブルにする必要があります。

また、複数のホテルで複数の契約を結ぶ可能性があり、1つのホテルに複数の契約がある可能性があります。

ので、私には正規化された形式は、次のようになります。

1. Employees: 
    national insurance number(A) 
    eName(D) 
    PRIMARY KEY(A) 

2. Hotels: 
    hotel Number(E) 
    hotel Location(F) 
    PRIMARY KEY(E) 

3. Contracts: 
    contract Number(B) 
    hotel Number(E) 
    PRIMARY KEY(B) 
    FOREIGN KEY(Hotels.E) 

4. Works at: 
    work at(G), 
    national insurance number(A) 
    contract Number(B) 
    Hours(C) 
    PRIMARY KEY(G) 
    FOREIGN KEY(Employees.A) 
    FOREIGN KEY(Contracts.B) 
+0

正規化は新しい列名を導入しません。また、あなたはFDが何であるかを伝えられたので、あなたの "可能性があると推測する"ことは不適切です。 – philipxy

関連する問題