第4正規形(4NF)とは?多値従属性を解消するデータベース正規化の解説
第4正規形(4NF)とは?
第4正規形(4NF)は、第1正規形(1NF)、第2正規形(2NF)、第3正規形(3NF)、そしてボイス・コッド正規形(BCNF)に続く、さらに高度な正規形です。1977年にロナルド・ファジン(Ronald Fagin)によって提唱されました。
あるリレーションが第4正規形を満たすためには、まずボイス・コッド正規形(BCNF)を満たしている必要があります。その上で、1つを除いて複数の多値属性(独立した多値従属性)を含んではならないという条件を満たす必要があります。
ここでいう「多値従属性」とは、ある属性の値が決まると、それとは独立に別の属性が複数の値を取りうる関係のことです。このような関係が1つのテーブルに混在すると、データの重複や更新時の不整合が発生しやすくなります。
具体例
以下のテーブルを見てみましょう。
<映画>
| 映画名 | 撮影地 | ジャンル |
| MovieOne | イギリス | コメディ |
| MovieOne | イギリス | スリラー |
| MovieTwo | オーストラリア | アクション |
| MovieTwo | オーストラリア | 犯罪 |
| MovieThree | インド | ドラマ |
このテーブルは第4正規形を満たしていません。その理由は以下の通りです。
- 同じジャンル(Listing)を持つ映画が複数存在しうる
- 1つの映画に対して複数の撮影地が存在しうる
つまり、「映画名 → 撮影地」と「映画名 → ジャンル」という2つの独立した多値従属性が同じテーブル内に共存しており、これが4NF違反となっています。この状態では、撮影地とジャンルの組み合わせが直積として増殖し、不要なデータ重複が生じます。
第4正規形への変換
そこで、多値従属性ごとにテーブルを分割します。
<映画_撮影地>
| 映画名 | 撮影地 |
| MovieOne | イギリス |
| MovieTwo | オーストラリア |
| MovieThree | インド |
<映画_ジャンル>
| 映画名 | ジャンル |
| MovieOne | コメディ |
| MovieOne | スリラー |
| MovieTwo | アクション |
| MovieTwo | 犯罪 |
| MovieThree | ドラマ |
このようにテーブルを分割することで、多値従属性の違反が解消され、両方のテーブルが第4正規形を満たすことになります。結果として、データの重複が減り、更新や削除の際の不整合リスクも大幅に低減されます。
-
第3正規形(3NF)とは?条件と変換例をわかりやすく解説
第3正規形(3NF)とは?データベースの正規化における第三段階が第3正規形(3NF:Third Normal Form)です。テーブルが3NFであるためには、次の2つの条件を満たす必要があります。リレーションが第2正規形(2NF)であること推移的関数従属が存在しないこと推移的関数従属とは、「A → B」「B → C」という依存関係から、間接的に「A → C」が導かれてしまう状態を指します。このような依存関係が残っていると、データの冗長性や更新時の不整合が発生しやすくなります。例:3NFに違反するテーブル次の <MovieListing> テーブルを見てみましょう。Movie_IDL
-
Djangoフォームウィジェットの使い方を徹底解説|Textareaで入力フォームをカスタマイズ
Djangoのフォームウィジェットとは? この記事では、Djangoフォームにおける「ウィジェット(widget)」の使い方について詳しく解説します。ウィジェットを活用すると、フロントエンドの見た目や操作性を大きく向上させることができます。 ウィジェットとは、DjangoフォームからHTMLとしてレンダリングされる要素のことです。テキストボックス(input)、テキストエリア(textarea)、パスワード入力欄(password input)など、フォームを構成するUI部品はすべてウィジェットに該当します。 事前準備:プロジェクトとアプリの作成 まずはDjangoプロジェクトとアプリを作成