Какой тип данных использовать в базе данных MySQL при вставке разделенных запятыми чисел int? - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть один общий и, вероятно, простой вопрос. При сохранении массива чисел int в базу данных MySQL (числа разделяются запятой), какой тип данных будет правильным для базы данных? Я думаю, что при выборе типа INT в качестве типа я не могу использовать запятые Поэтому я использовал «текст» в качестве типа данных, поскольку эти массивы чисел могут быть очень длинными, и я не хотел устанавливать ограничение. Но это правильный путь или плохо сохранять только цифры с запятой в текстовом поле в моей базе данных?

Спасибо за вашу помощь! phpheini

Ответы [ 5 ]

2 голосов
/ 02 декабря 2011

Лучший тип данных - это другая таблица.

Действительно, «очень плохо сохранять только числа с запятой в поле« текст »в моей базе данных»

Это будет нарушением Первая нормальная форма

Это приведет к увеличению конкуренции за данные в поле при изменении значений.

Например, предположим, что два пользователя хотят добавить новое значение в список номеров, связанных с записью.Когда таблица в 1NF обычно, оба пользователя могут вставить запись.Когда не в 1NF, одному пользователю легко потерять дополнение, потому что вы записываете несколько значений в один атрибут.

Это также очень затрудняет выполнение простых типов запросов, таких как (какие записи имеют3 в списке).Да, это можно сделать, но он не сможет использовать какие-либо индексы, потому что базы данных не индексируют то, что находится внутри поля (за исключением особых случаев, таких как тип XML SQL Server)

1 голос
/ 02 декабря 2011

Лучше всего НЕ вставлять список, разделенный запятыми, в один столбец.

Рано или поздно это вернется и укусит вас.

Я предлагаю вам прочитать о нормализации.

0 голосов
/ 02 декабря 2011

было бы лучше сериализовать массив, а затем сохранить его в базе данных, и при доступе нереализовать его можно использовать как varchar / longtext, так как тип данных зависит от объема данных в вашем массиве. Вы увидите разницу в примере ниже.

$var  = array('1'=>'a','2'=>'b');
$var2  = serialize($var);
echo $var2;
print_r(unserialize($var2));
0 голосов
/ 02 декабря 2011

Текст будет моим предложением, но он сопровождается оговоркой, что его нелегко найти или проиндексировать по определенному значению в этом списке значений.

Не зная, что это за значения и для чего они, я не могу предложить ничего другого, но вы можете рассмотреть вопрос о нормализации базы данных. Это намного лучше в долгосрочной перспективе.

0 голосов
/ 02 декабря 2011

Вам необходимо сохранить их в отдельных строках.Сохранение разделенных запятыми данных в базе данных нарушает первую нормальную форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...