DBMS

[DBMS]DML, TCL, 정규화

바켠주 2024. 4. 16. 03:50
728x90

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. 삭제이상

- 행을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 문제

예) 이순신이 담당한 프로젝트에서 나가게된다면 이순신 행을 모두 삭제하게 된다.

(프로젝트 코드만 삭제할 수 없음) 따라서 프로젝트에서 나가게되면 정보를 모두 삭제하게 된다.