2010-07-10 75 views
1

問候,將多個複選框輸入插入數據庫的最佳方式是什麼?

我有一個表格,它有近150個複選框,但它們不在一個地方,表格分爲多個部門,每個部門都有塊,複選框根據他們的組放在這些塊中 在這裏你可以找到四個複選框在這個地方,八個在其他和其他30個,所以繼續下去。
所以我做了兩個表來存儲組和其他存儲複選框以及它們屬於哪個組。

FormBlocks 
    -------------------------- 
    | ID |  key  | 
    -------------------------- 
    | 1 | property_type | 
    | 2 | providors | 
    -------------------------- 

BlocksCheckBoxes 
    ------------------------------------------------ 
    | ID |  Label | Key | FormBlockId | 
    ------------------------------------------------ 
    | 1 | Sweet Home | home |  1  | 
    | 2 |  Farm  | farm |  1  | 
    | 3 | Invst Bank | bank |  2  | 
    | 4 | Constructor | constr |  2  | 
    ------------------------------------------------ 

我有自己的價值觀存儲兩種方法:
第一個店的複選框值作爲其鍵的連接字符串,然後直接插入到指定的表,例如:

UserProperties 
    ---------------------------------------- 
    | ID | Customer | PropertiesType | 
    ---------------------------------------- 
    | 1 | Cat  |  home,farm | 
    ---------------------------------------- 

優點:非常容易實現,我需要的僅僅是添加一列,而且您準備好了,理論上它更快
缺點:會丟失數據完整性的分貝水平,這將取決於應用程序級別(我想我能活那麼)

我創建的每個塊表的第二種方法,如:

UserProperties 
    --------------------- 
    | ID | Customer | 
    --------------------- 
    | 1 | Cat  | 
    --------------------- 

UserPropertiesTypes 
    -------------------------------------- 
    | ID | CustomerId | CheckBoxId | 
    -------------------------------------- 
    | 1 |  1  |  1  | 
    -------------------------------------- 
    | 1 |  1  |  2  | 
    -------------------------------------- 

利弊:我認爲它是專業的方式,並將確保在db級的數據完整性
缺點:我需要爲複選框組中的每個部分創建表,這是開發中的一個頭痛問題,特別是如果您有多個組形成。

我沒有考慮按位,因爲我將不得不爲每個複選框創建一個列,並且我發現它對於擁有超過30個複選框的大組不是有效的。所以我寧願做出一種方式,將在應用程序中執行

如果您有任何建議或更好的方法來做到這一點,請不要猶豫,告訴。 非常感謝您

回答

1

通過

BlocksCheckBoxes 
------------------------------------------------ 
| ID |  Label | Key | FormBlockId | 
------------------------------------------------ 
| 1 | Sweet Home | home |  1  | 
| 2 |  Farm  | farm |  1  | 
| 3 | Invst Bank | bank |  2  | 
| 4 | Constructor | constr |  2  | 
------------------------------------------------ 

來看這將意味着只有一個選項可挑,所以複選框此塊可以表示爲一個單一的枚舉值(1爲「甜蜜的家」,2 '農場'等)。

然後,可以使用位掩碼完成多項選擇複選框(如果值太多,則不必使用內置數據庫)。

如果你選擇一個足夠大的枚舉器/位掩碼值(一個無符號的32位int將執行4百萬枚枚舉器和32位掩碼)。每個填入「表格」的「分部」都可以是單獨的一行 - 但所有分部的值都是相同的。

Surveys 
------------------------------------------ 
| ID | User | Division | Value  | 
------------------------------------------ 
| 1 | 1 | 1  |  7  | 
| 2 | 1 | 2  | 234234  | 
| 3 | 2 | 1  |  7  | 
| 4 | 2 | 2  | 23491032  | 
------------------------------------------ 
在這個例子中用戶

所以是用於被填充在表單的每個運行,司是針對每個分割/組/塊和值要麼是爲所選擇的相互排斥的值枚舉或多個一個比特交換選擇。

藉助一些巧妙的OOP封裝,您可以使用一個漂亮的API接口和代表您所有數據的單個4列表使這項工作成爲您的優勢。如果您願意,可以刪除ID列,並使用用戶和分部的組合鍵代替。

+0

非常感謝您的回答,請花時間檢查一下。 – Kronass 2010-07-10 14:11:57

相關問題