저는 데이터베이스 프로젝트를위한 모델링을하고 있으며, 전제 조건을 수립하기 위해 course
테이블을 조인하여 많은 관계를 유지했습니다.많은 방법으로 많은 조인 테이블이 자기 자신과 합류 할 때 중복되는 것을 막을 수 있습니다.
CREATE TABLE course_prereqs (
course_id INT NOT NULL,
prereq_id INT NOT NULL,
PRIMARY KEY (course_id, prereq_id),
FOREIGN KEY (course_id) REFERENCES course (course_id),
FOREIGN KEY (prereq_id) REFERENCES course (course_id)
)
은 내가 궁금하면 간단하지만 순환 의존성을 일으킬 것 때문에 대부분의 사용자 친화적 인 방법으로 당신이 테이블에 (1, 2), and (2, 1)
있는 전제 조건을 모두 방지 할 수 있습니다 : 같은 테이블 (간체)가 보인다.
내가 상응하는 뭔가를 생각
-- in a trigger though since MySQL doesn't have check
CHECK (course_id < prereq_id)
에 있지만이 작동하는 동안 최종 사용자가 항상 course_id
항상 prereq_id
보다 적을 수 있는지 확인하는 것이 잠재적으로 성가신 될 수 같은 느낌.
더 좋은 방법이 있습니까, 아니면 course_id
이 항상 더 작은 지 확인해야한다는 불편 함을 과소 평가합니까?
:하지만 두 경우 모두
, 당신은 두 개의 인덱스를해야합니까? 두 과목이 서로 선행 할 수 없다는 사실을 시행하는 것이 데이터베이스의 임무가 아닌가? 예를 들어, 다른 대답의 select 문이 0이 아닌 경우 오류가 발생하는 트리거입니다. – m0meni
@ AR7 - 데이터베이스가 "필수"에서 "과정"을 알 수 없습니다. 따라서 # 1이 실제로 # 2의 전제 조건인데 첫 번째로 course = 1을 삽입하면 선행 조건 = 2이므로 잡히지 않습니다. 나중에 필수 조건 = 1, 코스 = 2의 _correct_ 삽입이 오류로 플래그됩니다. –