본문 바로가기
CS 개념정리/데이터베이스(DB)

[CS] 데이터베이스 이론 정리(1)

by 반오십 코린이 2022. 11. 2.
728x90

KEY: 무언가를 식별하는 고유한 식별자

  • candidate key(후보키): 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합

    학번, 주민번호

  • primary key(기본키): 후보키들 중에서 하나를 선택한 키 - 최소성, 유일성 만족 

    학번 or 주민번호

  • super key(슈퍼키): 각 행을 유일하게 식별할 수 있는 하나 or 그 이상의 속성들의 집합  - pk가 들어가 있어야 하고 나머지 속성들이 원소로 들어가도 가능.

    {학번, 이름, 나이}, {주민번호, 사는 곳, 이름}..

  • foreign key(외래키): 테이블이 다른 테이블의 데이터를 참조할 때 관계 연결에 사용하는 key

    1번 table과 2번 table을 연결하기 위한 key인 foreign key = 주민번호

  • alternate key(대체키,보조키):  후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키들을 말한다.

    현재 기본키가 학번이라고 가정하면 -> 주민번호(대체키)

 

DB 정규화

  • 제 1 정규화: 테이블 컬럼이 atomic 하도록 (하나의 값) 갖도록 테이블 분리시키는 것
  • 제 2 정규화: 테이블의 모든 컬럼이 완전 함수적으로 종속. 기본키가 복합키로 묶여 있을 때 하나의 키만으로 다른 컬럼을 결정지을 수 있으면 안된다. - 오로지 기본키로 모든 컬럼 결정지을 수 있어야함.
  • 제 3 정규화: 이행적 종속을 없애기 위한 테이블 분리 (A->B, B->C 면 A->C이다.) 키 여러개가 결정자가 되는 것 방지.
  • 반 정규화: 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정.
  • 정규화의 단점: 테이블이 너무 분리되어 자주 JOIN 해주어야 하기에 그에 따른 성능상 단점을 감수해야함

데이터 베이스 Anomaly(이상)

  • 삽입이상: 불필요한 데이터를 추가해야 삽입할 수 있는 상황
    • 기본키가 {EmployeeID, DepartmentID} 일 경우 부서가 없는 직원의 경우 해당 row의 DepartmentID 값을 null로 해야하는데 복합키이기 때문에 null로 할 수 없어서 '부서없음' 등 불필요한 데이터를 추가해야 삽입 가능하다.
  • 갱신이상: 일부 변경. 데이터가 불일치하는 모순의 문제
    • 어떤 직원이 부서를 변경할 경우 해당 부서와 관련된 컬럼( ex. 부서 번호) 등을 함께 변경하지 않을 경우 나중에 데이터 조회했을 때 오류가 생김.
  • 삭제이상: 튜플 삭제로 인해 꼭 필요한 데이터까지 함께 삭제되는 문제
    • 어떤 직원이 퇴사할 경우 (해당 직원이 포함된 부서에는 이 직원밖에 없을시 && 부서와 직원 컬럼을 나누지 않음) 해당 부서에 대한 정보가 사라진다.

데이터 언어

  • DDL (Data Definition Language)
    • 데이터베이스의 논리적, 물리적 구조 정의, 변경, 스키마 제약조건 정의
    • CREATE, ALTER, DROP, TRUNCATE
  • DML (Data Manipulation Language)
    • 데이터 처리를 위해 사용자와 DBMS 사이의 인터페이스를 위한 언어
    • INSERT, DELETE, UPDATE, SELECT
  • DCL (Data Control Language)
    • 데이터베이스에 접근하거나 객체에 권한을 주는 등의 역할을 하는 언어
    • grant: 특정 작업에 대한 수행 권한 부여
    • revoke: 특정작업에 대한 수행 권한 박탈
  • TCL(Transaction Control Language)
    • 트랜잭션 제어할 때 사용(DML에 의해 조작된 결과를 트랜잭션 별로 제어)
    • commit: 트랜잭션 작업 저장
    • rollback: 트랜잭션 작업을 취소, 복구

DB 파티셔닝(Partitioning) - 테이블을 쪼개는 행위

  • 데이터베이스를 여러 부분으로 분할하는 것
  • 퍼포먼스, 가용성, 정비 용이성 등을 목적.
  • 하나의 인스턴스에 여러 테이블 나눠 저장

샤딩(Sharding) - 수평 파티셔닝

  • 데이터베이스의 table의 row를 자르는 행위 
  • ex) 1~1000번 고객까지 1번 샤드, 1001~2000 고객까지 2번 샤드
  • 도출된 서브셋을 여러 인스턴스에 저장한다.

트랜잭션 - ACID 성질. - 하나 이상의 쿼리를 모아 놓은 하나의 작업 단위.

  • atomicity - 트랜잭션의 연산들이 모두 성공 or 반대로 모두 실패되는 성질(A 출금 B 입금이 하나만 일어나면 안댐)
  • consistency - 일관성 있게 트랜잭션이 일어나기 전과 후에 제약이나 규칙을 만족한다.
  • isolation - 다른 트랜잭션과 종속되지 않고 독립적이다.(만원 짜리 계좌 하나로 B C로 6000원씩 동시에 계좌 이체 할 경우 돈이 부족하면 B만 보내고 C는 못보낸다. 둘다 한번에 보내져서 마이너스 통장이 되진 않음)
  • durability - 하나의 트랜잭션 성공시 로그가 남아야한다. (계좌이체 내역)
728x90