버글버글

DataBase 수업 기록 (3) 관계모델링 본문

Database/database 수업 기록

DataBase 수업 기록 (3) 관계모델링

Bugle 2022. 8. 27. 00:00
반응형

▶ 1 : M 관계 (일 대 다) 

 - 한 쪽의 엔티티가 관계를 맺은 다른 엔티티 쪽의 여러 객체를 가질 수 있다.

 - 현실 세계에서 가장 흔한 관계이다.

예시) 엄마가 자식을 3명 낳으셨다. 엄마(1) : 자식(3)

M : 1

* 일 대 다 관계의 테이블 생성(할때 고려하여야 할 것)

    1. 명칭
        1) 부모 테이블 : 일(1), (중복이 없는)PK를 가진 테이블
        2) 자식 테이블 : 다(M), FK를 가진 테이블
    2. 생성
        1) 부모 테이블을 먼저 생성하고, 자식 테이블을 나중에 생성
    3. 삭제
        1) 자식 테이블을 먼저 삭제하고, 부모 테이블을 나중에 삭제
    * 생성과 삭제는 역순 이다. ( 생성 : 부모 먼저, 자식 나중 / 삭제 : 자식 먼저, 부모 나중)

 

예시)

-- 학교 테이블 = 부모 테이블 : PK를 가진 테이블
DROP TABLE SCHOOL;
CREATE TABLE SCHOOL(
    SCH_CODE NUMBER(1) NOT NULL,
    SCH_NAME VARCHAR2(20 BYTE) NOT NULL,
    CONSTRAINT PK_SCHOOL PRIMARY KEY(SCH_CODE)
);
-- 학생 테이블 = 자식 테이블 : FK를 가진 테이블
CREATE TABLE STUDENT(
    STU_NO CHAR(5 BYTE) NOT NULL,
    SCH_CODE NUMBER(1) NOT NULL,
    STU_NAME VARCHAR2(20 BYTE) NULL,
    CONSTRAINT PK_STUDENT PRIMARY KEY(STU_NO),
    CONSTRAINT FK_STUDENT_SCHOOL FOREIGN KEY(SCH_CODE) REFEREBCES SCHOOL(SCH_CODE)
);

 

▶ M : N 관계 (다 대 다) 

 - 관계를 가진 양쪽 모두에게 1:M 관계가 존재할 때 나타난다.

 - 현실 세계에서 의외로 빈번하게 발생하는 관계이다.

예시) 학생들이 수강신청을 한다. 학생도 여러 명(M) : 과목도 여러 과목(N)

 - 1:M 관계 2개를 이용해서 구현한다.

 

예시)

DROP TABLE REQUEST; -- 수강신청 테이블
DROP TABLE SUBJECT; -- 과목 테이블
DROP TABLE STUDENT; -- 학생 테이블

-- 학생테이블
CREATE TABLE STUDENT(
    STU_NO CHAR(5 BYTE) NOT NULL,
    STU_NAME VARCHAR2(20 BYTE) NOT NULL,
    STU_AGE NUMBER(3) NOT NULL,
    CONSTRAINT PK_STUDENT PRIMARY KEY(STU_NO)
);

-- 과목 테이블
CREATE TABLE SUBJECT(
    SUB_CODE CHAR(5 BYTE) NOT NULL,
    SUB_NAME VARCHAR2(20 BYTE) NULL,
    SUB_PRO VARCHAR2(20 BYTE) NULL,
    CONSTRAINT PK_SUBJECT PRIMARY KEY(SUB_CODE)
);
    
-- 수강신청 테이블
CREATE TABLE REQUEST(
    REQ_NO NUMBER(2) NOT NULL,
    STU_NO CHAR(5 BYTE) NOT NULL,
    SUB_CODE CHAR(5 BYTE) NOT NULL,
    CONSTRAINT PK_REQUEST PRIMARY KEY(REQ_NO),
    CONSTRAINT FK_REQUEST_STUDENT FOREIGN KEY(STU_NO) REFERENCES STUDENT(STU_NO),
    CONSTRAINT FK_REQUEST_SUBJECT FOREIGN KEY(SUB_CODE) REFERENCES SUBJECT(SUB_CODE)
);

 

* 참고 : 아래 코드는 외래키 제약조건을 무시하고 테이블 삭제가 가능하다. (순서에 상관없이 삭제할 수 있음)

DROP TABLE STUDENT CASCADE CONSTRAINTS;

 

반응형