何が正しいかは、データの用途によって異なりますが、これらの値を文字列に連結する際に注意すべき点がいくつかあります。たとえば、これまでに "Honda" を含むすべての行を検索したい場合 (おそらくそうするでしょう)、これはデータを保存する方法としては不適切な場合があります。
car_make、car_make_group、car_make_to_group などの追加のテーブルを作成することになるでしょう。私は置くだろう
car_make (make_id, make_desc)
------------------
1, "Toyota"
2, "Honda"
3, "Nissan"
私はビットフラグ列挙型のようにグループに番号を付けますが、それはそれほど重要ではありません..衝突しないようにグループに番号を割り当てる方法にすぎません。また、すべてが加算される (group2 + group4 = group6) という性質もあります。ただし、私は常に関連テーブルを提供しています。
car_make_group (make_group_id, make_group_desc)
------------------
1, "Toyota"
2, "Honda"
3, "Toyota, Honda"
4, "Nissan"
5, "Toyota, Nissan"
6, "Honda, Nissan"
7, "Toyota, Honda, Nissan"
最後に、クエリに役立つ関連テーブルを作成します。
car_makes_to_group (make_id, make_group_id)
------------------
1, 1
1, 3
1, 5
1, 7
2, 2
2, 3
2, 6
2, 7
3, 4
3, 5
3, 6
3, 7
複数のテーブルを使用すると、将来の変更に柔軟に対応できます。たとえば、JSON を使用する必要があることに後から気付くことができ、make_group_desc を変更してコンマ区切りの文字列ではなく JSON 文字列を保持することができます。
「Toyota」を含むすべての行を検索するアドホック クエリを実行することもできます。
Select m.make_id, m.make_desc, g.make_group_id, g.make_group_desc
FROM car_make_to_group t
INNER JOIN car_make_group g
ON (t.make_group_id = g.make_group_id)
INNER JOIN car_make m
ON (t.make_id = m.make_id)
WHERE m.make_desc = "Toyota"