動機
数年前に電子書籍サービスで二次創作、三次創作、、、とforkしていく機能を作る必要がありました。 親子関係を記録するテーブルのカラムに親のbook_idを保持していれば、自分の親と子供は簡単に取れますが、一族を全部取得したいという要望も出てくるかもしれない。
その場合、サブクエリで再帰的に〜は明らかに悪手。
で、ディレクトリ構造と一緒で、パスで表現すればいいな、と考えました。
pathカラムを追加
pathカラムを追加して、そこにbook_idを/で連結した値を格納。
"/1386/1521/1777"の場合、book_idが1777の本についてのfork情報で、1521が親で、さらにその親が1386。
メリット
パス形式にすると、自分の子孫レコードをパス同士の前方一致で見つけることができる。
index付きでlike検索が使えます。
0 件のコメント:
コメントを投稿