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.