[sql] varchar () 열을 특정 값으로 제한 하시겠습니까?

예를 들어 MS SQL Server 2008의 varchar 열에 대해 4 개의 고유 값을 지정하는 방법이 있습니까?

예를 들어 가능한 값으로 ‘매일’, ‘주간’, ‘월간’, ‘연간’만 허용하는 빈도 (varchar)라는 열이 필요합니다.

테이블을 만들 때 SQL Server Management Studio 내에서 설정할 수 있습니까?



답변

check constraint값을 제한하는 해당 열에 대한 추가를 이미 살펴 보셨습니까 ? 다음과 같은 것 :

CREATE TABLE SomeTable
(
   Id int NOT NULL,
   Frequency varchar(200),
   CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)


답변

검사 제약을 원합니다 .

CHECK 제약 조건은 다른 열의 데이터를 기반으로하지 않는 논리식에서 유효한 값을 결정합니다. 예를 들어 급여 열의 값 범위는 $ 15,000에서 $ 100,000 사이의 데이터 만 허용하는 CHECK 제약 조건을 만들어 제한 할 수 있습니다. 이것은 급여가 정규 급여 범위를 넘어서 입력되는 것을 방지합니다.

다음과 같은 것을 원합니다.

ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency
    CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))

위의 링크에 설명 된대로 스칼라 함수를 사용하여 검사 제약 조건을 구현할 수도 있습니다.


답변

개인적으로 나는 그것을 tinyint로 코딩하고 :

  • 둘 중 하나 : 클라이언트에서 텍스트로 변경하고 1과 4 사이의 제약 조건을 확인하십시오.
  • 또는 : 외래 키가있는 조회 테이블 사용

원인:

  • 텍스트를 저장하는 데 평균 8 바이트, tinyint의 경우 1 바이트가 걸립니다. 수백만 행 이상이 차이를 만들 것입니다.

  • 데이터 정렬은 어떻습니까? “Daily”는 “DAILY”와 동일합니까? 이러한 종류의 비교를 수행하려면 리소스가 필요합니다.

  • 마지막으로 “격주”또는 “매시간”을 추가하려면 어떻게해야합니까? 조회 테이블에 새 행을 추가 할 수있을 때 스키마 변경이 필요합니다.


답변

테이블을 편집 할 때
마우스 오른쪽 버튼을 클릭-> 제약 조건 확인-> 추가-> Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly')표현식 필드에 입력하고 (이름) 필드에 좋은 제약 이름을 입력합니다.
완료되었습니다.


답변