2013-06-11 14 views
8

リレーショナルデータベースの知識は限られていますが、各行にセットを含む列を作成するために使用できるSQLコマンドがありますか?データ型をmySQLに設定

私は2列のテーブルを作成しようとしています。特定のIDの場合は1、これらのIDに対応するセットの場合は2番目のIDです。

私はおよそ

http://dev.mysql.com/doc/refman/5.1/en/set.html

を読んしかし、セットのデータ型は、あなたのセットであるかもしれないもののアイテムを知っていることが必要です。しかし、私はただ繰り返さない項目の可変数のリストがほしいと思っています。

+2

[データベースの正規化](http://en.wikipedia.org/wiki/Database_normalization)を見て、おそらく2番目のテーブルに '(id、value)'が必要です2番目(3番目、4番目、..)の値は、同じ 'id'を持つ_new_行と、新しい/他の' value'です。 – Wrikken

答えて

13

2番目のテーブルで項目のリストを複数の行として作成する方がはるかに良いでしょう。また、その後、あなたが欲しいリストのように多くの項目を持つことができ、あなたは、それらを並べ替える特定の項目を検索し、彼らはユニークだ作ることができる、など

参照Is storing a delimited list in a database column really that bad?

+0

これは、リストごとに別々のテーブルを作成する必要があるということですか?したがって、リスト表のそれぞれに異なる名前が必要ですか? – Andy

+0

はい。この類推を考えてみましょう。アプリケーションコードで使用する値や配列ごとに異なる変数名が必要です。 :-) –

1

に私の答えいいえ、あります任意のセットのMySQLデータ型はありません。コンマ区切りリストを含む文字列を使用できます。そのような値に作用するFIND_IN_SET()のような関数があります。

しかし、これはデータベース設計が貧弱です。オープン・エンドのリストがある場合は、値ごとに1行のテーブルに格納する必要があります。これにより、索引付けが可能になり、検索が高速になります。

0

"SET"データ型はここではお勧めできません。
"VARCHAR"を使用して、値をCSV形式で保存できます。アプリケーションレベルで処理します。
例:my_table(id、myset)の値(1、 "3,4,7")へのINSERT;

+0

私は、誰かに区切られたリストをデータベース列に格納することを決して勧めません。上記の@BillKarwinの回答を参照してください。彼の他の投稿を参照してください:http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad/3653574#3653574 – ajon