- 강의
- 76강(MySQL의 DB 테이블 관계 익히기) ~ 78강(MySQL 제약조건 익히기)
RDBMS 관계
- RDBMS 관계의 특성
- 관계의 선택성(optionality)
- 두 테이블 간의 페어링 필수여부
- Optional : 없어도 되는 관계, O로 표시
- Mandatory : 필수적인 관계, |로 표시
- 관계의 중요성
- 두 테이블 간의 페어링 필수여부
- 관계의 기수성(=cardinality)
- 두 테이블 간의 연결된 개수
- One : O| (0 또는 1), || (1)
- Many : O┝ (0 이상), |┝ (1 이상)
- 관계의 다중성
- 두 테이블 간의 연결된 개수
- 관계의 선택성(optionality)
- 키
- 기본키
- = 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를 하면 어떤 상황이 발생할지 알기 힘듦
- 일방향 참조
- 을인 입장의 테이블에 외래키(제약조건) 설정
'슈퍼코딩 > 주특기(JAVA)' 카테고리의 다른 글
슈퍼코딩 신입연수원 8주차 후기 (0) | 2024.05.25 |
---|---|
2024.05.24(금) 슈퍼코딩 신입연수원 8주차 Day 5 후기 - 데이터베이스 모델링, JDBC (0) | 2024.05.24 |
2024.05.22(수) 슈퍼코딩 신입연수원 8주차 Day 3 후기 - SQL 기초 문법 (0) | 2024.05.22 |
2024.05.21(화) 슈퍼코딩 신입연수원 8주차 Day 2 후기 - RDBMS (0) | 2024.05.21 |
2024.05.20(월) 슈퍼코딩 신입연수원 8주차 Day 1 후기 - annotation, meta programming, gradle (0) | 2024.05.20 |