Любой хороший метод для хранения значения множественного выбора в базе данных? - PullRequest
2 голосов
/ 20 июля 2010

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

В качестве примера рассмотрим Sql Server 2008: тип Int в sql server является 32-битным, поэтому он принимает 32 ответа, я могу использовать только 1,2,4,8,16 и т. Д. Для представления ответа, поскольку необходимо сохранить множественный выбор в одно значение и использовать побитовую операцию для их разделения.

Инт.: -2 ^ 31 (-2 147 483 648) - 2 ^ 31-1 (2 147 483 647) BigInt: от -2 ^ 63 (-9,223,372,036,854,775,808) до 2 ^ 63-1 (9,223,372,036,854,775,807)

Нет значения Int или BigInt, количество ответов до ограничения (32 или 64 или 128).

Так есть ли другой способ справиться с этой ситуацией?

Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 20 июля 2010

Вероятно, гораздо проще хранить их, используя битный тип данных в SQL Server. MSSQL сжимает несколько битовых столбцов в байты, содержащие до 8 бит. Например, если у вас есть 9-битные столбцы, это займет всего 2 байта.

Но если у вас действительно большое количество битов, тогда плохой дизайн базы данных будет просто разбивать их на отдельные столбцы, и в этом случае, возможно, вы сможете использовать двоичный тип данных фиксированной длины, к которому вы можете обращаться как байтовый массив в .NET или VB.

0 голосов
/ 20 июля 2010

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

например

Таблица Customer

customer_id    customer_name
-----------    -------------
          1             Fred
          2           Barney

Таблица Customer_Options

  option_id   customer_id    option_value
  ---------   -----------    ------------
          1             1               1
          2             1               1
          1             2               0
          2             2               1

Тип option_value является битовым, но может быть varchar или чем угодно.Таким образом, выбираемые параметры могут быть увеличены без значительного изменения схемы.

0 голосов
/ 20 июля 2010

Использование битовых полей, как предлагает Джош, будет работать, но теоретически вы все еще можете достичь пределов столбцов.

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

При вставке / обновлении основной таблицы сначала найдите строку в таблице ответов, которая соответствует выбранным. Если найден, у вас есть идентификатор, в противном случае вставьте новую комбинацию и захватите новый идентификатор. Сохраните идентификатор в основной таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...