1

엔티티가있는 곳의 ER 모델 구현 : 교사, 학생, 논문 및 관계 : 게시, 권고. 교사와 학생 모두 종이를 출판 할 수 있지만 교사 만 종이를 조언 할 수 있습니다. 나는 학생과 교사 모두를위한 출판 관계를 복제해야합니까, 아니면 교사와 학생 사이에 관계가없는 3 가지 관계처럼 보이게 할 수 있습니까?두 엔티티가 관계가없는 세 엔티티와의 관계 설계하기

+0

그런 데이터베이스를 구현하려고하면 Papers 테이블에 교사와 학생의 두 개의 외래 키가 포함됩니까? – Menderft

+0

규칙을 더 잘 정의해야합니다. 한 명의 선생님이나 여러 명의 선생님이 종이를 줄 수 있습니까? 선생님이 학생이나 서류 만 조언합니까? 교사가 발표 한 논문에도 교사가 조언을 구합니까? 논문에는 여러 출판사가 있습니다 (실제로는 학술지에 많은 이름이 있습니다). – Brian

+0

@Brian 예, 규칙을 더 잘 정의해야합니다. 많은 학생들과 동시에 많은 교사와 많은 조언자가 논문을 발표 할 수 있습니다. – Menderft

답변

1

그것은 당신이 좋아하는 모델 수 같은 소리 :

기여 유형이 열거 (출판사, 고문)와 유사하게 기여 형이다
student(student_id, name, etc) 
teacher(teacher_id, name, etc) 
paper(paper_id, title, text, etc) 
contributor(contributor_id, paper_id, contribution_type, contributor_type) 

가 열거 (교사, 학생)입니다 ... 또는 논리 값 is_publisher, is_adviser.

단점은 외래 키가 학생/교사에게 기여하지 못하며 교사가 고문으로부터 엄격한 제약을받지 않는다는 것입니다. 테이블 어드바이저 (teacher_id, paper_id)는 어드바이저에 대한 제약 조건을 허용하지만 학생 ID에 제약 조건이나 외래 키는 허용하지 않습니다.

또 다른 옵션으로 그것을 깰 수 있습니다 : 의도 한 모델로 데이터베이스를 제약 완전 수,하지만 어떤 상황에서 쿼리하는 것이 더 어려울 수

teacher_contribution(teacher_id, paper_id, is_adviser) 
student_contribution(student_id, paper_id) 

.

임의로 허용됩니다. 특정 응용 프로그램과 데이터를 쿼리하는 방법에 어느 정도 좌우됩니다.

+0

나는 ('is_advisor'와 같은 역할 판별 자 칼럼에서 어떤 로직을 수행하더라도) DRI를 더 쉽게 만들어주기 때문에 대부분의 작업에서 두 ​​번째 접근법을 선호합니다. 뷰는 종종 "이 쿼리가 더 쉬워 지도록 단일 링크 테이블을 사용하고 싶습니다."상황을 처리 할 수 ​​있습니다. – user2864740

+0

나는 더 멀리 가서 각각의 PERSON을 호출하는 경향이있다. 그런 다음 역할 열거 형과 PERSON_PAPER 연관이있다. – Randy

+0

@Randy 나는 "other"측면에서 person 링크를 갖는 경향이있다. 학생과 교사는 여전히 모든 사람이 될 수 있습니다. 그 제안은 여기서 좋은 것처럼 보이지만, 사람이 더 이상 학생이 아니면 어떻게됩니까? 그들은 * 아직도 * 종이를 저작했습니다. (주로 "스냅 샷"데이터 세트를 다룹니다.) – user2864740