2010-07-20 51 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或任何你需要的。 通過這種方式,可以在不進行大規模模式更改的情況下增加可選擇的選項。

相關問題