2009-09-07 4 views
1

이 항목에 대한 명확한 결정을 내릴 수 없습니다.데이터베이스에 대한 바이트 또는 텍스트 열거 형 유지

테이블에 숫자 값을 넣고 DBA에 대한 데이터베이스의 열 설명에 대한 값 정보가 있으면 정상입니다.

하지만 데이터베이스에서 이러한 숫자 값을 사용하면 유지 관리에 너무 많은 두통이 생기는 점을 나중에 지적하고 싶지 않습니다.

데이터베이스에서 이러한 열거 형 열에 대해 문자열을 사용하는 경우 특히 그렇지 않습니다. 데이터베이스에서 중복 된 문자열 반복이 많이 생성되므로 특히 그렇습니다. 중요한 성능 문제는 아니지만 테이블에 값을 표시하는 데 너무 많은 문자열이 필요하다고 생각하지는 않습니다.

장기간의 경험으로 의견을 나눌 수 있습니까? 고마워요

+0

몇 시간 전 그 질문에 답을 얻었을뿐입니다 (답변) : http://stackoverflow.com/questions/1390697/sql-table-and-c-enumeration Marc –

답변

7

표준 상황은 조회 테이블을 통해 처리됩니다. 일반적으로 이들은 간단한 구조 (종종 두 개의 열)가 있습니다.

CREATE TABLE LookupTable 
(
    code SMALLINT NOT NULL PRIMARY KEY, 
    name VARCHAR(32) NOT NULL 
); 

이름 열을 고유하게 만들거나 만들지 않을 수도 있습니다. 그런 다음 해당 유형의 값을 포함하는 테이블을 위해, 당신은 사용 : 여기

CREATE TABLE ReferencingTable 
(
    ... 
    lookup SMALLINT NOT NULL REFERENCES LookupTable, 
    ... 
); 

, 내가 이름을 가진 매우 영리하지했습니다; 'LookupTable'대신 'CustomerStatus'를 사용하고 ReferencingTable에서 CustStatus 열 이름을 사용할 수 있습니다. '코드'열에는 여러 개의 값을 사용할 수있는 값에 따라 1 바이트의 작은 정수, 작은 CHAR 필드 또는 INTEGER 유형을 선택할 수 있습니다. 때로 조회 테이블은 더욱 복잡해지고 엔티티를 설명하는 추가 속성을 얻습니다. 일반적으로 조회가 귀하의 DB에 중요한 요소를 모델링한다는 의미이며 더 이상 '조회 테이블'이 아닙니다.

이 룩업 테이블은 꽤 많지만 'OTT (One True Lookup Table)'관용구로 일반화하는 유혹에 빠져들지는 않을 것입니다. 다른 SO 질문과 웹의 다른 곳에서 설명 된 것처럼 데이터 무결성 문제가 발생합니다.

+0

LookupTable은 "LookupSTable"일 수 있습니다. EnumName 필드 – Burnsys