2013-02-07 3 views
2

동물과 직원 등을 추적하기 위해 동물원에서 사용할 데이터베이스를 만들어야합니다. 도움이 필요한 유일한 것은 기록에 사용되는 서비스 테이블입니다 예방 접종이나 건강 검진과 같이 동물에서 수행되는 서비스. 기록해야 할 정보는 서비스를 수행 한 직원 (각 서비스에 대해 한 명의 직원 만 책임이 있다고 가정), 서비스중인 동물, 수행 된 서비스 및 수행 된 날짜/시간입니다.5 필드 합성 PK 대 대리 PK

내 주요 문제는 첫 번째 테이블에 표시된 복합 PK와 두 번째 테이블에 표시된 서로 게이트 PK 중 하나를 선택하는 것입니다. 디자인이 가장 적합하고 각 접근법의 장단점에 대한 의견을 나에게 줄 수 있습니까?

미리 도움을 청하십시오.

+-----------------------+ 
| Service    |      
+-----------------------+ 
| (PK)(FK1) animal_id | 
| (PK)(FK2) employee_id | 
| (PK) service_type  | 
| (PK) date    | 
| (PK) time    | 
+-----------------------+ 

+-------------------+ 
| Service   |      
+-------------------+ 
| (PK) service_id | 
| (FK1) animal_id | 
| (FK2) employee_id | 
| service_type  | 
| datetime   | 
+-------------------+ 

답변

1

먼저 날짜와 시간을 두 개의 열로 구분하지 마십시오. 단일 열 "service_time"을 호출하십시오.

열 {animal_id, employee_id입니다, 서비스 _, service_time}의 집합 행을 고유하게 식별하는 경우

, 당신 해야 관계없이 서로 게이트 키를 사용하기로 결정 여부에 열이 세트에 고유 제한 조건이있다. 서로 게이트 키를 사용하지 않으면 해당 제약 조건은 대개 primary key으로 선언됩니다. 의 경우 대리 키를 사용하면 해당 제약 조건은 일반적으로 unique으로 선언되고 해당 집합의 각 열에는 개별 not null 제약 조건이 지정됩니다.

에 대한 외래 키 참조가있는 테이블이없는 경우입니다. 추가 열을 대리 키로 만드는 것은 전혀 의미가 없습니다. 개인적으로이 테이블에도 대리 키를 사용하지 않겠습니다. 조인을 작성하는 법을 알고 있습니다. 어쨌든 대부분의 그래픽 쿼리 도구가 참여할 것입니다.