データベースの正規化:最初の正規形

この2つの簡単なルールは、データベースの正規化に役立ちます

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

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

1.重複をなくす

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

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

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

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

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

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

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

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

2.主キーを特定する

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

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

今、私たちのテーブルは最初の通常の形です! 正規化について引き続き学習したい場合は、このシリーズの他の記事を読んでください: