MySQL 열거 형 데이터 유형에 해당하는 SQL Server?


답변:


155

그렇지 않습니다. 모호한 내용이 있습니다.

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

10
유효한 값을 정의하는 테이블을 사용하고 외래 키 제약 조건을 대신 사용하지 않겠습니까?
Elaskanator

@Elaskanator 나는 이것이 직접 OP에 가장 정확하게 대답한다고 말하지만 가장 좋은 해결책은 아마도 FK + 외부 테이블 사용법 일 것입니다.
userfuser

데이터를 정규화하고 열거가 중지되었음을 분명히 알려주는 @Elaskanator에게 감사합니다.
앤드류

88

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


13
위에 표시된 점검 제한 조건보다 유지 보수성 관점에서 더 나은 솔루션입니다.
HLGEM

21
이것은 MySQL에서도 Enums보다 나은 솔루션입니다.
ypercubeᵀᴹ

2
@ypercube 왜 MySQL에 더 좋은가?
BenR

4
@BenRecord MySQL 열거 형에는 몇 가지 문제가 있습니다. MySQL의 ENUM 데이터 유형이 악한 이유 8 가지 . 나는 그것이 사악하다는 100 %에 동의하지 않지만 당신은 그것들을 사용할 때 특별한주의를 기울여야합니다.
ypercubeᵀᴹ

1
@BenR 또한 MySQL을 사용하는 엄격하지 않은 모드에서 올바르게 호출하면 잘못된 열거 형을 NULL로 삽입 할 수 있습니다. 조건에 관계없이 이전 팀은 MySQL 열거 형이 삽입 되지 않고 값 목록에 값이 지정 되지 않은 경우 실패하지 않는 문제 가있었습니다. 조회 테이블의 외래 키 제약 조건으로 인해 오류가 발생합니다. 조회 테이블이 MySQL에 더 적합하다는 데 동의합니다.
Jim Schubert


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...

성능이 중요한 경우 여전히 어려운 값을 사용하십시오.


1

SQL Server에서 열거 형을 구현하려고 할 때이 흥미로운 접근법을 찾았습니다.

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

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


8
이것은 "하나의 참 (조회) 테이블"로 알려진 안티 패턴의 변형입니다. 올바른 방법은 각 열거 형 유형에 대해 별도의 테이블을 갖고 외래 키를 사용하는 것입니다 (조회가 필요한 경우 "순수한"열거 형의 경우가 아닐 수 있음).
Branko Dimitrijevic

2
링크 된 페이지의 주석은이 답변이 지정하는 것이 아니라 각 "enum"에 대해 개별 테이블을 사용하기위한 훌륭한 백업을 제공합니다
skia.heliou

4
대부분의 사람들이이 디자인을 제대로 받아들이는 것은 꽤 재밌지 만, 저자는 그의 기사를 "Best Practice"라고 명명합니다.
underscore_d
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.