Skip to main content

データベースを最初の正規形にする

第1正規形 (かもしれません 2024)

第1正規形 (かもしれません 2024)
Anonim

First Normal Form(1NF)は、体系化されたデータベースの基本規則を設定します。

  • 重複する列を同じ表から削除する。
  • 関連するデータのグループごとに個別のテーブルを作成し、ユニークな列(プライマリキー)で各行を識別します。

これらのルールは、データベースの実際の設計を検討するときにはどういう意味ですか?実際には非常に簡単です。

重複をなくす

最初のルールは、テーブルの同じ行にデータを重複させてはいけないということです。データベース・コミュニティー内では、この概念を表の不可分性と呼びます。このルールに従うテーブルはアトミックであると言われています。典型的な例として、マネージャーと従属関係を格納する人事データベース内のテーブルを使用して、この原則を調べてみましょう。この例では、各マネージャーに1人以上の従業員がいるビジネスルールを適用し、各従業員には1人のマネージャーしか持たないようにします。

直感的に、この情報を追跡するためのリストやスプレッドシートを作成するときは、次のフィールドを持つ表を作成することがあります。

  • マネージャー
  • 下位1
  • 下位2
  • 下位3
  • 下位4

しかし、1NFによって課せられた最初のルールを思い出してください。重複する列を同じテーブルから削除します。明らかに、Subordinate1-Subordinate4列は重複しています。このシナリオによって引き起こされた問題を熟考し、熟考してください。マネージャーに従属する従業員が1人しかいない場合、Subordinate2-Subordinate4列は単純に無駄なストレージスペース(貴重なデータベース商品)です。さらに、マネージャーがすでに4人の従業員を抱えている場合を想像してください。他の従業員を連れていくとどうなりますか?テーブル構造全体に変更が必要です。

現時点では、データベースの初心者にとって第2の明るいアイデアが通常発生します.1つ以上の列を持つことは望ましくなく、柔軟な量のデータ格納を可能にしたいと考えています。このようなものを試してみましょう:

  • マネージャー
  • 部下

従属フィールドには、「Mary、Bill、Joe」という形式の複数のエントリが含まれます。

この解決策はより近いですが、それはまたマークに足りません。従属列は依然として重複しており、非アトミックです。従属者を追加または削除する必要がある場合はどうなりますか?テーブルの内容全体を読み書きする必要があります。この状況ではそれほど大きな問題ではありませんが、1人のマネージャーが100人の従業員を抱えているとしたらどうでしょうか?また、将来のクエリでデータベースからデータを選択するプロセスが複雑になります。

ここに1NFの最初のルールを満たすテーブルがあります:

  • マネージャー
  • 下位

この場合、各従属者は1つのエントリを持ちますが、マネージャは複数のエントリを持つことができます。

主キーを特定する

次に、第2のルールはどうでしょうか?各行を一意の列または列のセット(主キー)で識別します。上の表を見て、従属列を主キーとして使用することをお勧めします。実際、従属列はプライマリキーの良い候補です。ビジネスルールによって各従属者にマネージャが1人しかないということが指定されているためです。しかし、私たちのテーブルに保存したデータは理想的ではありません。 Jimという別の従業員を雇うとどうなりますか?マネージャーと従属関係をどのようにデータベースに保存しますか?

一意の識別子(従業員IDなど)を主キーとして使用することをお勧めします。最終的なテーブルは次のようになります。

  • マネージャID
  • 従属ID

今、私たちのテーブルは最初の通常の形です!それ以外にも、さらに多くの組織について興奮している場合は、データベースをSecond Normal FormとThird Normal Formに入れるオプションがあります。