데이터베이스 정규화는 데이터베이스의 설계와 관련 있다
데이터베이스 설계에 따라 데이터가 어떻게 저장될지 그 구조를 결정하기 때문이다
데이터 중복(data redundancy) 은 실제 데이터의 동일한 복사본
이나, 부분적인 복사본
을 뜻한다
물론 이러한 중복으로 데이터를 복구할 때에 더 수월할 수도 있다, 그러나 대체로 데이터베이스 내에서는 몇 가지 문제점이 있다
데이터 정규화 는 데이터 무결성을 강화하는 목적도 지닌다
데이터 무결성(data integrity)은 데이터의 수명 주기 동안 정확성과 일관성을 유지하는 것을 뜻한다
다시 말해 입력된 데이터가 오염되지 않고, 입력된 그대로 데이터를 사용할 수 있다는 뜻이다
데이터 이상 현상(anomaly)은 기대한 데이터와 다른, 이상 현상을 가리킨다
갱신 이상(update anomaly)은 여러 행(레코드)에 걸쳐 동일한 데이터가 있을 때, 어떤 행을 갱신해야 하는지 논리적인 일관성이 없는 경우에 발생한다
하기와 같이 테이블이 존재하고 두 개의 레코드가 동일한 사람일 때, 519번을 갱신하는 경우 어떤 행의 데이터를 갱신해야 하는지 알 수 없다
삽입 이상(insertion anomaly)은 데이터를 삽입하지 못하는 경우를 가리킨다
다음과 같은 경우 새로운 직원이 들어왔을 때, Dr. Newsome이 가르칠 수업이 아직 정해지지 않았다면 데이터를 추가하지 못한다
수업을 NULL 값으로 지정하지 않는 이상, 담당 수업이 있어야만 테이블에 추가할 수 있는 이상 현상이 발생한다
삭제 이상(deletion anomaly)은 데이터의 특정 부분을 지울 때 의도치 않게 다른 부분도 함께 지우는, 이상 현상이다
하기와 같이 경우 한 직원이 담당하는 수업을 삭제한다, 그러나 이 수업 데이터를 삭제하려면, 레코드 전체가 사라진다 결국에는 의도치 않게 직원의 다른 데이터도 함께 삭제되는 현상이 발생한다
SQL에는 데이터를 조회하고 테이블을 만드는 등 다양한 문법이 있다, 그리고 쿼리문을 어떻게 작성하느냐에 따라, 그 기능이나 작업이 달라진다
영어나 한국어 등과 같은 언어에서 주어나 동사 등을 구분하는 것처럼 SQL에서도 역할에 따라 문법이 다양하게 존재한다
DDL(Data Definition Language)은 데이터를 정의
할 때 사용하는 언어
테이블을 만들 때 사용하는 CREATE나 테이블을 제거할 때 사용되는 DROP 등이 DDL에 해당한다
데이터베이스의 테이블과 같은 오브젝트를 정의할 때 사용한다
DML(Data Manipulation Language)은 데이터베이스에 데이터를 저장
할 때 사용하는 언어 INSERT처럼 새로운 레코드를 추가할 때 사용되는 문법을 포함해 데이터를 삭제하는 DELETE 나, 변경하는 UPDATE가 DML에 포함된다
DCL(Data Control Language)은 데이터베이스에 대한 접근 권한
과 관련된 문법
어느 유저가 데이터베이스에 접근할 수 있는지 권한을 설정한다
권한을 주는 GRANT 나, 권한을 가져가는 REVOKE 등이 DCL에 포함된다
DQL(Data Query Language)은 정해진 스키마 내에서 쿼리할 수 있는 언어
SELECT 가 DQL에 해당한다
이렇게 언어를 분류했지만, DQL을 DML의 일부분으로 취급하기도 한다
TCL(Transaction Control Language)은 DML을 거친 데이터의 변경사항을 수정할 수 있다
COMMIT 처럼 DML이 작업한 내용을 데이터베이스에 커밋하거나, ROLLBACK 처럼 커밋했던 내용을 다시 롤백하는 문법이 있다