0

階層ストレージに隣接リスト モデルを使用するテーブルがあります。したがって、この表で最も関連性の高い列は次のとおりです。

ItemId // is auto_increment
ParentId
Level
ParentTrail // in the form of "parentId/../parentId/itemId"

次に、挿入前にティガーを作成し、列Levelとにデータを入力しParentTrailました。auto_increment最後の列には現在のアイテムの ID も含まれているため、挿入前のトリガーでは列を使用できないため、トリガーでトリックを使用する必要がありました。だから私はテーブルからその値を取得しinformation_schema.tablesます。

アイテムがその親を変更したときにアイテムとその子孫を更新する更新トリガーを作成しようとするまで、すべて正常に機能します(ParentId変更されました)。しかし、更新トリガー内でテーブルを更新できません。私ができることは、現在のレコードの値を変更することだけですが、他のレコードの値は変更できません。

階層データに別のテーブルを使用することもできますが、それは、これら 2 つのテーブルを結合するビュー (1:1 の関係) も作成する必要があることを意味し、これをできるだけ避けたいと考えています。

これらすべてを同じテーブルに配置して、これらのフィールド (LevelおよびParetTrail) がトリガーを使用して自動的に設定/更新されるようにする方法はありますか?

4

1 に答える 1

2

これは可能のように思えますが、重い文字列のマッチングなどが必要になるため、深く掘り下げたくありません。

データベース モデルを少し変更して入れ子になったセットを実装する(ページを下にスクロールする) 場合は、トリガーで左右の値を更新することで簡単に実行できます。

于 2009-12-15T16:00:27.483 に答える