programing

동일한 기본 키를 참조하는 두 개의 외부 키

minimums 2023. 5. 23. 21:44
반응형

동일한 기본 키를 참조하는 두 개의 외부 키

한 테이블에 다른 테이블의 기본 키를 참조하는 외부 키가 두 개 있어도 괜찮습니까?

직원ID는 직원 테이블의 기본 키이며 타임시트 테이블에서 외부 키로 두 번 나타납니다.

다른 직원을 대신하여 타임시트를 채우는 관리자는 거의 없을 것입니다.

타임시트 테이블 필드에 'TimsheetFor'에 직원이 있습니다.프로젝트 및 'EnteredBy' 또는 'FilledBy' 필드에서 작업한 사람의 ID는 이 타임시트를 작성한 사람의 직원 ID입니다.

다음 중 올바른 옵션은 무엇입니까?

참고: 표에는 이 질문과 관련된 필드만 표시됩니다.

여기에 이미지 설명 입력

저는 옵션 1로 하겠습니다.각 외부 키 값은 관련 테이블의 다른 레코드를 참조하므로 동일한 기본 키 열을 참조하는 두 개의 외부 키 열은 다른 테이블에 있어도 괜찮습니다.

옵션 2가 효과적일 것이라고 확신하지만, 당신은 본질적으로 사이에 1대 1의 관계를 맺을 것입니다.TIMESHEET_TABLE그리고.TIMESHEET_FILLED_BY두 개의 테이블을 불필요하게 만들고 유지하기가 더 어렵습니다.

사실 둘 다라면ENTERED_BY그리고.TIMESHEET_FOR는 쌍으로 필요하며, 옵션 1을 사용하는 것이 데이터베이스 및 외부 키에 의해 자동으로 시행되기 때문에 훨씬 더 의미가 있습니다.

옵션 1은 완벽한 솔루션입니다.외부 키 제약 조건을 다음과 같이 정의할 수 있습니다.

타임시트_열에 대한 첫 번째 외부 키 제약 조건

ALTER TABLE TIMESHEETTABLE 
ADD CONSTRAINT fk_TimesheetTable_EmployeeTable
FOREIGN KEY (TIMESHEET_FOR)
REFERENCES EMPLOYEETABLE(EMPLOYEE_ID)

Entered_By 열에 대한 두 번째 외부 키 제약 조건

ALTER TABLE TIMESHEETTABLE 
ADD CONSTRAINT fk_TimesheetTable_EmployeeTable_1
FOREIGN KEY (ENTERED_BY)
REFERENCES EMPLOYEETABLE(EMPLOYEE_ID)

네, 그건 문제없습니다...다른 테이블에 있는 한 테이블의 기본 키를 외래 키로 두 번 사용할 수 있습니다.

다음과 같은 질문:

SELECT t.EMPLOYEE_ID, a.NAME as TimeSheetFor, b.NAME as EnteredBy 
FROM timesheet t
JOIN employee a ON t.timesheet_for =a.employee_id
JOIN employee b ON t.entered_by = b.employee_id

이 쿼리를 사용하면 원하는 결과를 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/11284428/two-foreign-keys-referencing-the-same-primary-key

반응형