2011-10-08 3 views
1

외래 키를 사용하지 않으면 사용할 수 있습니까? 그냥 사용하지 마십시오.데이터베이스 설계 : OK? 외래 키를 사용하지 않으시겠습니까?

예를 들어, 내 COUNTRY_STATE 테이블에 외래 키로 Country.Id가 있어야하지만 대신 CountryCode가 있습니다. CountryCode로 각 국가의 주를 얻습니다. 당신이 거기 가능한 일대 다 관계를 도입하도록 국가 코드, 고유 것이라는 보장은 어디에도 없다

COUNTRY 
-Id (PK) 
-Code 
-Name 

COUNTRY_STATE 
-Id (PK) 
-Code 
-Name 
-CountryCode 

답변

4

을 위반하고 있지 않습니다. 또한 고유 제한 조건을 참조 할 수 있습니다.

당신이 country_state 테이블의 COUNTRY_CODE를 유지하려는 경우, 당신은 그렇게 할 수 있고 여전히 유효한 국가 코드가 사용되도록 외래 키가 있습니다

ALTER TABLE country 
    ADD CONSTRAINT uq_code UNIQUE (code); 

ALTER TABLE country_state 
    ADD CONSTRAINT fk_state_country 
    FOREIGN KEY (country_code) REFERENCES country (code); 
+0

Country 테이블에서 서로 게이트 기본 키를 삭제하고 코드를 기본 키로 만들 수도 있습니다. 이러한 접근법 중 하나를 사용하면 코드가 거의 변경되지 않는다고 가정합니다. –

0

. 이는 국가 국가가 하나 이상의 국가를 가질 수 있다는 것을 의미합니다. 이는 바람직하지 않습니다.

+0

CountryCode에 고유 한 색인이 있으므로 항상 고유합니다. 사실 기본 키가 될 수 있습니다. – 001

+0

그러면 괜찮을 것입니다 ... 기본 키가되어야한다는 규칙은 없습니다. –

0

외부 키하지 않습니다 nocheck를 사용하면 쿼리 최적화 프로그램이 계획을 단순화 할 수 있습니다. 이렇게하면 쿼리 성능을 향상시키는 읽기 횟수를 줄일 수 있습니다. 행 수가 많아지면 성능에 큰 영향을줍니다.

관련 문제