귀하의 질문에 대한 답변은 물리적이 아니라 논리적입니다. 비즈니스 가치에 따라 귀하가 찾는 가치가 변경 될 수 있습니다. 예를 들어 이메일 주소로 고객을 색인하는 경우 이메일 주소가 변경되면 어떻게됩니까? 분명히 이것은 모든 조회 테이블에 적용되지는 않지만 전체 응용 프로그램에서 동일한 방식으로 수행하면 코드를 간단하게 만들 수 있다는 이점이 있습니다. 모든 것이 내부에서 정수 → 정수 관계라면 커버됩니다.
Sandy에 대한 의견을 읽으십시오.이 경우 아마도 외래 키 / 조회 테이블이 아닌 Check Constraint입니다 .
create table icecream (flavour varchar(10))
go
alter table icecream add constraint ck_flavour check (flavour in ('Orange', 'Pista', 'Mango'))
go
insert into icecream (flavour) values ('Orange')
go
insert into icecream (flavour) values ('Vanilla')
go
이것을 실행하면 다음을 얻습니다.
(1 row(s) affected)
Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "ck_flavour". The conflict occurred in database "GAIUSDB", table "dbo.icecream", column 'flavour'.
The statement has been terminated.
이는 효율적인 고성능 방법이지만 새로운 특징을 추가하면 코드가 변경된다는 단점이 있습니다. 응용 프로그램에서 수행하지 않는 것이 좋습니다.이 DB에 연결하는 모든 응용 프로그램에서 수행해야하기 때문에 유효성 검사를 수행하는 데 단일 코드 경로 만 있기 때문에 가장 깨끗한 디자인입니다.