Подтвердить что ты не робот

Хранить массив чисел в поле базы данных

Контекст: SQL Server 2008, С#

У меня есть массив целых чисел (0-10 элементов). Данные не часто меняются, но часто извлекаются.

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

Вопрос № 1: Должен ли я хранить свой массив в отдельной таблице? Просьба привести причины для того или иного пути.

Вопрос № 2: (независимо от ответа Q # 1), что такое "лучший" способ хранения int [] в поле базы данных? XML? JSON? CSV?

EDIT: Некоторый фон: сохраняемые номера - это всего лишь некоторые коэффициенты, которые не участвуют ни в каких отношениях, и всегда используются как массив (т.е. Никогда не извлекается или не используется значение по отдельности).

4b9b3361

Ответ 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 столбцов и сохраните каждое значение массива в другом столбце. Это избавит вас от проблем синтаксического анализа и обновления.