※ DB는 UI상에서도 작성할 수 있지만 쿼리로도 작성할 수 있다.
※ 데이터베이스 = 스키마, 테이블 = 객체
- CREATE DATABASE [DB 명]
- DROP DATABASE [DB 명]
- CREATE TABLE [테이블 명] (열 명, 자료형, DEFAULT, [NULL | NOT NULL], ...)
- DROP TABLE [테이블 명]
- ALTER TABLE [테이블 명] ADD / DROP / ALTER CULUMN [열 명, 자료형, ...]
※ 테이블 DROP시, 게임처럼 삭제 확인창이 뜨지 않으니 주의할 것. (자주 사용하지 않음)
- NULL, NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY가 있다.
- CREATE TABLE로 테이블 작설할 때 제약을 같이 정의한다. ('()'의 내용)
- ALTER TABLE로 제약을 지정하거나 변경 가능.
- 위와 같은 열에 대해 정의하는 제약을 '열 제약'이라고 한다.
- CONSTRAINT : 제약에 이름을 부여할 수 있다. (이름을 붙이면 관리가 용이하다.)
- ex) ALTER TABLE [테이블 명] ADD CONSTRAINT [제약 명] PRIMARY KEY (열 명)
- DB의 테이블을 규정된 형태로 개선해나가는 것.
- 정규화를 통해 DB가 효율적으로 동작하도록 만들 수 있다.
- 정규화 예시 DB
id |
name |
class |
level |
inventory |
1 |
a |
knight |
3 |
itemA 1개, itemB 3개 |
2 |
b |
wizard |
2 |
itemA 5개, itemB 2개 |
1. 반복되는 데이터를 세로(행 방향)로 늘려준다.
id |
name |
class |
level |
item |
itemCode |
count |
1 |
a |
knight |
3 |
itemA |
01 |
1 |
1 |
a |
knight |
3 |
itemB |
02 |
3 |
2 |
b |
wizard |
2 |
itemA |
01 |
5 |
2 |
b |
wizard |
2 |
itemB |
02 |
2 |
2. 데이터 분할, 키 처리
- name, class, level과 item을 다른 테이블로 옮긴다.
2-1) 플레이어 테이블
id |
name |
class |
level |
1 |
a |
knight |
3 |
2 |
b |
wizard |
2 |
2-2) 아이템 테이블
itemCode |
item |
01 |
itemA |
02 |
itemB |
2-3) 인벤토리 정보 테이블
id |
itemCode |
count |
1 |
01 |
1 |
1 |
02 |
3 |
2 |
01 |
5 |
2 |
02 |
2 |
위와 같이 정규화가 가능하다.