DB-관계

NOOOOOOOOOOO·2023년 9월 30일

DB

목록 보기
4/25

1:M 관계(일대다관계)

  1. 2개의 테이블을 관계 짓는 가장 대표적인 관계이다.
1    :   M
PK   :   FK
부모 :   자식
  1. 반드시 부모 테이블을 먼저 만들고, 자식 테이블은 나중에 만들어야 한다.
  2. 반드시 자식 테이블을 먼저 지우고, 부모 테이블은 나중에 지워야 한다.

삭제 옵션

  1. ON DELETE CASCADE : 외래키가 참조하는 기본키 값이 삭제되면 외래키도 함께 삭제한다.
  2. ON DELETE SET NULL : 외래키가 참조하는 기본키 값이 삭제되면 외래키를 NULL로 처리한다.

지우는 순서, 만드는순서 예시

-- 자식 먼저 지우기
DROP TABLE STUDENT_T;

-- 부모 나중에 지우기
DROP TABLE SCHOOL_T;


-- 부모 먼저 만들기
CREATE TABLE SCHOOL_T (
    SCH_CODE NUMBER            NOT NULL
  , SCH_NAME VARCHAR2(10 BYTE) NOT NULL
  , CONSTRAINT PK_SCH PRIMARY KEY(SCH_CODE)  -- 제약조건의 이름은 PK_SCH, SCH_CODE에 PRIMARY KEY 지정
);

-- 자식 나중에 만들기
CREATE TABLE STUDENT_T (
    STU_NO   NUMBER NOT NULL
  , SCH_CODE NUMBER
  , STU_NAME VARCHAR2(10 BYTE) NOT NULL
  , CONSTRAINT PK_STU PRIMARY KEY(STU_NO)  -- 제약조건의 이름은 PK_STU, STU_NO에 PRIMARY KEY 지정
  , CONSTRAINT FK_SCH_STU FOREIGN KEY(SCH_CODE) REFERENCES SCHOOL_T(SCH_CODE) ON DELETE CASCADE  -- 제약조건의 이름은 FK_SCH_STU, SCH_CODE는 SCHOOL_T 테이블의 SCH_CODE를 참조한다.
);

M:N 관계 (다대다 관계)

  1. 현실세계에서 빈번히 나타나지만 주의해야 하는 관계이다.
  2. M:N 관계를 가진 2개의 테이블은 직접 관계를 맺는 것이 불가능하다.
  3. 관계를 맺기 위해서 별도의 테이블이 추가로 필요하다.
  4. M:N 관계는 1:M 관계 2개로 구현할 수 있다.

다대다 관계의 예시


-- 삭제는 생성의 역순으로 진행
DROP TABLE ENROLL_T;
DROP TABLE SUBJECT_T;
DROP TABLE UNIV_STUDENT_T;


-- 학생 테이블
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)
);

티스토리
-관계실습(부서,사원,프로젝트,진행)
https://hyeonju50.tistory.com/16

0개의 댓글