Хранение массива целочисленных значений в SQL Server

Я хочу сохранить массив целочисленных значений в таблице базы данных SQL (SQLServer 2005), если это возможно, используя один столбец.

целочисленный массив будет иметь длину 7560 значений.

Я использую objectdatasource, тип данных должен быть совместим с сгенерированными параметрами tableadapter.

спасибо за помощь :)

4 ответов


У вас есть по крайней мере два варианта:

  • сохранить как разделенный запятыми список значений.
  • используйте отдельную таблицу и храните по одному значению в строке с внешним ключом, указывающим на вашу таблицу.

Если вы хотите нормализовать вашу базу данных, вы должны принять второй вариант.


сделайте это правильно: 1NF не предусматривает повторения значений. Каждый элемент в предлагаемом массиве 7560 элементов принадлежит отдельной строке.

ставя каждый элемент в отдельной строке, вы даете СУРБД шанс сделать вещи он не может сделать иначе, например: вычисления статистики, и проверить каждый элемент придерживается правила домена, вычислите разницу между двумя наборами, рассчитывать/подбирать делюсь некоторыми характеристиками.

Я закончу с миллионами строк (возможно более 50 миллионов). Я не уверен, что база данных может справиться с этим без проблем с производительностью.

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


только если вы должны! Вы можете легко создать другую таблицу, которая содержит внешний ключ к таблице и столбец int.

Если вы настаиваете на сохранении его в SQL Server в качестве столбца, вы должны использовать тип столбца изображения или VARBINARY(MAX), так как длина данных превышает 8K. Это сохранит каждый int как 4-байтовое двоичное значение.

Что такое ObjectDataSource?


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

Привет