我有一個數據庫設計問題,我一直在研究一段時間,但無法得到正確的答案。比方說,我們有兩個表,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
一些物理屬性。在軟件用戶界面上,用戶選擇一個模式,然後單擊「生成」按鈕。房屋建成並儲存在house
。還有其他一些表格,如house_schema
來描述如何建造房屋。
在一個簡單的設計中,一個外鍵看起來效果很好。但是,當構建者決定刪除他們認爲已過時的架構時,會產生問題。已經有一些從模式構建的房屋,並且外鍵防止它被刪除。如果我們將外鍵更改爲DELETE ON CASCADE
,那麼這些房屋會丟失它所建的信息。
什麼是最好的設計模式來處理這個問題?我可以想象的是,有一個house_schema
的重複表,一旦建成房屋,將house_schema
中的行復制到重複表中。
但是,這導致在數據庫中有很多重複的表格,因爲我有多個與house_schema
相似的表格。它似乎違反了數據庫規範化規則。
有沒有人有一個好主意?
我將模式存儲在單獨的表中,因爲它是構建房屋之前的某種配置。用戶選擇一個配置,然後建立一個房屋,現在配置變成房子的屬性。但在此之前,因爲有房子,所以這不是屬性。 –