我目前所知道的是使用bitwise和Int类型在Database中存储多个选择值。
以Sql Server 2008为例,sql server中的'Int'类型是32bit,所以它接受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)
没有母校Int或BigInt,答案的数量是有限制的(32或64或128)。
还有其他方法可以解决这种情况吗?
非常感谢。
答案 0 :(得分:2)
使用SQL Server中的bit data type存储它们可能要容易得多。 MSSQL会将多个位列压缩为最多包含8位的字节。例如,如果您有9位列,则总共占用2个字节。
但是如果你有非常多的位,那么它只会导致糟糕的数据库设计将它们分成不同的列,在这种情况下你可以使用一个固定长度的二进制数据类型,你可以访问它.NET或VB中的字节数组。
答案 1 :(得分:0)
使用Josh建议的位字段可以工作,但理论上你仍然可以达到列限制。
另一种方法是拥有一个单独的表,每个答案组合都有一行。每行包含一个唯一的ID,varchar列包含一个答案列表,使用您需要的任何方法来识别它们 - 例如以逗号分隔的答案ID列表。
插入/更新主表时,首先在答案表中查找与选择匹配的行。如果发现您有ID,则插入新组合并获取新ID。将ID存储在主表中。
答案 2 :(得分:0)
我建议您进行更多的潜在选择,然后使用外键创建一个单独的表回原始表。
e.g。
表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或您需要的任何内容。
通过这种方式,可以在不进行大量模式更改的情况下增加可选选项。