DataBase (データベース) - opensource-workshop/connect-cms GitHub Wiki
データベースに関するコメント
チェックボックスのテーブル設計
選択肢が可変な場合は、別テーブルにする。
一つのカラムに区切り文字でデータを入れた場合、検索の完全一致が難しく、LIKE にならざるを得ない。
その場合、文字列を含む他の結果を対象とする問題がある。
また、区切り文字にしたものが登録できない。
以下のデメリットがあると考え、1カラムにパイプつなぎでやってみる。
- 一覧表示時のデータ取得が複雑になる。
- 検索時のSQLが複雑になる。
検索時にLIKE で他のものを拾わないようにするために、データの前後にもパイプを付けて、絞り込み検索では |検索値| で検索する。
データ抽出SQL
- フレームに配置されていないコンテンツ・プラグイン
SELECT contents.* FROM contents
WHERE NOT EXISTS
(SELECT frames.bucket_id FROM frames WHERE contents.bucket_id = frames.bucket_id )
- 紐づいていないコンテンツ・プラグインのbucketsデータ
SELECT buckets.* FROM buckets
WHERE buckets.plugin_name = 'contents'
AND NOT EXISTS (SELECT * FROM contents WHERE contents.bucket_id = buckets.id )