2010-07-20 52 views
2

我现在知道的是使用按位和Int类型来在数据库中存储多个选择值。任何好的方法在数据库中存储多选择值?

以Sql Server 2008为例,SQL Server中的'Int'类型是32位,所以它接受32个答案,我只能用1,2,4,8,16等来表示答案,因为我需要将多重选择存储到一个值中,并使用按位操作将它们分开。

INT:-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)

无脑膜诠释或BigInt,答案的数量是有限制的(32或64或128)。

那么还有其他方法可以解决这种情况吗?

非常感谢。

回答

2

在SQL Server中使用bit data type存储这些数据可能会容易很多。 MSSQL会将多个位列压缩成包含多达8位的字节。例如,如果您有9位列,则总共需要2个字节。

但是,如果您的位数非常大,那么它只会让糟糕的数据库设计将它们分离到不同的列中,在这种情况下,您可以使用可以访问的固定长度二进制数据类型.NET或VB中的一个字节数组。

0

使用位字段作为乔希建议将工作,但你仍然可以在理论上达到列限制。

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

插入/更新主表时,首先在答案表中查找与选择相匹配的行。如果找到了您的ID,请插入新组合并获取新ID。将ID存储在主表中。

0

我建议大量的潜在选择,您创建一个单独的表与外键返回到原始表。

例如

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或任何你需要的。 通过这种方式,可以在不进行大规模模式更改的情况下增加可选择的选项。

相关问题