DAY02에서 작성한 PK와 FK의 관계이다.
하나의 PK를 FK가 여러개 가질 수 있는 관계이다. 현실에서 제일 많이 쓰이고 있다. 예를 들어 한부모를 여러 자식들이 가지고 있는 것이라고 생각하면 된다.
3개 이상의 테이블에서 관계를 가진 양쪽 모두에게 1 : M 관계가 존재할 떄 나타난다.
-- 학생 테이블 CREATE TABLE UNIV_STUDENT_T ( STU_NO NUMBER NOT NULL, STU_NAME VARCHAR2(10 BYTE) NOT NULL, AGE NUMBER, CONSTRAINT PK_UNIV_STU PRIMARY KEY(STU_NO) ); -- 과목 테이블 CREATE TABLE SUBJECT_T ( SBJ_CODE VARCHAR2(5 BYTE) NOT NULL, SBJ_NAME VARCHAR2(10 BYTE) NOT NULL, PROFESSOR VARCHAR2(10 BYTE) NOT NULL, CONSTRAINT PK_SBJ PRIMARY KEY(SBJ_CODE) ); -- 수강신청 테이블 CREATE TABLE ENROLL_T ( EN_NO NUMBER NOT NULL, STU_NO NUMBER, SBJ_CODE VARCHAR2(5 BYTE), CONSTRAINT PK_EN PRIMARY KEY(EN_NO), CONSTRAINT FK_UNIV_STU_EN FOREIGN KEY(STU_NO) REFERENCES UNIV_STUDENT_T(STU_NO), CONSTRAINT FK_SBJ_EN FOREIGN KEY(SBJ_CODE) REFERENCES SUBJECT_T(SBJ_CODE) );
앞서서는 PK와 FK를 각 컬럼을 만드는 곳에 작성을 하였다. 이렇게 작성을 해도 무방하나 나중에 테이블 모델을 보게되면 테이블 이름이 나오는 것이 아니라 숫자가 나오게 되어 관계가 어떻게 형성되는지 쉽게 알수 없다.
이를 보정하기 위해 제약조건을 걸어준다. 컬럼을 작성하면서 뒤에 붙여 주었던 PK 나 REFERANCES를 맨 아래로 빼준다. 아래로 내리면서
CONSTRAINT PK_테이블명 PRIMARY KEY(컬럼명)
CONSTRAINT FK_PK테이블명_FK테이블명 FOREIGN KEY(PK컬럼명) REFERENCES FK의 테이블명(PK컬럼명)
으로 바꿔주면 된다.
-- 수강신청 테이블 CREATE TABLE ENROLL_T ( EN_NO NUMBER NOT NULL PRIMARY KEY , STU_NO NUMBER REFERENCES UNIV_STUDENT_T(STU_NO), SBJ_CODE VARCHAR2(5 BYTE) REFERENCES SUBJECT_T(SBJ_CODE) );
⬇️
-- 수강신청 테이블 CREATE TABLE ENROLL_T ( EN_NO NUMBER NOT NULL , STU_NO NUMBER , SBJ_CODE VARCHAR2(5 BYTE) , CONSTRAINT PK_EN PRIMARY KEY(EN_NO) , CONSTRAINT FK_UNIV_STU_EN FOREIGN KEY(STU_NO) REFERENCES UNIV_STUDENT_T(STU_NO) , CONSTRAINT FK_SBJ_EN FOREIGN KEY(SBJ_CODE) REFERENCES SUBJECT_T(SBJ_CODE) );
으로 수정 하면 된다.