3NFとBCNFの違いとは?分かりやすく解説!

この記事には、アフィリエイト広告を利用しています。

スポンサーリンク


3NFとBCNFの主な違いは、3NFを満たすにはテーブルが第2正規形であること、推移的依存関係がないこと、BCNFを満たすにはテーブルの素属性が非素属性に依存してはならないこと、です。

データの冗長性とは、同じデータが複数の場所で繰り返されることを指す。

また、データの挿入、更新、削除の際に問題を起こすこともあります。

正規化とは、データの冗長性を最小化するために、データを複数の関連するテーブルに整理することである

テーブル内のデータを複数のテーブルに分割するため、データの冗長性に対する解決策を提供します。

ただし、データの冗長性を完全になくすことはできず、あくまでデータの冗長性を減らすことが可能である

正規化には、1NF、2NF、3NF、BCNFなど様々な種類があります。

 3NF、BCNFを論じる前に、1NF、2NFを理解することが必要である

スポンサーリンク

1NFとは

1NFを満たす表を作るには4つのルールがあります。

それらは次の通りです。

  • テーブルの各カラムは自動的な値を持つべきです。
  • カラムは同じ型のデータを持つべきです。
  • 各列は一意な名前を持つべきです。
  • データを格納する順序は重要でない。

テーブルが第1正規形でない場合、それは悪いデータベース設計とみなされる。

例として次のようなものがあります。

上のテーブルでは、subject列に複数の値が格納されている。

1NFを実行すると、表は以下のようになる。

2NFとは

2NFを満たす表を作るには2つのルールがあります。

それらは次の通りです。

  • 表は1NF形式でなければならない。
  • 部分的な依存関係がないこと。

学生の情報を格納するテーブルでは、学生IDが主キーであり、テーブル内の各行を個別に識別するのに役立つ。

他の列は主キーに依存する。

この依存関係を関数従属と呼びます。

例えば、score というテーブルがあるとします。

主キーは、学生 ID と科目 ID の組み合わせです。

このテーブルに講師名があれば、科目IDにのみ依存します。

このような依存関係を部分依存という。

例として、次のようなものがあります。

上記テーブルの主キーは、student_id と subject_id の組合せです。

講師名(lecturer_name)は別のテーブルに置くことができる。

これで、score、subject、lecturer テーブルは以下のようになります。

Main Difference - 3NF vs BCNF

3NFとは

2NFを満たす表を作るには2つのルールがあります。

それらは次のとおりです。

  • 表は第2正規形を満たしていなければならない。
  • 他動詞を持たないこと。

例えば、scoreテーブルがstudent_id, subject_id, marks, exam_name, total_marksを持っているとする。

student_id と subject_id の組み合わせが主キーとなる。

この total_marks は、この主キーには依存しません。

exam_nameに依存する。

つまり、ある属性が主キー以外の属性に依存しているのです。

このような依存関係を推移的依存性と呼びます。

したがって、試験名と合計点数を別のテーブルで採点することができる。

BCNFとは

BCNFはBoyce-Codd-Normal Formの略です。

主属性が非主属性に依存しないようにする。

例として次のようなものがあります。

上記のテーブルの主キーは、student_id と subject の組み合わせです。

一人の講師が一つの科目を担当するので、そのカラムで各レコードを一意に識別することも可能です

しかし、lecturer は主キーではありません。

subject カラムは主属性でない lecturer に依存します。

従って、このテーブルはBCNFを満たさない。

そこで、studentテーブルとlecturerテーブルを以下のように作成する。

3NFとBCNFの違い

定義

3NFとは、データベース設計の正規化において、実体が第2正規形であること、テーブルのすべての属性がその関係の候補キーによってのみ決定され、主属性以外には依存しないことを保証することにより、データの重複を減らし、参照整合性を確保するために用いられる正規形です。

一方、BCNFは、3NFを少し強くしたデータベース正規化で使われる正規形です。

したがって、ここが3NFとBCNFの大きな違いです。

機能性

表が第2正規形であり、推移的依存関係がないことが3NFを満たすのに対し、表の素性は表の非素性に依存しないことがBCNFを満たす。

従って、機能性も3NFとBCNFの違いの一つです。

結論

簡単に説明すると、正規化されたデータベースは良いデータベースと見な される。

正規化には様々な種類があり、3NFとBCNFの2つがあります。

3NFとBCNFの主な違いは、3NFを満たすためにはテーブルが第2正規形でなければならず、推移的依存関係があってはならないこと、BCNFを満たすためにはテーブルの主属性がテーブルの非主属性に依存してはならないことです。

タイトルとURLをコピーしました