2010-07-10 4 views
1

인사말,많은 확인란 입력을 데이터베이스에 삽입하는 가장 좋은 방법은 무엇입니까?

나는 거의 150 개의 체크 박스가있는 양식을 가지고 있지만 한 곳이 아니며 양식이 여러 부서로 나뉘며 각 부서에는 블록이 있으며 확인란은 그룹에 따라이 블록에 배치됩니다 여기서 네 곳의 확인란을 찾을 수 있으며 다른 곳에서는 여덟 곳, 다른 곳에서는 여덟 곳의 체크 박스를 찾을 수 있습니다.
그래서 두 개의 테이블을 하나씩 만들어 그룹을 저장하고 다른 하나는 체크 박스를 저장하고 다른 그룹은 그 그룹에 속하게했습니다. 예를 들어, 지정된 테이블에 자신의 키의 연결된 문자열로
첫 번째 저장 체크 박스 값과 직접 삽입 :

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

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 | 
    --------------------- 
    | 1 | Cat  | 
    --------------------- 

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

프로 : 전문적인 방법으로 볼 수 있으며 데이터베이스 수준의 데이터 무결성을 보장합니다.
: 확인란이 여러 개인 테이블에 대한 생성이 필요합니다. 형태.

각 체크 박스에 대해 열을 만들어야하기 때문에 bitwise를 고려하지 않았으며 30 개 이상의 체크 박스가있는 큰 그룹에는 효율적이지 않습니다. 그래서 나는 응용 프로그램에서 구현 될 방법을 선호했습니다.

제안이나 더 좋은 방법이 있다면 주저하지 말고 알려주십시오. 2, 그것은 단지 하나의 옵션이 포착 할 수 있습니다 제안 당신에게

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

으로 판단

답변

1

대단히 감사합니다, 그래서 체크 박스의 블록은 '스위트 홈'에 대한 하나의 열거 값 (1과 같이 표현 될 수있다 '농장'등).

그런 다음 다중 선택 사항 확인란은 비트 마스크를 사용하여 수행 할 수 있습니다 (너무 많은 값이있는 경우 내장 데이터베이스를 사용할 필요가 없음).

충분히 큰 열거 자/비트 마스크 값을 선택하면 (부호없는 32 비트 int는 4 백만개의 열거 자 및 32 비트 마스크를 수행함). 'Form'으로 채워지는 각 'Division'은 별도의 행이 될 수 있지만 모든 부서의 값이 같은 열이 될 수 있습니다. 이 예에서 사용자에 따라서

Surveys 
------------------------------------------ 
| ID | User | Division | Value  | 
------------------------------------------ 
| 1 | 1 | 1  |  7  | 
| 2 | 1 | 2  | 234234  | 
| 3 | 2 | 1  |  7  | 
| 4 | 2 | 2  | 23491032  | 
------------------------------------------ 

가 기입되는 형태로 각각의 실행을위한, 부문마다 분할/군/블록이며, 값이 선택된 상호 배타적 값 열거 나 배수하는 bitswap 것 중 선택.

멋진 OOP 랩핑으로 멋진 API 인터페이스와 모든 데이터를 나타내는 단일 4 열 테이블로이 작업을 유리하게 활용할 수 있습니다. 원하는 경우 ID 열을 삭제하고 User 및 Division의 복합 키를 대신 사용할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 잠시 시간을내어 확인해보십시오. – Kronass

관련 문제