2009-09-16 4 views

답변

110

그렇지 않습니다. 막연한 상당이있다 : 성능 문제는 여전히 하드 값을 사용

mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown')) 
+1

SSMS에서 수행하는 방법은 무엇입니까? – EgoPingvina

+0

@ EgoPingvina : 질문이 아니라 주석으로 질문해야합니다. – chaos

2
CREATE FUNCTION ActionState_Preassigned() 
RETURNS tinyint 
AS 
BEGIN 
    RETURN 0 
END 

GO 

CREATE FUNCTION ActionState_Unassigned() 
RETURNS tinyint 
AS 
BEGIN 
    RETURN 1 
END 

-- etc... 

.

68

가장 좋은 해결책은 가능한 값을 기본 키로 사용하는 찾아보기 테이블을 만들고 조회 테이블에 외래 키를 만드는 것입니다.

+7

위의 점검 제한 조건보다 유지 보수성 측면에서 더 나은 솔루션입니다. – HLGEM

+14

이것은 MySQL에서 Enums보다 나은 해결책입니다. –

+2

@ypercube MySQL의 경우에도 왜 더 나은가? – BenR

1

SQL Server에서 열거 형을 구현할 때이 흥미로운 접근 방식을 발견했습니다.

모든 데이터베이스 열거 형 요구 사항이 2 개의 중앙 테이블에서 충족 될 수 있다는 점을 고려하면 링크에서 아래에 언급 된 접근법은 매우 매력적입니다.

http://blog.sqlauthority.com/2010/03/22/sql-server-enumerations-in-relational-database-best-practice/

+6

이것은 "하나의 사실로 알려진 안티 패턴의 변형입니다 (조회) 테이블 ". 올바른 접근법은 각 열거 형마다 별도의 테이블을 사용하고 외래 키를 사용하는 것입니다 (조회가 필요한 경우 "순수한"열거 형의 경우는 아님). –

+2

링크 된 페이지에 대한 의견은이 대답이 지정하는 것보다 각각의 "enum"에 대해 개별 테이블을 사용하기위한 좋은 백업을 제공합니다. –

+4

대부분의 사람들이이 디자인을 제대로 이해하지 못했지만 저자가 그의 기사 "Best Practice" . –