質問: ### 前提・実現したいこと データベース初心者です。 キャンペーンと、そのキャンペーンに参加したいユーザーのマッチングサイトのようなものを作っています。 Webからは以下の操作が可能です。 * キャンペーンには、キャンペーンに参加できるユーザーの年齢層を設定できる * 年齢層は、以下のような10歳刻みで複数選択できる "10~19", "20~29", "30~39", "40~49", "50~59", "60~" このとき、MySQLでどうテーブル設計するべきか、アドバイスいただけると助かります。 ### 最初に考えた案 MySQLのSET型で、上記の年齢層をそのまま定義すれば良いかと考えました。 ``` create table campaigns ( id int primary key auto_increment, name varchar(20), age_range set("10~19", "20~29", "30~39", "40~49", "50~59", "60~") ); ``` しかしこれだと、あるユーザーの年齢からそのキャンペーンに参加できるかの判定するのが難しいと感じました。 ### 2番目に考えた案 以下のような年齢の下限・上限が格納されたマスタを作ることを考えました。 | id | age_from | age_to | | --- | --- | --- | | 1 | 10 | 19 | | 2 | 20 | 29 | | 3 | 30 | 39 | | 4 | 40 | 49 | これであれば、ユーザーの年齢が対象かどうか判定しやすくなります。 しかし、以下の点が気になり、これがベストなのか不安になりました。 * age_from, age_to に任意の数字が入ってしまう * 年齢層の定義が変わる可能性は低いが、ここまで柔軟にしなくてもよいのではないか。 * そもそもこの程度のことでマスタを作るべきなのかどうか このようなケースの場合、 * どちらが良いのか * どのように格納するのがよくあるパターンなのか * 他に適切な方法があるか など、教えていただけると幸いです。 よろしくお願いします。
回答: キャンペーンテーブルには id, name だけを持ち、 対象年齢テーブルに campaign_id, age_from, age_to を持つ。 てのはどうスかね。 無理してキャンペーンテーブルに複数の対象年齢を持つより 使いやすいような気がします。