この2つの簡単なルールは、データベースの正規化に役立ちます
First Normal Form(1NF)は、体系化されたデータベースの基本規則を設定します。
- 重複する列を同じ表から削除する。
- 関連するデータのグループごとに個別のテーブルを作成し、ユニークな列(プライマリキー)で各行を識別します。
これらのルールは、データベースの実際の設計を検討するときにはどういう意味ですか? 実際には非常に簡単です。
1.重複をなくす
最初のルールは、テーブルの同じ行にデータを重複させてはいけないということです。 データベース・コミュニティー内では、この概念を表の不可分性と呼びます。 このルールに従うテーブルはアトミックであると言われています。 典型的な例として、マネージャーと従属関係を格納する人事データベース内のテーブルを使用して、この原則を調べてみましょう。 この例では、各マネージャーに1人以上の従業員がいるビジネスルールを適用し、各従業員には1人のマネージャーしか持たないようにします。
直感的に、この情報を追跡するためのリストやスプレッドシートを作成するときは、次のフィールドを持つ表を作成することがあります。
- マネージャー
- 下位1
- 下位2
- 下位3
- 下位4
しかし、1NFによって課せられた最初のルールを思い出してください。重複する列を同じテーブルから削除します。 明らかに、Subordinate1-Subordinate4列は重複しています。 このシナリオによって引き起こされた問題を熟考し、熟考してください。 マネージャーに従属する従業員が1人しかいない場合、Subordinate2-Subordinate4列は単純に無駄なストレージスペース(貴重なデータベース商品)です。 さらに、マネージャーがすでに4人の従業員を抱えている場合を想像してください。他の従業員を連れていくとどうなりますか? テーブル構造全体に変更が必要です。
現時点では、データベースの初心者にとって第2の明るいアイデアが通常発生します.1つ以上の列を持つことは望ましくなく、柔軟な量のデータ格納を可能にしたいと考えています。 このようなものを試してみましょう:
- マネージャー
- 部下
従属フィールドには、「Mary、Bill、Joe」という形式の複数のエントリが含まれます。
この解決策はより近いですが、それはまたマークに足りません。 従属列は依然として重複しており、非アトミックです。 従属者を追加または削除する必要がある場合はどうなりますか? テーブルの内容全体を読み書きする必要があります。 この状況ではそれほど大きな問題ではありませんが、1人のマネージャーが100人の従業員を抱えているとしたらどうでしょうか? また、将来のクエリでデータベースからデータを選択するプロセスが複雑になります。
ここに1NFの最初のルールを満たすテーブルがあります:
- マネージャー
- 下位
この場合、各従属者は1つのエントリを持ちますが、マネージャは複数のエントリを持つことができます。
2.主キーを特定する
次に、2番目のルールはどうでしょうか?ユニークな列または列のセット( プライマリキー )で各行を識別しますか? 上の表を見て、従属列を主キーとして使用することをお勧めします。 実際、従属列はプライマリキーの良い候補です。ビジネスルールによって各従属者にマネージャが1人しかないということが指定されているためです。 しかし、私たちのテーブルに保存したデータは理想的ではありません。 Jimという別の従業員を雇うとどうなりますか? マネージャーと従属関係をどのようにデータベースに保存しますか?
一意の識別子(従業員IDなど)を主キーとして使用することをお勧めします 。 最終的なテーブルは次のようになります。
- マネージャID
- 従属ID
今、私たちのテーブルは最初の通常の形です! 正規化について引き続き学習したい場合は、このシリーズの他の記事を読んでください: