Как сделать поле базы данных в виде массива? - PullRequest
0 голосов
/ 14 января 2010

Я хочу иметь столбец в базе данных, который может содержать несколько записей. Можно ли определить тип столбца как массив (массив фиксированного размера или некоторую динамическую коллекцию), чтобы в нем можно было хранить несколько записей.

Ответы [ 4 ]

2 голосов
/ 14 января 2010

Если вам требуется, чтобы различные значения хранились вместе в одном поле, вам, скорее всего, лучше хранить их как разделенную разделителями строку значений:

+----------------------------------+
|             PRODUCTS             |
+----------+-----------------------+
| Product  | Colors                |
+----------+-----------------------+
| Notebook | blue,red,green,orange |
+----------+-----------------------+

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

+---------------+
|    PRODUCT    |
+----+----------+
| ID | Product  |
+----+----------+
| 1  | Notebook |
+---------------+

+---------------+
|    COLORS     |
+----+----------+
| ID | Color    |
+----+----------+
| 1  | Blue     |
+---------------+
| 2  | Red      |
+---------------+
| 3  | Green    |
+---------------+

+---------------------+
|    PRODUCTCOLORS    |
+-----------+---------+
| ProductID | ColorID |
+-----------+---------+
| 1         | 1       | Notebook, Blue
+-----------+---------+
| 1         | 3       | Notebook, Green
+-----------+---------+
1 голос
/ 14 января 2010

Да, в типичном реляционном дизайне между 1 таблицей и другой будет отношение 1: N (1-ко-многим). каждая строка в первой таблице представляет коллекцию, каждая строка во второй таблице является элементом коллекции и ссылается на первую таблицу.

разделенный запятыми список, сериализация или строка в кодировке URL также является хорошим решением, как указывают другие ответы ...

0 голосов
/ 14 января 2010

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

Как указывалось выше, вы, очевидно, теряете какой-либо аспект способности управлять целостностью данных со своего уровня БД (легко).

0 голосов
/ 14 января 2010

Нет, но какой язык на стороне сервера вы используете?

Если вы используете PHP, вы можете использовать

$serializedArray = serialize($myArray);

А затем вставьте это значение в БД. Чтобы вернуть его обратно используйте unserialize();

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