Хранить несколько значений для нескольких раз в одном столбце? - PullRequest
0 голосов
/ 21 января 2019

В MySQL есть способ сохранить массив ключей / значений для одного столбца?Например, я хочу сохранить несколько (3 - 6) различных значений для времени дня, например:

12AM: 1.2
1AM: 3.0
6AM: 4.0

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

У меня может быть отдельная таблица, связанная UID, которая будет иметь несколько строк с ключом / значением, но это не будет медленным в долгосрочной перспективе, скажем, с 10миллион плюс строк данных?

1 Ответ

0 голосов
/ 21 января 2019

MySQL не поддерживает тип данных массива, хотя он поддерживает тип данных JSON в MySQL 5.7 и более поздних версиях.

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

Возможно, вы захотите найти в вашем «массиве» определенное значение. В таком случае вы будете испытывать желание использовать LIKE '%pattern%' или совпадение регулярного выражения или что-то подобное, чтобы найти определенное время суток. Эти выражения трудно или невозможно оптимизировать с помощью индексов, поэтому поиски обычно превращаются в сканирование таблиц.

Альтернативой является использование дочерней таблицы с одним datetime на строку, ссылающуюся на ваш UID. Да, это может вырасти в длинную таблицу с миллионами строк, но гораздо проще оптимизировать поиск по индексам. Поиск по индексам в таблице с миллионами строк превзойдет поиск по неиндексным таблицам при просмотре таблицы намного меньшего размера.

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

...