DB Review (1)

이미 DDIA책, 수업 등의 경험으로 DB에 대한 지식을 어느정도 갖췄지만, 기본적인 거를 정리할 겸 블로그를 사용하고자 한다. 큰 컨셉들을 정리하고 생각해보는 시간을 갖출 것이다. 이 내용은 추후 더 정리하거나 추가될 수도 있다.

Why Not File System

파일 시스템을 그대로 쓰기엔 단점이 너무 많다..Data Redundancy issue, Concurrent한 접속시 inconsistency, Security 이슈 등이 있다.

Query Processing

Query Input -> Parsing and Translation (Relational Algebra Execution) -> Optimizer (Execution Plan) -> Evaluator -> Query Output

DBMS

DBMS는 database 관리 시스템으로 데이터에 관한 정보를 효율적이고 효과적이게 검색하고 저장하게 해준다. DBMS는 데이터 중복을 제어해주고, 데이터 백업/복구를 제공하며 사용자 인터페이스를 제공합니다.

Database는 데이터가 저장되고 정렬된 데이터 collection이다

RDBMS는 관계형 데이터베이스 관리 시스템으로 MySQL, Oracle 등이 있다. SQL을 통해 데이터에 엑세스 할 수 있다.

Key

Key는 검색이나 정렬을 할때 Row Tuple을 구분할 수 있는 기준이 되는 속성이다. 키의 종류에는 다음과 같은 것들이 있다.

  • Candidate Key (후보 키)
    기본키로 사용할 수 있는 키로서 유일성 (key하나로 하나의 tuple 식별 가능)과 최소성 (필요한 최소의 속성으로만 이루어짐) 을 가지고 있어야 한다.
  • Primary Key (기본 키)
    Candidate Key에서 뽑힌 하나의 key로서 null값을 가질 수 없고, 중복된 값이 들어갈 수 없다. 보통 단순하고, 값이 자주 변경되지않으며, null값을 가질 수 없는 attribute를 지정한다.

    Unique Key는 중복 된 값을 가질 수는 없지만 null값은 들어갈 수 있다. 또한, 여러 개를 만들 수 있다.

  • Alternate Key (대체 키)
    Primary Key가 아닌 Candidate Key들이다.
  • Composite Key (복합 키) 두개 이상의 attribute으로 이루어진 후보 키
  • Super Key
    유일성은 만족하지만 최소성은 만족하지 못한 key들이다.
  • Foreign Key
    다른 relation table의 기본키를 참조하는 attribute/attribute의 집합으로서, 참조 무결성 조건에 따라 참조된 테이블의 기본 키에 없는 값은 사용할 수 없다.

Join

Inner Join, Left Outer Join, Right Outer Join, Full Outer Join은 기본적이다.

  • Cross Join
    모든 경우의 수를 표현해주는 방식
  • Self Join
    자기 자신과 Join. 관계를 추출할때 유용.

SQL Statement

DDL, DML, DCL로 나뉠 수 있다.
DDL이란 data definition language로 create, alter, truncate, drop, rename이 있다. 데이터를 가지고 있는 구조를 바꾸기 위해 쓰인다.
DML이란 data manipulation language로 데이터를 바꾸기 위해 쓰이고, 롤백할 수 있다. insert, update, delete가 있다. DCL이란 data control language로 데이터 권한 관리 등 visibility를 제어하는데 쓰이며, commit, rollback 등이 있다.

Anomaly

정규화를 해야하는 이유가 바로 Anomaly때문이다. Anomaly란 잘못된 테이블 구조로 인해 데이터 삽입, 삭제 및 수정할때 원치 않게 생기는 오류를 의미한다. 다음과 같은 Anomaly가 있다.

  • Insertion Anomaly
    원하지 않는 자료가 삽입되거나 삽입이 제대로 되지않는 경우
  • Deletion Anomaly
    Tuple 삭제로 인해 필요한 데이터까지 같이 삭제되는 경우
  • Update Anomaly
    Update할때 일부만 변경되어 데이터가 불일치 하고 일관성이 없어지는 경우

Normalization (정규화)

정규화는 Anomaly를 해결하고 중복된 데이터를 최소화하기 위해 데이터를 구조화하는 작업이다. 이를 통해 중복을 없앨 뿐만 아니라, 무결성을 지키고 테이블 구성을 직관적으로 바꾸며 데이터베이스를 확장성있게 바꿔준다.

비정규화는 이와 반대로 쿼리 속도를 높이기 위해 중복 데이터를 추가해준다.

무결성 (integrity)에는 크게 entity integrity (개체 무결성), referential integrity (참조 무결성), domain integrity (도메인 무결성)가 있다. 개체 무결성에서는 모든 table이 primary key를 가져야하고 해당 primary key는 null값이 없고 unique해야한다. 참조 무결성에서는 위에서 설명하였듯 외래 키값은 참조 테이블의 기본 키 값이어야한다 (아님 null). 도메인 무결성은 각 필드의 정의된 타입, null값 허용/uniqueness등을 따라야한다.

정규화는 크게 3가지가 있다.

  1. First Normal Form (1NF)
    각 테이블의 attribute가 atomic하게 한다. 즉 그렇기 위해서는 복합적이거나 다중 값을 attribute가 가질 수 없다.
  2. Second Normal Form (2NF)
    모든 non-key attribute들이 primary key에 fully dependent 해야한다. 완전 함수 종속적이여한다는 것인데, 이 말은 기본 키 중 어떠한 attribute를 없앴을때 다른 attribute들을 결정 지을 수 없어야한다는 뜻이다.

  3. Third Normal Form (3NF) 모든 non-key attribute들이 primary key에 not transitively dependent 해야한다. 이 뜻은 테이블에서 이행적 종속 (X->Y, Y->Z면 X->Z)을 없애는 것이다. 쉽게 설명하면 non-key attribute가 다른 non-key attribute를 종속하는 형태가 있으면 안된다.