Оптимальный способ хранения / извлечения массива в таблице - PullRequest
0 голосов
/ 17 апреля 2009

У меня в настоящее время есть таблица в MySQL, которая обычно хранит значения, но я хочу добавить поле к этой таблице, которое хранит массив значений, например, города. Должен ли я просто сохранить этот массив как CSV? Каждая строка будет нуждаться в своем собственном массиве, поэтому мне неудобно создавать новую таблицу и вставлять 2-5 строк для каждой строки, вставленной в предыдущую таблицу.

Я чувствую, что у этой ситуации должно быть имя, я просто не могу об этом думать:)

Редактировать

количество элементов - 2-5 (выборка из динамического списка городов, массив ссылается на список, который является таблицей)

Это поле не обязательно должно быть доступно для поиска, оно просто извлекается вместе с другими данными.

Ответы [ 5 ]

1 голос
/ 17 апреля 2009

Я бы предложил идею поля, содержащего значения, разделенные запятыми (или другими логическими разделителями). Просто убедитесь, что ваше поле будет достаточно большим, чтобы вместить ваш максимальный размер массива. Затем, когда вы вытаскиваете поле, должно быть легко выполнить explode () для длинной строки, используя ваш разделитель, который затем сразу же заполнит ваш массив в коде.

1 голос
/ 17 апреля 2009

«Правильным» способом было бы иметь другую таблицу, содержащую каждое значение, но поскольку вы не хотите идти по этому пути, список с разделителями должен работать. Просто убедитесь, что вы выбрали разделитель, который не будет отображаться в данных. Вы также можете хранить данные в формате XML в зависимости от того, как вы планируете взаимодействовать с данными, это может быть лучшим маршрутом.

0 голосов
/ 17 апреля 2009

Как уже упоминалось, другая таблица - это правильный путь .

Но если вы действительно не хотите этого делать (?), Если вы используете PHP с MySQL, почему бы не использовать serialize () и сохранить сериализованное значение?

0 голосов
/ 17 апреля 2009

Является ли ваше приложение PHP? Возможно, стоит изучить функции serialize и unserialize .

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

0 голосов
/ 17 апреля 2009

Может быть, слово, которое вы ищете, это "нормализовать". Например, переместите массив в отдельную таблицу, связанную с первой с помощью ключа. Это дает несколько преимуществ:

  • Размер массива может расти почти бесконечно

  • Эффективное хранение

  • Возможность поиска значений в массиве без необходимости использовать «like»

Конечно, решение о том, следует ли нормализовать эти данные, зависит от многих факторов, которые вы не упомянули, таких как количество элементов, фиксированное число или нет, нужно ли искать элементы и т. Д.

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