[DBMS]DML, TCL, 정규화
DML(Data Manipulation Language)
- 데이터 조작어
SELECT : 조회(검색)
SELECT 컬럼명1, 컬럼명2, ... FROM 테이블명
WHERE 조건식;
INSERT : 추가
INSERT INTO 테이블명
(컬럼명1, 컬럼명2,....)
VALUES(값1, 값2,....);
또는
INSERT INTO 테이블명 VALUES(값1, 값2,...);
UPDATE : 수정
UPDATE 테이블명
SET 기존 컬럼명 = 새로운 값
WHERE 조건식;
DELETE : 삭제
-하나 씩 삭제, 행 하나가 삭제
DELETE FROM 테이블명
WHERE 조건식;
조건식
- 참 또는 거짓 둘 중 하나의 결과가 나오는 식
WHERE 조건식
- >, < :초과, 미만
- >=, <= : 이상, 이하
- = : 같다
- <>, !=, ^= : 같지 않다.(다 똑같음 원하는 거 쓰면됨)
- AND : 두 조건식 모두 참이면 참
- OR : 둘 중 하나라도 참이면 참
TCL(Transaction Control Language)
- 트랜젝션 제어 언어
- DML을 위한 명령어
- DDL에는 사용할 수 없다
*트랜젝션 : 하나의 작업 단위
COMMIT : 작업을 확정하는 명령어
ROLLBACK : 이전 커밋한 지점으로 이동
TRUNCATE는 테이블 내용을 전체 삭제하므로 DELETE보다 빠르게 처리할 수 있다
대용량 데이터 처리에 유리하다 하지만 복구가 불가능하기 때문에 복구가 가능한 DELETE를 많이 사용한다,
정규화
- 목적 : 삽입, 수정, 삭제의 이상 현상을 제거하고 데이터의 중복 최소화
- 대부분 3차 정규화까지만 진행
1차 정규화(1NF)
- 하나의 컬럼에 값이 1개씩만 있어야한다.
- 반복적인 컬럼 값이 나타나는 경우 사용
- 열이 아니라 행을 여러 개 만든다.
상품명
바지1, 바지2, 바지3 => 검색이 힘들다
정규화 진행
상품명
바지1
바지2
바지3
2차 정규화(2NF)
- 테이블의 모든 컬럼이 서로 관계가 있어야 한다.
- 모든 컬럼이 서로 관계가 없는 경우
USER
이름 나이 상품명
박현주 24 바지
이상원 26 치마
- 정규화 진행
USER
이름 나이
박현주 24
이상원 26
PRODUCT
나이 상품명
3차 정규화(3NF)
- 하나의 테이블 분리
이름 시 구 동 우편번호
박현주 부산시 부산지구 개금동 12345
우편번호로 시, 구, 동을 알 수 있다,
중복된 데이터가 생길 가능성이 있다.
-정규화 진행
이름 우편번호
박현주 12345
우편번호 시 구 동
테이블 따로 만듦
반정규화
- 나눈 테이블을 합치는 것
데이터베이스에서 정규화가 필요한 이유
- 데이터 베이스를 잘못 설계하면 불필요한 데이터 중복으로 인해 공간이 낭비된다. 이러한 현상을 이상(Anomaly)라고 한다.
- 이상 현상이 발생하기 때문이다.
- 정규화를 진행하기 위해서는 각 컬럼간의 관련성을 파악해야하고 이 관련성을 함수적 종속성(Functional Dependecy)이라고 한다.
- 따라서 하나의 테이블에서는 하나의 함수적 종속성만 존재하도록 정규화를 한다.
예시 상황) 회원번호와 프로젝트코드 두 컬럼의 조합키로 설정되어있는 테이블이고 한 사람은 하나의 부서만 가질 수 있다.
이상현상의 종류
1. 삽입이상
- 새 데이터를 삽입하기 위해 불필요한 데이터도 삽입해야하는 문제
예) 담당 프로젝트가 정해지지 않은 사원이 있다면 프로젝트 코드에 NULL을 작성할 수 없으므로 이 사원은 테이블에 추가될 수 없다. 따라서 미정이라는 프로젝트 코드를 따로 만들어서 삽입해야한다.
2. 갱신이상
- 중복되는 행 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
예) 한 명의 사원은 반드시 하나의 부서에만 속할 수 있다.
만약 한동석이 보안팀으로 부서를 옮길 시 3개 모두 갱신해주지 않는다면 개발팀인지 보안팀인지 알 수 없다.
3. 삭제이상
- 행을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 문제
예) 이순신이 담당한 프로젝트에서 나가게된다면 이순신 행을 모두 삭제하게 된다.
(프로젝트 코드만 삭제할 수 없음) 따라서 프로젝트에서 나가게되면 정보를 모두 삭제하게 된다.