一部だけ直すと、同じ事実が食い違う

注文表のO101とO103の両方に、C01の現在の連絡先を書いたとします。一方だけ変更すると、同じ顧客の現在の連絡先が二通りになります。

これは更新時の不整合の例です。ここでいう現在の連絡先は、注文時点の配送先の履歴とは区別します。

整理して、見比べる正規化と更新の食い違いの整理
起こり得る問題注文に顧客情報を重複させた例分離する目的
更新の不整合 C01の連絡先を一行だけ直した 現在の顧客情報を一か所で管理
挿入の問題 注文なしでは顧客を登録しにくい 顧客を独立に登録
削除の問題 最後の注文と顧客情報を一緒に失う 別の事実を巻き込まない

注文がなくても、顧客を登録できる形へ

顧客情報を注文行だけに持つ設計では、まだ注文していない顧客を登録しにくくなります。また最後の注文を削除したとき、残したい顧客情報まで失うことがあります。

顧客表と注文表に分けると、それぞれの事実を独立に管理できます。削除の可否や保持期間は別途設計する必要があります。

何が何に依存するかで、分け方を決める

現在の顧客名・連絡先は顧客IDで決まり、注文の数量は注文IDで決まります。この違いに沿って表を分け、顧客IDで関連づけます。

単に列を半分に分ければ正規化になるわけではありません。注文時の価格や配送先を履歴として残す場合は、その時点の事実として保存する意味があります。

重複をすべて消すことだけを目的にしません。