現在、書籍や記事を作成したり変更したりするツールを開発中です。多言語データとツリー構造の両方をバージョン管理する方法を教えてください。
- 本は、記事が含まれており、具体的な構造を有している
- それは多言語であるため、各記事は、(それだけには持っていない)ことができますが、持っている同じブック内に複数回発生する可能性があります記事異なる言語。 (選択した言語のデータがない場合は、通知などを表示するだけです)
- 後で新しい言語を追加することができます。
- 深度/ネスティングは動的ですこちらの記事)
- 記事だけでなく、構造の両方がバージョンする必要があります(私は後に特定の状態を復元できるようにする必要があります)
は、データベースのための私の現在のアプローチです:
これで、私はg私は記事の新しいバージョンを作成した場合、私は反映するために、最新の構造を更新する必要が
- :RABこのような本の最新版:しかし、これはという
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
を意味します
- 記事を追加、削除、または移動すると、わずかな変更のために全く新しい構造バージョンを作成する必要があります(これはデータベース内の膨大な量のデータを実際に高速にし、潜在的にクエリ時間に影響する)
このアプローチは、単一のブック構造で参照される同じ記事の異なる言語の異なるバージョンを持つことができないため、私が本当に望むものではないようです。また、サブセレクトはプロセス全体を大幅に遅くしているようです。
この接続を表現する方法はありますか、パフォーマンス上の問題を回避する方法はありますか?