如何保持多语言数据和树结构版本化?

How to keep both multi-lingual data as well as tree structures versioned?

我目前正在开发一种工具来构建和修改书籍和文章。

这是我目前对数据库的处理方法:

有了这个,我可以像这样获取最新版本的书:

SELECT *
FROM books AS b
JOIN structure AS s ON s.book_fk = b.id
AND s.book_version_nr =
(
    SELECT MAX(s2.book_version_nr)
    FROM structure AS s2
    WHERE s2.book_fk = b.id
)
JOIN articles AS a ON a.id = s.article_fk
JOIN article_texts AS as ON as.article_fk = a.id
AND as.version_nr = s.article_version_nr
AND as.language_fk = 'languageIdFromScript'
WHERE b.id = 'bookIdFromScript'
ORDER BY s.position ASC 

但是,这意味着:

这种方法似乎不是我真正想要的,因为不可能在一本书结构中引用同一篇文章的不同语言的不同版本。此外,子选择似乎严重减慢了整个过程。

有没有什么方法可以表示这种联系并防止任何性能方面的负面影响?

考虑以下问题:有两个表用于结构:一个用于 Current 结构;每当发生变化时都会更新。另一个是结构的History

进行更改时,将当前结构从Current复制到History,然后修改Current

这会减慢插入和更新的速度,但会简化选择。

History 中的多行将指向相同的 ArticlesUsers 等。但这没关系。