Хранить массив чисел в поле базы данных
Контекст: SQL Server 2008, С#
У меня есть массив целых чисел (0-10 элементов). Данные не часто меняются, но часто извлекаются.
Я мог бы создать отдельную таблицу для хранения чисел, но по какой-то причине кажется, что это не оптимально.
Вопрос № 1: Должен ли я хранить свой массив в отдельной таблице? Просьба привести причины для того или иного пути.
Вопрос № 2: (независимо от ответа Q # 1), что такое "лучший" способ хранения int [] в поле базы данных? XML? JSON? CSV?
EDIT:
Некоторый фон: сохраняемые номера - это всего лишь некоторые коэффициенты, которые не участвуют ни в каких отношениях, и всегда используются как массив (т.е. Никогда не извлекается или не используется значение по отдельности).
Ответы
Ответ 1
"Лучший" способ хранения данных в базе данных - это способ, который наиболее благоприятствует операциям, которые будут выполняться на нем, и тот, который упрощает обслуживание. Именно это более позднее требование должно привести вас к нормализованному решению, которое означает сохранение целых чисел в таблице с отношением. Помимо упрощения обновления, следующий разработчик легче понять, что и как хранится информация.
Ответ 2
Отдельная таблица, нормализованная
Не как XML или json, а отдельные числа в отдельных строках
Независимо от того, что вы думаете, это лучший способ. Вы можете поблагодарить меня позже
Ответ 3
Храните его как массив JSON, но знайте, что теперь все обращения будут доступны для всего массива - никакие отдельные чтения/записи для определенных коэффициентов.
В нашем случае мы храним их как json-массив. Как и в вашем случае, нет никакой связи между отдельными номерами массивов - массив имеет смысл только как единое целое и как единица, с которой она имеет отношение с другими столбцами в таблице. Кстати, все остальное нормализовано. Я уподобляю этому: если вы собираетесь хранить 10-байтовый кусок, вы сохраните его в одном столбце VARBINARY (10). Вы не обманули бы его в 10 байт, сохраните каждый в столбце VARBINARY (1), а затем соедините их вместе с внешним ключом. Я имею в виду, что вы могли бы... но это не имело никакого смысла.
ВАМ, поскольку разработчику нужно будет понять, насколько "монолитным" является массив int int.
Ответ 4
Отдельной таблицей будет наиболее "нормализованный" способ сделать это. И это лучше в долгосрочной перспективе, возможно, так как вам не придется анализировать значение столбца для извлечения каждого целого числа.
Если вы хотите, вы можете использовать XML-столбец для хранения данных.
Разрешенные столбцы могут быть еще и для вас.
Если вы хотите, чтобы это было очень просто, вы могли бы просто разграничить значения: 10;2;44;1
Ответ 5
Я думаю, так как вы говорите о сервере sql, который указывает, что ваше приложение может быть управляемым данными. Если это так, я бы сохранил определенную матрицу в базе данных как отдельную таблицу с записью для каждого значения. Он будет нормализован и оптимизирован для восстановления. Даже если у вас есть только несколько значений в массиве, вам может понадобиться объединить эти данные с другими данными, которые могут быть "соединены" с вашими значениями массива. В этом случае sql оптимизируется с использованием индексов, внешних ключей и т.д. (Нормализованный).
При этом вы всегда можете скорректировать 10 значений в вашем коде и сохранить обратную поездку в БД, если вам не нужно менять значения. Это зависит от того, как работает ваше приложение и для чего этот массив будет использоваться.
Ответ 6
Я согласен со всеми остальными о том, что лучшим является отдельная нормализованная таблица. Но если вы настаиваете на том, чтобы все это в одной таблице не помещало массив в один столбец. Вместо этого создайте 10 столбцов и сохраните каждое значение массива в другом столбце. Это избавит вас от проблем синтаксического анализа и обновления.