문제

비슷한 질문이있을 수 있지만 안내를 위해 충분히 가까운 질문을 찾을 수 없었습니다.

이 사양을 감안할 때

Site
---------------------------
SiteID      int    identity
Name        varchar(50)

Series
---------------------
SiteID      int
SeriesCode  varchar(6)
...
--SeriesCode will be unique for every unique SiteID

Episode
----------------------
SiteID      int
SeriesCode  varchar(6)
EpisodeCode varchar(10)
...

나의 제안 된 설계/구현은 다음과 같습니다

Site
----------------------------
SiteID      int     identity
Name        varchar(50)


Series
-------------------------------------------
SeriesID    int     identity, surrogate key
SiteID      int         natural key
SeriesCode  varchar(6)  natural key
UNIQUE(SiteID, SeriesCode)
...

Episode
-------------------------------------------
EpisodeID   int     identity, surrogate key
SeriesID    int     foreign key
EpisodeCode varchar(6)  natural key
...

이것에 문제가 있습니까? SeriesId 대리를 여기에서 외국 키로해도 괜찮습니까? 발생할 수있는 명백한 문제가 없는지 확실하지 않습니다. 아니면 복합 자연 키 (SiteId+SeriesCode / SiteId+Eppodecode)를 사용하는 것이 더 낫습니까? 본질적으로 시리즈 테이블에서 에피소드 테이블을 분리하고 나에게 맞지 않습니다.

추가 가치는 Seriescode 가이 테이블을 채울 원시 입력 데이터에서 'ABCD-1'과 'ABCD-1NMO9'와 같은 에피소드 코드처럼 보이므로 변경할 수있는 또 다른 사항이라는 것입니다.

*: "Virtual"외국 키, 우리가 사용해서는 안되는 고등학교에 의해 이전에 결정 되었기 때문에 실제 외국 열쇠

도움이 되었습니까?

해결책

예, 모두 괜찮아 보입니다. 내가 할 수있는 유일한 (사소한) 포인트는 에피소드에 매달려있는 또 다른 4 번째 자식 테이블이 없다면 에피소드에서 에피소드를 필요로하지 않을 것입니다. 에피소드에서 에피소드에서 행을 찾을 수있는 단일 속성 자연 키입니다. 물론 그대로 두는 것은 해로운 일이 아니지만, 일반적으로 아동 테이블에서 FK의 대상 역할을하기 위해 대리 키를 추가하고 모든 테이블에 Narural Key를 추가하여 중복 데이터 행을 촉구하고 제어하려고 노력합니다. 따라서 테이블에 FK가 참조하는 다른 테이블이 없다면 (그리고 절대하지 않을 것입니다) 때때로 대리 키를 포함시키지 않습니다.

다른 팁

"가상"외국 키 란 무엇입니까? 고등학교는 외국의 주요 제약을 사용하지 않기로 결정 했습니까? 이 경우 외국 키를 전혀 사용하지 않습니다. 당신은 단지 척하고 있습니다.

그리고 에피소드는 엔티티에 가장 적합한 선택입니까? 실제로 쇼 나 팟 캐스트 등을 의미하지 않으며 지금은 항상 시리즈의 일부가 되나요? 그렇다면 미래에 그 변화가 있을까요? 에피소드는 결국 시리즈 외부에서 쇼를 포괄하기 위해 남용 될까요? 이 경우 시리즈를 통해 사이트에 에피소드를 묶는 것이 당신을 괴롭히기 위해 돌아올 수 있습니다.

이 모든 것을 감안할 때, 당신이 그 런트라고 가정하면 아마도 그것을 바꿀 수 없을 것입니다. 내가 당신이라면 가능한 한 자연 키를 사용하여 더 안전하다고 느낍니다. 외국의 주요 제약 조건이 없으면 잘못된 데이터를 더 쉽게 인식 할 수 있으며, 나중에 자연 키를 사용하면 더 쉬운 시리즈 코드 = '빈'속임수에 의지해야한다면 나중에 시리즈를 사용해야합니다.

나의 제안:

사용 가능할 때마다 기본 키로 자연/비즈니스 다음 3 가지 상황을 제외하고 :

  1. 자연/비즈니스 키는입니다 알려지지 않은 삽입 순간
  2. 자연/비즈니스 키는입니다 안좋다 (독특하지 않으며 자주 바꿀 책임이 있습니다)
  3. 자연/비즈니스 키는 복합재입니다 3 개 이상의 열 그리고 테이블에는 어린이 테이블이 있습니다

상황 1과 2 대리 키는입니다 필요한.

상황 3에서는 대리 키가 강력합니다 추천.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top