2013-06-11 4 views
8

Мои знания реляционных баз данных более ограничены, но есть ли команда SQL, которая может использоваться для создания столбца, содержащего набор в каждой строке?Установить тип данных в mySQL

Я пытаюсь создать таблицу с 2 столбцами. 1 для конкретных идентификаторов и 2-й для наборов, соответствующих этим идентификаторам.

Я читал о

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

Однако тип набора данных требует, чтобы вы знаете, какие элементы могут быть в вашем наборе. Тем не менее, я просто хочу, чтобы список переменных номеров не повторялся.

+2

Вы не хотите этого, изучите [нормализацию базы данных] (http://en.wikipedia.org/wiki/Database_normalization), вам, вероятно, понадобится вторая таблица с '(id, value)', где значения 2-го (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. Вы обрабатываете их на уровне приложений.
Пример: INSERT в значения 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

Смежные вопросы