Вопрос

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

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

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

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

Вопрос 2: (Независимо от того, что такое ответ на Q#1), какой «лучший» способ хранить Int [] в поле базы данных? XML? Json? CSV?

РЕДАКТИРОВАТЬ:Некоторые предыстории: хранятся числа - это лишь некоторые коэффициенты, которые не участвуют в каких -либо отношениях и всегда используются в качестве массива (то есть никогда не получается или используется в изоляции).

Это было полезно?

Решение

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

Другие советы

Отдельная таблица, нормализованная

Не как XML или JSON, но отдельные числа в отдельных строках

Независимо от того, что вы думаете, это лучший способ. Вы можете поблагодарить меня позже

Храните его в качестве массива JSON, но знайте, что все доступ теперь будут для всего массива - никакого отдельного чтения/записи в конкретные коэффициенты.

В нашем случае мы храним их как массив JSON. Как и ваш случай, нет никаких отношений между отдельными номерами массива - массив имеет смысл только как единое целое, и в качестве единицы он имеет отношение с другими столбцами в таблице. Кстати, все остальное нормализовано. Я сравниваю это с этим: если бы вы собирались хранить 10 байтовский кусок, вы бы сохранили его упакованный в одном столбце Varbinary (10). Вы бы не сталкивали его на 10 байтов, сохраните каждый в столбце Varbinary (1), а затем скрепите их вместе с иностранным ключом. Я имею в виду, что вы могли бы - но это не имеет никакого смысла.

Вам, как разработчик, нужно понять, насколько «монолитный» этот на самом деле является множеством INT.

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

Если вы хотите, вы могли бы использовать XML столбец Чтобы сохранить данные тоже.

Редкие столбцы может быть еще одним вариантом для вас.

Если вы хотите сделать это действительно просто, вы можете просто разграничить значения: 10;2;44;1

Я думаю, что, поскольку вы говорите о SQL Server, что указывает на то, что ваше приложение может быть приложением, управляемым данными. Если это так, я бы определенно сохранил массив в базе данных в качестве отдельной таблицы с записью для каждого значения. Он будет нормализован и оптимизирован для репрессии. Даже если у вас есть только несколько значений в массиве, вам может потребоваться объединить эти данные с другими повторными данными, которые, возможно, должны быть «соединены» со значениями массива. В этом случае SQL оптимизирован с помощью индексов, иностранных ключей и т. Д. (Нормализованный).

При этом вы всегда можете жестко кодировать 10 значений в вашем коде и сохранить поездку об обратном пути в БД, если вам не нужно изменять значения. Это зависит от того, как работает ваше приложение и для чего будет использоваться этот массив.

Я согласен со всеми остальными в том, что лучше всего быть отдельной нормированной таблицей. Но если вы настаиваете на том, чтобы все это в одной таблице не помещайте массив в одном только столбце. Вместо этого создайте 10 столбцов и храните каждое значение массива в другом столбце. Это сэкономит вам проблемы с анализом и обновлением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top