例えば以下のようなテーブルがあるとします。
受付テーブル (非正規形のテーブル)
受付日 患者ID 性 名 名前 住所 診療科 医師名2005/03/01 P1 東京 太郎 東京 太郎 ○県A市 内科、外科 徳川(内科D1)、豊臣(外科D2) 2005/03/02 P3 福岡 一郎 福岡 一郎 ×県B市 内科 織田(内科D3) 2005/03/03 P4 青森 花子 青森 花子 △県C市 小児科、外科 明智(小児科D4)、豊臣(外科D5)
受付テーブル(第一正規化-1)
受付日 患者ID 性 名 名前 住所 診療科医師ID 医師名2005/03/01 P1 東京 太郎 東京 太郎 ○県A市 内科 D1 徳川 2005/03/01 P1 東京 太郎 東京 太郎 ○県A市 外科 D2 豊臣 2005/03/02 P3 福岡 一郎 福岡 一郎 ×県B市 内科 D3 織田 2005/03/03 P4 青森 花子 青森 花子 △県C市 小児科 D4 明智 2005/03/03 P4 青森 花子 青森 花子 △県C市 外科 D5 豊臣
受付テーブル (第一正規化-2)一つのの枠に配列(繰り返し)をいれないことが第1正規形です
受付日 患者ID 性 名 住所 診療科医師ID 医師名2005/03/01 P1 東京 太郎 ○県A市 内科 D1 徳川 2005/03/01 P1 東京 太郎 ○県A市 外科 D2 豊臣 2005/03/02 P3 福岡 一郎 ×県B市 内科 D3 織田 2005/03/03 P4 青森 花子 △県C市 小児科 D4 明智 2005/03/03 P4 青森 花子 △県C市 外科 D5 豊臣
患者テーブル
患者ID 性 名 住所P1 東京 太郎 ○県A市 P2 福岡 一郎 ×県B市 P3 青森 花子 △県C市
医師テーブル
医師ID 診療科 医師名D1 内科 徳川 D2 外科 豊臣 D3 内科 織田 D4 小児科 明智 D5 外科 豊臣
患者テーブル及び医師名テーブルを分割したので、受付テーブルにはキーとなる項目だけ残しておきます。
受付テーブル
受付日 患者ID 診療科医師ID 2005/03/01 P1 内科 D1 2005/03/01 P1 外科 D2 2005/03/02 P3 内科 D3 2005/03/03 P4 小児科 D4 2005/03/03 P4 外科 D5
受付テーブル
|
来院履歴テーブル
|
||||||||||||||||||||||||||||||||||
患者テーブル
|
医師テーブル
|
||||||||||||||||||||||||||||||||||
実は、第3正規化は常に実用性があるとは限りません。たとえば、患者テーブルに都市、電話番号、性別、利用頻度などを登録するような場合、それら全てを別個のテーブルに作成する必要があります。もし本当に別テーブルに切り分けるとしたら、小さいテーブルを数多く作成することになり、パフォーマンスや作業効率の低下を招きます。 第3正規形は、テーブルの利用形態などをじっくりと考えてから、データの変更頻度や重要度によってケース・バイ・ケースに適用するのが現実的です |