2012-05-29 5 views
0

대학 데이터베이스에서 나는 주제와 전제 조건에 대한 자기 참조 관계가 있습니다. 주체가 0 개 이상의 사전 요구 사항을 가질 수 있다는 것을 의미합니다. 값이 여러 개인 열에 값을 삽입하려면 어떻게합니까?

그래서 내가 이쪽을 향하고 또는 전제 조건을 다루는 다른 테이블이 있어야한다면 난 그냥 궁금 주제
subject_code VARCHAR(7) NOT NULL CONSTRAINT subject_pk PRIMARY KEY, 
subject_name VARCHAR(50) NOT NULL, 
pre_requisite VARCHAR(7) NULL CONSTRAINT unit_pre_code FOREIGN KEY 
       REFERENCES subject(subject_code), 

을위한 테이블에 그것을 선언했다.

내가 옳은 길에 있다면, 전제 조건을 전제 조건으로하는 데이터를 어떻게 삽입합니까? 예 : C++ (C12345) 제목은 운영 체제 (C34512) 또는 필수 구성 요소입니다. 나는 아직도 이것에 익숙하지 않고 SQL에 대한 좋은 참조를 찾기가 힘듭니다. 모든 권장 사항도 훌륭합니다!

+0

값이 여러 개인 경우 다른 값 테이블을 추가해야합니다. – YvesR

+0

순환 의존성, 즉 참조 무결성 루프를 피하기 위해주의해야합니다. 101 -> 201 - 301 -> 101 ... 논리적이지는 않지만 테이블 정의에 의해 방지되지는 않습니다. –

답변

2

귀하의 관계는 일대일입니다. 즉, 1 개의 주제가 많은 전제 조건을 가질 수 있으므로 다른 테이블을 사용해야합니다. 예 :

CREATE TABLE SubjectPrerequisite 
(  Primary_Subject_Code  VARCHAR(7) NOT NULL, 
     Prerequisite_Subject_Code VARCHAR(7) NOT NULL, 
    CONSTRAINT PK_SubjectPrerequisite PRIMARY KEY (Primary_Subject_Code, Prerequisite_Subject_Code), 
    CONSTRAINT FK_SubjectPrerequisite_Primary_Subject_Code FOREIGN KEY (Primary_Subject_Code) REFERENCES Subject (Subject_Code), 
    CONSTRAINT FK_SubjectPrerequisite_Prerequisite_Subject_Code FOREIGN KEY (Prerequisite_Subject_Code) REFERENCES Subject (Subject_Code) 
) 

는 여전히 정확한 키를 가진하여 참조 무결성을 유지하지만 1 피사체가 여러 전제 조건을 충족 곳 훨씬 쉽게 데이터베이스를 조회 할 것이다. 예 :

-- WILL RETURN ALL SUBJECTS AVAILABLE GIVEN A CERTAIN PERSONS 
-- COMPLETED SUBJECTS. 
SELECT DISTINCT s.* 
FROM Subject s 
     INNER JOIN SubjectPrerequisite sp 
      ON s.Subject_Code = sp.Primary_Subject_Code 
WHERE sp.Prerequisite_Subject_Code IN ('C12345', 'C12346') 

-- WILL RETURN ALL PRERQUISITE SUBJECTS FOR ANY GIVEN SUBJECT 
SELECT s.* 
FROM SubjectPrerequisite sp 
     INNER JOIN Subject s 
      ON s.Subject_Code = sp.Prerequisite_Subject_Code 
WHERE sp.Primary_Subject_Code = 'C34512' 
관련 문제