7

この質問は明らかに宿題です。私は教授の言うことを理解できず、選挙中に彼が何を言ったのかわかりません。次の表を最初に 1NF、次に 2NF、次に 3NF に正規化する手順を段階的に作成する必要があります。

ここに画像の説明を入力

ヘルプと指示に感謝します。

4

4 に答える 4

21

オーケー、すべて正しく覚えているといいのですが、始めましょう...

ルール

それらを非常に短くするために(そしてそれが何であるかについての最初のアイデアを与えるために、あまり正確ではありません):

  • NF1 : 表のセルに複数の値を含めることはできません。
  • NF2 : NF1 に加えて、すべての非主キー列はすべての主キー列に依存する必要があります。
  • NF3 : NF2 に加えて、非主キー列は互いに依存しない場合があります。

指示

  • NF1 : 複数の値を含む表のセルを見つけて、それらを別々の列に入れます。
  • NF2 : すべての主キー列よりも少ない列に依存する列を見つけ、それらが実際に依存する主キー列のみを持つ別のテーブルに配置します。
  • NF3 : 主キーに依存するだけでなく、他の非主キー列にも依存する列を検索します。従属列を別の表に入れます。

NF1

列 " state" には "WA, Washington" のような値があります。略語と名前の 2 つの値であるため、NF1 に違反しています。

解決策: NF1 を満たすには、2 つの列と を作成しSTATE_ABBREVIATIONますSTATE_NAME

NF2

車のモデルの国際的な名前を表す、次の 4 つの列を持つテーブルがあるとします。

  • COUNTRY_ID(数値、主キー)
  • CAR_MODEL_ID(数値、主キー)
  • COUNTRY_NAME(varchar)
  • CAR_MODEL_NAME(varchar)

テーブルには、次の 2 つのデータ行が含まれる場合があります。

  • 行 1: COUNTRY_ID=1、CAR_MODEL_ID=5、COUNTRY_NAME=USA、CAR_MODEL_NAME=Fox
  • 行 2: COUNTRY_ID=2、CAR_MODEL_ID=5、COUNTRY_NAME=ドイツ、CAR_MODEL_NAME=ポロ

つまり、モデル「フォックス」はアメリカでは「フォックス」と呼ばれていますが、ドイツでは同じ車のモデルが「ポロ」と呼ばれています (実際にそうであったかどうかは覚えていません)。

国名は車のモデル ID と国 ID の両方に依存せず、国 ID のみに依存するため、NF2 に違反しています。

解決策: NF2 を満たすには、列(​​主キー) とCOUNTRY_NAMEを含む別のテーブル "COUNTRY" に移動します。国名を含む結果セットを取得するには、JOIN を使用して 2 つのテーブルを接続する必要があります。COUNTRY_IDCOUNTRY_NAME

NF3

州の気候条件を表す次の列を含むテーブルがあるとします。

  • STATE_ID(varchar、主キー)
  • CLIME_ID(外部キー、「砂漠」、「熱帯雨林」などの気候帯の ID)
  • IS_MOSTLY_DRY(ブール値)

IS_MOSTLY_DRY は CLIME_ID (少なくともそれを仮定しましょう) のみに依存し、STATE_ID (主キー) には依存しないため、NF3 に違反しています。

解決策: NF3 を満たすには、列MOSTLY_DRYを気候帯テーブルに入れます。


演習で与えられた実際のテーブルに関するいくつかの考えを次に示します。

主キー列に挑戦することなく、上記の NF ルールを適用します。しかし、後で説明するように、これらは実際には意味がありません。

  • NF1 には違反していません。各セルには値が 1 つだけ保持されます。
  • EMP_NM とすべての電話番号は NF2 に違反しています。これは、これらの列のすべてが完全な主キーに依存していないためです。それらはすべて EMP_ID (PK) に依存しますが、DEPT_CD (PK) には依存しません。従業員が別の部署に移動しても、電話番号は同じままだと思います。
  • DEPT_NM は完全な主キーに依存しないため、NF2 も DEPT_NM によって違反されます。DEPT_CD に依存しますが、EMP_ID には依存しません。
  • NF2 は、すべてのスキル列によっても違反されています。これらの列は部門固有ではなく、従業員固有のものであるからです。
  • NF3 は SKILL_NM によって違反されます。これは、スキル名がスキル コードのみに依存し、複合主キーの一部でさえないためです。
  • SKILL_YRS は、主キー メンバー (EMP_ID) と非主キー メンバー (SKILL_CD) に依存するため、NF3 に違反します。そのため、非主キー属性に部分的に依存しています。

したがって、NF2 または NF3 に違反するすべての列を削除すると、主キー (EMP_ID および DEPT_CD) のみが残ります。残りの部分は、与えられたビジネス ルールに違反しています。この構造では、従業員が複数の部門で同時に働くことができます。

遠くから見直してみましょう。データ モデルは、従業員、部門、スキル、およびこれらのエンティティ間の関係に関するものです。それを正規化すると、従業員用に 1 つのテーブル (外部キーとして DEPT_CD を含む)、部門用に 1 つ、スキル用に 1 つ、従業員とスキルの関係用に 1 つ、「スキル」を保持するテーブルが作成されます。 EMP_ID と SKILL_CD の各タプルについて (私の先生は後者を「連想エンティティ」と呼んでいたでしょう)。

于 2013-03-07T16:50:17.450 に答える
4

テーブルの最初の 2 行を
見て、そのテーブルで「PK」とタグ付けされている列を見て
、「PK」が「主キー」を表すと仮定して
、これらの 2 つの列に表示される値を調べます。 2行、
私はあなたの教授に、データベースの教育から完全に抜け出し、彼がその主題について適切に教育を受けるまで戻ってこないように勧めます.

問題文自体に絶望的に矛盾した情報が含まれているため、この演習を真剣に受け止めることはできません。

(結果として、この質問に対する「良い」または「正しい」答えなどはまったくないことに注意してください!!!)

于 2013-03-07T20:16:30.923 に答える
1

別の単純化された答えが出てきます。

3NF リレーショナル テーブルでは、すべての非キー値は、キー、キー全体、およびキー以外の何ものによっても決定されません (だから Codd を助けて ;))。

1NF: 鍵。これは、キー値と名前付き列を指定した場合、行と列の交点に最大で 1 つの値が存在することを意味します。コンマで区切られた一連の値のような複数値は許可されません。キーと列名だけでは値に直接アクセスできないためです。

2NF: キー全体。キーの一部ではない列がキー列の適切なサブセットによって決定される場合、2NF に違反しています。

3NF: そして鍵だけ。列が非キー列のセットによって決定される場合、3NF に違反しています。

于 2013-03-07T17:05:13.620 に答える