我有一个数据库设计问题,我已经研究了一段时间,但无法得到正确的答案。假设我们有两个表,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
。它似乎违反了数据库规范化规则。
有人有好主意吗?