슈퍼코딩/주특기(JAVA)

2024.05.23(목) 슈퍼코딩 신입연수원 8주차 Day 4 후기 - RDBMS, JOIN, MySQL 제약조건

곰돌이볼 2024. 5. 23. 12:01
  • 강의
    • 76강(MySQL의 DB 테이블 관계 익히기) ~ 78강(MySQL 제약조건 익히기)

RDBMS 관계


  • RDBMS 관계의 특성
    • 관계의 선택성(optionality)
      • 두 테이블 간의 페어링 필수여부
        • Optional : 없어도 되는 관계, O로 표시
        • Mandatory : 필수적인 관계, |로 표시
      • 관계의 중요성
    • 관계의 기수성(=cardinality)
      • 두 테이블 간의 연결된 개수
        • One : O| (0 또는 1), || (1)
        • Many : O┝ (0 이상), |┝ (1 이상) 
      • 관계의 다중성
    • 기본키
      • = PK, Primary Key
      • 특징 : NOT NULL(nullable X), UNIQUE(단일값, 중복X)
    •  외래키
      • = FK, Foreign Key
      • 다른 테이블의 PK(또는 UNIQUE 필드)와 대응되어서 참조 관계를 표현하는 속성
-- 외래키 설정(CREATE TABLE문)
FOREIGN KEY (current_column) REFERENCES reference_table(reference_column)
  • table 관계
    • 1 대 1
    • 1 대 N
    • M 대 N : mapping table(N) 생성 이용
  • table 관계 생성 방법
    • FK → '을'
    • Optional에 따른 NOT NULL 사용유무 설정
    • UNIQUE 사용유무에 따라서 1:1과 1:N 구분

JOIN


  • JOIN : 다른 테이블을 합치는 것
    • 기준 테이블 : 외래키를 가지고 있지 않은 테이블
    • FK로 join함
  • MySQL Workbench에서 데이터베이스 간의 관계 확인
    • Database → Reverse Engineer

 

Inner JOIN

  • 두 테이블이 겹치는 부분(테이블1 ∩ 테이블2)
  • 문법 : INNER 생략 가능
SELECT *
FROM table1
    INNER JOIN table2
    ON table1.id = table2.id;

 

 

Outer JOIN

  • Left Join
    • 왼쪽 join
    • LEFT OUTER JOIN(= LEFT JOIN)
    • 교집합이 아닌 왼쪽 테이블의 데이터에 오른쪽 테이블의 내용은 NULL
  • Right Join
    • 오른쪽 join
    • RIGHT OUTER JOIN(=RIGHT JOIN)
    • 교집합이 아닌 오른쪽 테이블의 데이터에 왼쪽 테이블의 내용은 NULL
  • Full Join
    • 지원하는 mysql이 있으니 확인하고 사용하기
    • FULL OUTER JOIN(= FULL JOIN)

 

기타 JOIN

  • 서브쿼리
    • 쿼리문 안에 쿼리문을 사용하는 경우
    • 사용하는 위치
      • FROM
      • WHERE
  • Self Join(= 자체 조인)
    • 자기 자신의 테이블을 참조 테이블로 하는 경우
    • Alias 필수
    • Inner join과 outer join 사용 가능
  • Cross Join
    • 각 행마다 나올 수 있는 모든 join하는 방법
    • 모든 경우를 Join해서 데이터의 개수가 많아지면 커디너리티가 기하급수적으로 증가함
    • 데이터 실험을 하고 싶은 경우 사용됨

MySQL 제약조건


  • 제약조건이 필요한 이유
    • 논리성 유지 : 논리적으로 성립하는 값만 입력
    • 고유성 유지 : 동일한 id가 없도록 함
  • MySQL Constraints(= 제약조건)의 종류
    • Not Null Constraint
    • Check Constraint
    • Unique Constraint
    • Primary Key Constraint
    • Foreign key Constraint
    • Default Constraint
  • 선언방식
    • 인라인 제약조건 : Create할 때 필드를 선언하는 곳에 선언
    • 외부 제약조건 : Create할 때 마지막 라인에 선언
    • 제약조건 선언 : Alter할 때 제약조건 선언
    • 모든 제약을 지원하는 건 아님
-- 인라인 제약조건
CREATE TABLE 테이블명 {
    컬럼명 데이터타입 CONSTRAINT 제약조건_이름 제약조건
    ...
);

-- 외부 제약조건
CREATE TABLE 테이블명 {
    컬럼1 데이터타입,
    컬럼2 테이터타입,
    ...
    CONSTRAINT 제약조건_이름 제약조건(컬럼1, 컬럼2 ...)
);

-- 제약조건 선언
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건_이름 제약조건(컬럼1, 컬럼2 ...)

 

NOT NULL

  • Null 허용 X
  • 인라인 제약조건으로만 선언 가능
  • 여러 컬럼에 선언 가능

 

UNIQUE

  • 고유한 값만 가능
  • Null값은 여러 개 가능
  • 모든 제약조건 방식으로 선언 가능
  • 여러 컬럼에 선언 가능

 

PRIMARY KEY

  • 기본키 설정
  • 모든 제약조건 방식으로 선언 가능
  • 하나의 컬럼에만 선언 가능

 

CHECK

  • 조건식을 통과해야 동작
  • 모든 제약조건 방식으로 선언 가능

 

DEFAULT

  • null값인 경우 기본값 설정
  • 인라인 제약조건으로만 선언 가능

 

FOREIGN KEY

  • 외래키 설정
  • 참조하는 테이블과 테이블 컬럼이 존재해야 함
    • 참조하는 테이블 컬럼은 UNIQUE 또는 PK이어야 함
  • 인라인 제약조건 빼고 선언 가능
  • CASCADE
    • ON UPDATE CASCADE : 기준 테이블 수정 시 참조 테이블의 값도 자동 수정됨
    • ON DELETE CASCADE : 기준 테이블 삭제 시 참조 테이블의 값도 자동 삭제됨

 

참조 방법

  • 상호 참조
    • 서로가 참조하는 방법
    • 사용 X 이유
      • 생성 과정이 복잡
      • 삭제 및 수정할 때 문제 발생
      • cascade를 하면 어떤 상황이 발생할지 알기 힘듦
  • 일방향 참조
    • 을인 입장의 테이블에 외래키(제약조건) 설정