テーブル設計に必要な正規化~第4、第5正規形~

第4正規形

第4正規形fourth normal form; 4NFでは候補キーではない列への多値従属性をもった列があってはならないという決まりがあります。
言葉では難しいので、例をあげます。
診療科医師診療曜日
皮膚科石田先生火曜日
皮膚科石田先生火曜日
皮膚科内海先生水曜日
皮膚科内海先生水曜日
このテーブルを見ると、『皮膚科は火曜日、水曜日の診療を行っている』という情報と、
『皮膚科には石田先生と内海先生が診療をしている』という2つの情報が得られます。
まとめると、『皮膚科』というキーに対して『石田先生、内海先生』、『火曜日、水曜日』という2つの情報が従属している状態になります。
また、『石田先生、内海先生』と『火曜日、水曜日』はそれぞれ独立したデータ内容で、その内容に関連性がないといえます。
このときに第4正規形にすることができます。
これを第4正規形であらわすと、
診療科診療曜日
皮膚科火曜日
皮膚科水曜日
診療科医師
皮膚科石田先生
皮膚科内海先生

という状態になります。
元のデータを取得するために、この2つのテーブルを直積(Corss Join)することで取得できる状態のことです。
2つのテーブルを直積(Corss Join) = 2つのテーブルの行の組み合わせで元の状態が得られることです。

第5正規形

第5正規形fifth normal formや5NFと表記されることもあるは、ほぼ第4正規形と等価です。
それは第4正規形が第5正規形の条件を満たさないケースは、稀でありほとんどないためです。
第4正規形が第5正規形の条件を満たさない稀なケースとは、
第4正規形のリレーションの属性値の組み合わせを正当にするための複雑な現実世界の制約が、そのリレーションでは強制できない場合となります。
診療科診療曜日
皮膚科火曜日
皮膚科水曜日
診療科医師
皮膚科石田先生
皮膚科内海先生
これは第4正規形で使用した例です。
これに診療時間が午前、午後とありすべての医師が全時間対応可能だという事がいえたとします。
すると第5正規形では以下のテーブルが追加されます。
時間
AM
PM
この3つのテーブルの直積(Cross Join)で、目的のデータが取れる状態が第5正規形です。
しかし、現実世界で、2人の医師が同じ時間に同じ診療をするよりも、時間を変えて病院として診療可能な時間帯を増やすことが多いので、
現実世界の制約を受けて、第5正規形を使用しないことが多いです。
3つのテーブルの直積(Cross Join) = 3つのテーブルの行の組み合わせで元の状態が得られることです。