2017-11-11 2 views
0

병원 데이터베이스의 스키마를 만들고 있습니다. 나는 4 개의 테이블, 후보자 세부 사항, 병원 세부 사항, 위치 세부 사항 및 면접 세부 사항이있다. 면접 테이블에는 후보 테이블을 참조하는 외래 키가 있습니다. 하나는 위치 테이블에, 다른 하나는 병원 테이블을 참조해야합니다. 그러나 위치 ID의 조합이 가능한 튜플을 사용할 수 있음을 알았습니다. 병원 ID는 위치 테이블에서 발생하는 조합과 동일하지 않습니다 (위치 테이블에는 병원 테이블을 참조하는 외래 키가 있음). 즉, 잘못된 병원 ID 또는 위치 ID를 병원에 입력하는 것이 가능합니다. 면접 테이블. 예를 들어 면접 테이블에서 위치 ID가 01이고 병원 ID가 02 인 터플을 입력 할 수 있지만 위치 테이블로 이동하면 참조되는 위치 ID가 다른 병원 ID를 쉽게 가질 수 있습니다 (예 : 03).두 개의 서로 다른 테이블을 참조하는 복합 외래 키를 호출하십시오.

동시에 두 개의 다른 테이블을 참조하는 복합 외래 키를 만들지는 않을 것으로 생각했습니다. 그런 경우가 아니라면 문제를 해결할 수있는 유일한 방법 일뿐입니다. 인터뷰 테이블에서 병원 ID 열을 완전히 제거하면됩니까?

나는 SQL 코드를 가지고 있지 않으므로 아무런 정보가 없어도 (예 : ERR 이미지)이 질문에 대답해야만 최선을 다할 것입니다.

답변

0

짧은 대답은 : 없음, 외래 키 제약 조건은 항상 정확히 하나 부모 테이블을 참조합니다. 내가 당신의 상황을 이해하면

그러나 4 개 테이블

candidate details. id 
hospital details. id 
position details. id, hospital_id 
interview details. candidate_id, hospital_id, position_id 

이 문제는받은 위치와 병원 사이의 관계는 다른 테이블 호출을 추가 많은

간단한 방법의 EAV 많은입니다 각 병원의 모든 지위를 가지고있는 hospital_postition은 인터뷰에서 각 병원 위치를 조건에 연결합니다.

candidate details. id 
hospital details. id 
position details. id 
hospital_postition. id, hospital_id, position_id 
interview details. candidate_id, hospital_position_id 
0

적습니다.

테이블이 세 번째 정규 형식이 아니기 때문에이 문제가 발생합니다. hospital_id는 인터뷰에 의존하지 않고 위치에 따라 다르며 position_id는이 기능에 대한 KEY가 아닙니다.

스스로 인터뷰 테이블에 hospital_id를 기록 하시겠습니까? 필요한 모든 정보는 이미 위치 테이블에 저장되어 있습니다. 그 칼럼을 원했을 때 제가 생각할 수있는 유일한 이유는 그 직책의 기반이 아닌 병원에서 인터뷰를 실시한 곳일 것입니다. 그렇다면 스키마가 이미 올바르지 만 귀하의 질문은 그렇지 않다는 것을 의미합니다.

인터뷰 테이블에서 hospital_id 열을 버리면 문제가 마술처럼 사라집니다.

MySQL의 워크 벤치에서 테이블 정의를 (SQL 코드)를 얻기의 주제에

,이 시도 :

  • 마우스 오른쪽 단추로 클릭하고 스키마 브라우저
  • 선택 "SQL 편집기로 보내기"에서 테이블 이름을
  • "Create statement"를 선택하십시오.
관련 문제