2010-07-20 4 views
2

현재 알고있는 것은 데이터베이스에 다중 선택 값을 저장하기 위해 bitwise 및 Int 유형을 사용하는 것입니다.데이터베이스에 다중 선택 값을 저장하는 좋은 방법이 있습니까?

예를 들어 SQL Server 2008의 'Int'유형은 SQL Server에서 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,036854775808) 2^63-1 (9,223,372,036854775807)

없음 교인 int라는 또는 BigInt 인 경우, 대답의 수는 한도 (32 또는 64 또는 128)까지입니다.

이 상황을 해결할 다른 방법이 있습니까?

감사합니다.

답변

2

bit data type을 SQL Server에 저장하면 훨씬 쉽게 저장할 수 있습니다. MSSQL은 다중 비트 열을 최대 8 비트를 포함하는 바이트로 압축합니다. 예를 들어 9 비트 열이있는 경우 총 2 바이트를 차지합니다.

그러나 실제로 많은 비트가있는 경우 열악한 데이터베이스 디자인으로 인해 별도의 열로 분리됩니다.이 경우 고정 길이의 이진 데이터 형식을 사용하여 액세스 할 수 있습니다. .NET 또는 VB의 바이트 배열

0

Josh가 제안한대로 비트 필드를 사용하면 이론상 열 제한에 도달 할 수 있습니다.

대안으로 각 답변 조합에 대한 행이있는 별도의 표를 사용하는 것이 좋습니다. 각 행에는 고유 한 ID와 식별 할 필요가있는 방법 (예 : 쉼표로 구분 된 답변 ID 목록)을 사용하여 답변 목록이있는 varchar 열이 포함됩니다.

주 테이블을 삽입/업데이트 할 때 먼저 선택 항목과 일치하는 응답 테이블에서 행을 찾습니다. 찾은 경우 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 또는 무엇이든 될 수있다. 이렇게하면 선택 가능한 옵션을 대규모 스키마 변경없이 증가시킬 수 있습니다.

관련 문제