2013-06-11 44 views
8

我對關係數據庫的瞭解更加有限,但是有沒有可用於創建包含每行中的一組的列的SQL命令?在mySQL中設置數據類型

我想創建一個2列的表。 1代表特定ID,第2代代表與這些ID相對應的組。

我讀到

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

然而,一組數據類型,需要知道可能會在你設定哪些項目。但是,我只想要有一個不重複的項目的可變數量列表。

+2

你不希望這樣,查看[數據庫規範化](http://en.wikipedia.org/wiki/Database_normalization),你可能想要一個帶有'(id,value)'的第二個表,其中第二個(第3,第4,...)值將是一個_new_行,並且具有相同的「id」,並且是新的/其他的「值」。 – Wrikken

回答

13

在第二個表格中將這些項目列表創建爲多行將會好得多。然後,你可以有你想要的,你可以對它們進行排序,搜索特定項目,確保他們獨特的列表等許多項目

另見我的回答Is storing a delimited list in a database column really that bad?

+0

這是否意味着我需要爲每個列表創建一個單獨的表格?因此,我需要每個列表中的不同名稱? – Andy

+0

是的。想想這個比喻:您還需要爲應用程序代碼中使用的每個值或數組使用不同的變量名稱! :-) –

1

沒有,有沒有任何集合的MySQL數據類型。您可以使用包含逗號分隔列表的字符串;有像FIND_IN_SET()這樣的函數可以對這些值進行操作。

但這是糟糕的數據庫設計。如果你有一個開放式的列表,你應該把它存儲在一個表中,每個值有一行。這將允許他們被索引,使搜索更快。

0

「SET」數據類型將不是一個好的選擇在這裏。
您可以使用「VARCHAR」並以CSV格式存儲值。你在應用程序級別處理它們。例如:插入my_table(id,myset)值(1,「3,4,7」);

+0

我永遠不會建議有人在數據庫列中存儲分隔列表。請參閱上面的@BillKarwin的回覆。並看到他的另一篇文章:http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad/3653574#3653574 – ajon

相關問題