2014-02-09 2 views
1

VARCHAR(50) 열이 Country이라고하는 테이블이 여러 개 있다고 가정 해보십시오. 수백만 번 반복되는 다른 국가 이름이 약간 있습니다. 여기에 할 일은 dbo.Country(CountryID, CountryName)이라는 테이블을 만들고 모든 테이블을 보유하는 것입니다. CountryID 외래 키 참조.VARCHAR 열의 자동 정규화?

문제는 해당 열을 사용하여 작업을 수행 할 때마다 dbo.Country과 관련된 모든 쿼리에 참여해야한다는 것입니다.

그러나 모든 조인은 동일한 패턴을 따르는 것처럼 보이므로 내 질문은 SQL Server에서 자동으로 수행 할 수 있습니까? 예를 들어 VARCHAR처럼 보이지만 실제로 외래 키가있는 CountryID으로 저장되는 일부 테이블에 CountryName이라는 열을 지정하면 필요할 때마다 SQL Server에서 암시 적으로 JOIN을 추가 할 수 있습니다.

SQL Server 또는 다른 SQL 데이터베이스에 이러한 기능이 있습니까?

+1

_ "문제는 우리가 dbo.Country를 사용하여 쿼리를 할 때마다 해당 열을 사용하여 작업을해야한다는 것입니다."_ 오해. 국가 이름을 표시하고 싶을 때마다 가입해야합니다. 다른 어떤 목적을 위해 가입 할 필요가 없습니다. 국가 ID (ISO 3116-1을 사용하고 많은 고통을 덜어주십시오)는 이름이 데이터베이스에있는 것처럼 해당 국가를 나타냅니다. 그것은 관계의 정의입니다. – Ben

+0

@Ben 질문을 너무 길게 만들지 않도록 정교하게 설명하지는 않았지만, 내가 가진 상황은 다른 소스에서 가져온 데이터에이 데이터를 항상 연결하고 때로는 문자열 값을 약간 조작해야한다는 것입니다. 그래서 내가 조인을해야 할 때입니다. – Morad

답변

0

"자동으로"할 수 없습니다. 그러나 몇 가지 옵션이 있습니다.

하나는 자동으로 가입하지 테이블 위에 뷰를 생성하는 것입니다 :

create view v_table as 
    select t.*, c.CountryName 
    from table t join 
     country c 
     on t.countryId = c.countryId; 

다른 방법으로, Country 열거 형식 만들 수 있습니다. 그렇게하면 문자열로 액세스 할 수 있지만 정수로 저장됩니다.

관련 문제