しばらく研究していたデータベース設計の問題がありますが、適切な答えを得ることができません。次のように、2つのテーブルがあるhouse_schema
とhouse
します。
house_schema {
id big int,
house_height int,
house_width int,
house_decoration vchar(1024),
build_date timestamp,
primary key id,
}
house {
id big int,
owner vchar(255),
price big int,
house_schema_id big int,
primary key id,
foreign key fk_house_house_schema_id (`house_schema_id`) reference `house_schema`.`id`
}
テーブルには、のhouse_schema
いくつかの物理属性が格納されますhouse
。ソフトウェアUIで、ユーザーはスキーマを選択し、[ビルド]ボタンをクリックします。家が建てられ、に保管されhouse
ます。house_schema
家がどのように建てられるべきかを説明するような他のいくつかの表があります。
シンプルなデザインでは、外部キーがうまく機能しているように見えます。ただし、ビルダーが古いと思われるスキーマを削除することを決定した場合、問題が発生します。スキーマから構築された家がすでにいくつかあり、外部キーによって削除できません。外部キーをに変更するDELETE ON CASCADE
と、それらの家はそれが構築された情報を失います。
この問題を処理するための最良のデザインパターンは何ですか?私が想像できるのは、の複製テーブルがあることですhouse_schema
。家が建てられたら、その行をhouse_schema
複製テーブルにコピーします。
ただし、。を含む複数の類似したテーブルがあるため、データベース内に多数の重複テーブルが発生しますhouse_schema
。データベースの正規化ルールに違反しているようです。
誰か良い考えがありますか?