表示順管理テーブル
1. 目的
出力する状況(ページ)毎にソート順を定義したい
- あるページでは新着順、あるページではカスタマイズされたソート順(人気順など)というように、出力先に応じて柔軟にソート順を指定したい
2. 課題
ソート順を保存するカラムは作りたくない
- 出力先毎にソート順保存カラムを追加していくと「ソート順を管理するカラム」が同じテーブルの中に複数存在するので、正規化が崩れる
- 運用やデータのメンテナンスも困難
- 基本的に推奨できない
ソート順の導出コストが高い
- 例えば、人気順などをオンデマンドで導出するのはクエリが複雑化したり重い処理になりやすく、パフォーマンス的に許容できないことが多い
3. 解決策
ソート順を管理するテーブルを作る
- エンティティと出力先、出力先に応じたソート順を管理する専用テーブルを追加する
4. メリット
各テーブルにソート順カラムを持つ必要が無くなる
5. デメリット
テーブル構造が複雑化する
- テーブル数が増えるので当然テーブル構造の複雑度は上昇する
珍しい設計なので混乱を生む可能性がある
6. 注意
- メリットとデメリットのトレードオフを検討して導入する必要がある
参考資料
Appendix-1 テーブル構造サンプル
CREATE TABLE sorter (
context varchar(128), -- コンテキスト(利用したいページ、場面、文脈)
item_id int, -- ソート対象のアイテムのID(識別子)/外部キー
sort_order int -- ソート順序
);
-
sort_order
に登録するデータは、別途導出→インポートするプログラムを作成し、定期バッチで定期的に実行する想定