2008-11-04 2 views
25

저는 프로젝트에서 일하고 있는데 테이블에 쉽게 열거 된 정보를 저장하고 싶습니다. MySql의 열거 형 데이터 유형은 정확히 내가 원하는 것입니다 : http://dev.mysql.com/doc/refman/5.0/en/enum.html. SQL Server 2005에 동일한 기능이 있습니까?SQL Server 2005에는 MySql의 ENUM 데이터 형식과 동일한 기능이 있습니까?

키가있는 형식 테이블에 가능한 값을 저장할 수 있다는 것을 알고 있지만 설명을 위해 다시 연결할 필요가 없습니다. 우리의 데이터베이스 표준은 정수가 아닌 필드 나 uniqueidentifier 필드를 링크 할 수 없으므로 가능한 키를 문자로 저장하는 것도 마찬가지입니다.

답변

23

이 기능이 유용합니까? http://blechie.com/wtilton/archive/2007/08/24/303.aspx

에서

테이블을 만들기 ...

MySQL은 :

ColumnName ENUM('upload', 'open', 'close', 'delete', 'edit', 'add') 
    DEFAULT 'open' 

SQL 서버 :

ColumnName varchar(10) 
    CHECK(ColumnName IN ('upload', 'open', 'close', 'delete', 'edit', 'add')) 
    DEFAULT 'open' 
+0

저에게 도움이됩니다. 남아있는 문제가 하나 있습니다. 제약 조건을 선택하지 않고 열거 형의 유효한 값을 쉽게 알 수 있습니까? 나는 거기에 없을지도 모른다는 것을 이해하고 그것에 근거한 나의 결정을 내려야 할 것입니다. –

+0

제약 조건을 "선택"하는 것이 무슨 뜻인지 잘 모르겠지만이 시스템 쿼리의 결과를 필요에 맞게 사용할 수 있습니다. sys.check_constraints에서 정의 선택 [name] = 'yourConstraintName' – Nikki9696

+0

ENUM 및 CHECK 제약 조건의 경우 시스템 테이블을 쿼리 할 수 ​​있으며 값 목록을 지정하는 전체 구문의 문자열을 얻을 수 있습니다. 그런 다음 사용 가능한 형식으로 목록을 가져 오려면 구문을 분석해야합니다. 데이터 인 것처럼 메타 데이터를 쿼리하는 것은 꽤 불편합니다. –

17

하나에 문자 MySQL의 ENUM 데이터 타입의 eristic은 문자열 자체가 아닌 값 목록에 숫자 인덱스 만 저장한다는 것입니다. 따라서 대개 스토리지 효율성이 향상됩니다. 또한 ENUM 열을 기준으로 정렬 할 때의 기본 동작은 숫자 인덱스로 정렬하므로 ENUM의 요소 순서에 따라 정렬됩니다.

Nikki9696은 CHECK 제약 조건이있는 VARCHAR 열을 사용하도록 제안합니다. 이는 허용되는 값의 특정 짧은 목록에 대한 값의 제한을 만족하지만 저장 효율성 또는 특수 정렬 순서를 시뮬레이트하지 않습니다.

두 가지 동작 모두를 얻는 한 가지 방법은 허용 된 각 문자열을 저장하는 조회 테이블에 열을 정수 외래 키로 선언하는 것입니다.

+3

제가 게시 한 것보다 훨씬 좋은 옵션입니다. – Nikki9696

+0

그레이트 대안. 고맙습니다. – Sung

+0

혼란스러워. 이것은 정확히 질문지 작성자가 그가 원하지 않는 말 (지난 단락에서)이 아닙니까? –

관련 문제