我有一个数据库设计问题,我已经研究了一段时间,但无法得到一个正确的答案.假设我们有两个表,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_schema这样的表来描述如何建造房屋.
在简单的设计中,外键看起来效果很好.但是,当构建器决定删除他们认为已过时的架构时,它会引发问题.已经有一些从架构构建的房屋,外键阻止它被删除.如果我们将外键更改为DELETE ON CASCADE,那么这些房屋将丢失它所构建的信息.
处理这个问题的最佳设计模式是什么?我可以想象有一个house_schema的重复表,一旦建立了一个房子,就将house_schema中的行复制到重复的表中.
但是,这导致数据库中有很多重复的表,因为我有多个与house_schema类似的表.它似乎违反了数据库规范化规则.
有人有个好主意吗?