我在表格中有版本逻辑。因此,每个表都包含' is_deleted'和'版本'领域。 ('版本'字段引用所有版本的单个表格)
table1(id, field1_1, field1_2, is_deleted, version[fk to versions.id])
table2(id, field2_1, field2_2, table1_id, is_deleted, version[fk to versions.id])
versions(id, main_version)
当我从db获取记录时,我为每个引用表和表本身使用where子句。类似的东西:
SELECT * FROM table1 AS t1
WHERE (
(
(t1.id, t1."version") IN
(SELECT sub_t1.id, max(sub_t1."version") FROM table AS sub_t1 GROUP by sub_t1.id)
)
AND t1.is_deleted IS FALSE
)
对于MySQL,您可以更改' is_deleted'的条件到
is_deleted = 0
现在,我正在添加新表,我想使用外键,但外键只能引用唯一列,但id不是唯一的(它是通过版本保存的),我不能使用复杂密钥,因为仅在smth更改时才创建新版本,仅用于该记录。
我应该省略FK还是应该为每个版本化表添加只有一个列ID的附加表?添加这样的表会提供除数据完整性之外的一些好处吗?添加这样的表会使逻辑变得更复杂。
所以,我应该不受影响地生活或者像这样生活:
table1_ids(id)
table1_versions(id, table1_id[fk to table1_ids.id], ...)
table2_versions(id, ..., table1_id[fk to table1_ids.id],...)
table2_ids(id)
答案 0 :(得分:1)
您是否可以为每个版本创建架构? 这将是更清洁的解决方案。