Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 有什么好方法可以在数据库中存储多个选择值吗?_Database_Selection - Fatal编程技术网

Database 有什么好方法可以在数据库中存储多个选择值吗?

Database 有什么好方法可以在数据库中存储多个选择值吗?,database,selection,Database,Selection,我目前知道的是,使用按位和Int类型在数据库中存储多个选择值 以Sql Server 2008为例,Sql Server中的“Int”类型为32位,因此它接受32个答案,我只能使用1、2、4、8、16等来表示答案,因为我需要将多个选择存储到一个值中,并使用逐位操作来分隔它们 内部:-2^31(-2147483648)到2^31-1(2147483647) BigInt:-2^63(-9223372036854775808)到2^63-1(9223372036854775807) 无论是Int还是

我目前知道的是,使用按位和Int类型在数据库中存储多个选择值

以Sql Server 2008为例,Sql Server中的“Int”类型为32位,因此它接受32个答案,我只能使用1、2、4、8、16等来表示答案,因为我需要将多个选择存储到一个值中,并使用逐位操作来分隔它们

内部:-2^31(-2147483648)到2^31-1(2147483647) BigInt:-2^63(-9223372036854775808)到2^63-1(9223372036854775807)

无论是Int还是BigInt,答案的数量都是有限制的(32或64或128)

那么有没有其他办法来处理这种情况呢


非常感谢。

使用SQL Server存储这些信息可能会容易得多。MSSQL将多个位列压缩为最多包含8位的字节。例如,如果您有9位列,那么它将总共占用2个字节


但是如果你有大量的位,那么将它们分成单独的列只会导致糟糕的数据库设计,在这种情况下,也许你可以使用一种固定长度的二进制数据类型,你可以在.NET或VB中作为字节数组来访问它。

按照Josh的建议使用位字段就行了,但理论上你仍然可以达到列的极限

另一种选择是有一个单独的表,每个答案组合有一行。每一行将包含一个唯一的ID和一个varchar列,其中包含一个答案列表,使用您需要的任何方法来识别它们,例如,答案ID的逗号分隔列表


插入/更新主表时,首先在应答表中查找与所选内容匹配的行。如果发现您有ID,则插入新组合并获取新ID。将ID存储在主表中。

我建议您创建一个单独的表,将外键返回到原始表

e、 g

客户

customer_id    customer_name
-----------    -------------
          1             Fred
          2           Barney
Customer\u选项

  option_id   customer_id    option_value
  ---------   -----------    ------------
          1             1               1
          2             1               1
          1             2               0
          2             2               1
选项\u值的类型为bit,但可以是varchar或任何您需要的类型。
通过这种方式,可以增加可选选项,而无需大量更改模式