データベースを第一正規形にする

第一正規形(1NF)には、 正規化され整理されたデータベース. 1つ目は、同じテーブルから重複する列を削除することです。 2つ目は、関連データのグループごとに個別のテーブルを作成し、各行を一意の列(主キー)で識別することです。 データベースの実際の設計を検討する場合、これらのルールは何を意味しますか?

重複を排除する

最初のルールは、テーブルの同じ行内でデータを複製してはならないことを示しています。 データベースコミュニティ内では、この概念はテーブルのアトミック性と呼ばれます。 この規則に準拠するテーブルは、アトミックであると言われます。

この原則を古典的な例で調べてみましょう。マネージャーと部下の関係を格納する人材データベース内のテーブルです。 この例では、各マネージャーに1人以上の部下がいるのに対し、各部下には1人のマネージャーしかいないというビジネスルールを課します。

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

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

ただし、1NFによって課された最初のルールを思い出してください。同じテーブルから重複する列を削除します。 明らかに、Subordinate1からSubordinate4の列は重複しています。 少し時間を取って、このシナリオによって引き起こされる問題について考えてください。

マネージャーに部下が1人しかいない場合、Subordinate2からSubordinate4の列は、無駄なストレージスペース(貴重なデータベース商品)になります。 さらに、マネージャーに4人の部下がいる場合を想像してみてください。 彼らが別の従業員を引き受けるとどうなりますか? テーブル構造を変更する必要があります。

この時点で、データベースの初心者には通常、2番目の明るいアイデアが思い浮かびます。複数の列を持たせたくないので、柔軟な量のデータストレージを許可したいと考えています。 このようなことを試してみましょう:

  • マネジャー
  • 部下

また、[部下]フィールドには、「メアリー、ビル、ジョー」の形式の複数のエントリが含まれます。

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

これは、1NFの最初のルールを満たすテーブルです。

  • マネジャー
  • 下位

この場合、各部下には1つのエントリがありますが、マネージャーには複数のエントリがある場合があります。

主キーを特定する

次に、2番目のルールについてはどうでしょうか。一意の列または列のセットで各行を識別します( 主キー). 上記の表を見て、主キーとして従属列を使用することをお勧めします。 実際、ビジネスルールでは、各部下には1人のマネージャーしかいないことが指定されているため、[部下]列は主キーの候補として適しています。

ただし、テーブルに保存することを選択したデータは、これを理想的なソリューションとは言えません。 ジムという名前の別の従業員を雇うとどうなりますか? 彼のマネージャーと部下の関係をデータベースに保存するにはどうすればよいですか?

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

  • マネージャーID
  • 部下ID

今、私たちのテーブルは最初の正規形です、これを超えて、あなたを置くためのオプションがあります 第2正規形のデータベース、および 第3正規形 あなたがより多くの組織に興奮しているなら。