次のシナリオに対処するためのアイデアはありますか?
私は、公開された階層データを格納する SQL システムを持っています。データがパブリッシュされると、元の階層を編集することはできず、パブリッシュされるときに新しいドラフト階層に変更を加える必要があります。
例として、階層を格納するためにそれ自体を参照する従業員のテーブルがあるとします。
- 従業員
- ID
- Unique_Employee_Id (階層全体で変更を追跡できるようにするため)
- 名前
- 親ID
現在公開されている次の構造を使用します。
ボブ (ID: 1、ParentId: null)
- ジョン (ID: 2、ParentId: 1)
- サラ (ID: 3、ParentId: 1)
今、新しいノードを追加したいので、現在行っていることは、階層を複製することであり、すべての変更がこの新しい階層に次のように適用されます。
ボブ (ID: 5、ParentId: null)
- ジョン (ID: 6、ParentId: 5)
- サラ (ID: 7、ParentId: 5)
- ケビン (ID: 8、ParentId: 5)
私の懸念は、階層が最大 2000 ノード以上になる可能性があることを知っていることです。実際には、これらの Employee ノードのそれぞれにぶら下がっているテーブルがさらに多くあり、これらもコピーする必要があり、更新を実行するときにパフォーマンスの問題が発生し始めます。階層に
リスト内の 1 つの項目のテキストを少し変更すると、階層全体とそれに関連するすべてが複製されます。
私は現在、リビジョン管理タイプの問題に取り組んでいると考えていますが、それを実装する方法がわかりません。
編集:
クローンが発生している理由を詳しく説明すると、ドラフトと以前に公開された階層の両方をいつでも表示できるため、既存の公開された階層に新しいノードを追加できず、新しいバージョンの階層に追加する必要があります。また、同じ理由で、公開された階層に属するノードを編集できません。
現在、機能するクローン方法を実装していますが、スケーラビリティに懸念があるため、変更を加えるために階層でディープ クローンを実行せずに上記の要件を満たす代替設計があるかどうかを知りたいと考えています。そのようなソリューションの。
For example source control systems do not store complete copies of a project for every change that is made but can recreate document hierarchy at any given change set and I am wondering if there is a similar pattern to this I could implement in SQL that would perform better then a deep clone.