본문 바로가기
programming/DB 및 기타

[DB] 면접을 위한 Database 개념 정리 1탄

by buddev 2020. 11. 1.

기술 면접을 준비하면서 정리한 자료들입니다.

잘못되거나 보완할 점이 있다면 댓글로 알려주세요! 바로 수정하겠습니다 🙂

 

슈퍼키 후보키 기본키 대체키 외래키

1. 슈퍼키(Super Key)

  • 테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합이다.
  • 유일성이란 하나의 키로 특정 행을 바로 찾아낼수 있는 고유한 데이터 속성을 말한다.
  • 어떤 속성끼리 묶던 슈퍼키는 유일성만 만족하면 슈퍼키가 될 수 있다.

2. 후보키(Candidate Key)

  • 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합이다.
  • 후보키는 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족해야한다.

3. 기본키(Primary Key) - 유니크, 낫널

  • 후보키들 중에서 하나를 선택한 키로 최소성과 유일성을 만족하는 속성이다.
  • 테이블에서 기본키는 오직 1개만 지정할 수 있다. (다중컬럼으로도 설정 가능)
  • 기본키는 테이블 안에서 유일하게 각 행들을 구별할 수 있도록 쓰인다.
  • 기본키는 NULL 값을 절대 가질수 없고, 중복된 값을 가질 수 없다. 각 행들을 구별하려면 값이 없어선 안되고, 중복되어서도 안되기 때문이다.

4. 대체키(Alternate Key)

  • 후보키가 두개 이상일 경우 그 중에서 어느 하나를 기본키로 지정하고 남은 후보키들을 대체키라한다.
  • 대체키는 기본키로 선정되지 않은 후보키이다. 기본키가 없어지면 기본키를 대체할 있게 된다.

5. 외래키(Foreign Key)

  • 테이블이 다른 테이블의 데이터를 참조하여 테이블간의 관계를 연결하는 것이다.
  • 다른 테이블의 데이터를 참조할 때 없는 값을 참조할 수 없도록 제약을 주는 것이다.
  • 참조 될 테이블이 먼저 만들어지고 참조하는 테이블에 값이 입력되어야 한다.
  • 이때, 참조될 값은 참조될 테이블에서 기본키로 설정되어 있어야한다.
  • 부모 테이블 먼저 삭제될 수 없다. 왜냐하면 부모테이블을 참조하는데 부모테이블이 삭제되면 자식테이블은 참조하는 것이 없어지기 때문에 외래키 오류가 생긴다.
  • cascade: 부모테이블의 컬럼이 변경 또는 삭제될 경우, 이를 외래키로 참조하는 컬의 값도 변경/삭제된다
  • restrict : 부모테이블의 컬럼이 변경/삭제될 때 컬럼을 변경/삭제할 컬럼을 참조하고 있을 경우 변경/삭제가 취소
  • NO ACTION : 부모테이블의 컬럼이 변경/삭제될 변경/삭제할 개체만 변경/삭제되고 참조하고 있는 개체는 변동이 없습니다.
  • SET NULL : 부모테이블의 컬럼이 변경/삭제될 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 참조하고 있는 값은 NULL로 세팅됩니다.

 

정규화와 비정규화

목적

1. 불필요한 데이터(data redundancy)를 제거한다.

2. 데이터 저장을 "논리적으로" 한다.

1차 정규화

1차 정규형은 각 로우마다 컬럼의 값이 1개씩만 있어야 합니다

이를 컬럼이 원자값을 갖는다고 한다

홍길동 / 수학,과학 이렇게 들어가면 안됨

2 정규화

테이블의 모든 컬럼이 완전 함수적 종속을 만족하는 것입니다.

기본키가 다중칼럼인 경우 기본키중에 특정 컬럼에만 종속된 컬럼(부분 함수적 종속)이 없어야 한다

이럴 경우에는 테이블을 쪼개야

2차에서 삽입갱신삭제 이상이 생기면->3 정규화로

3 정규화

3차 정규형은 기본키를 제외한 속성들 간의 이행적 함수 종속이 없는 것 입니다.

기본키 이외의 다른 컬럼이 그외 다른 컬럼을 결정할 없는 것입니다.

 

삼단논법처럼 X→Y, Y→Z, X->Z 성립할때

z y 의해서도 결정될 있기 때문에 테이블을 쪼갠다.

BCNF (Boyce and Codd Normal Form)

X의 값을 알면 Y의 값을 바로 식별할 수 있고,

X의 값에 Y의 값이 달라질 때, Y는 X에 함수적 종속이라고 합니다.

X를 결정자, Y를 종속자라고 합니다.

 

3차 정규형을 조금 더 강화한 버전으로 이는 3차 정규형으로 해결할 수 없는 이상현상을 해결할 수 있습니다.

3차 정규형을 만족하면서 BCNF는 만족하지 않는 경우는

일반 컬럼이 후보키를 결정하는 경우입니다.

BCNF란 3차정규형을 만족하면서 모든 결정자가 후보키 집합에 속한 정규형입니다.

이상의 종류

데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제를 삽입이상 이라고 한다.

중복 튜플 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제를 갱신이상 이라고 한다.

튜플을 삭제하면 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제를 삭제이상 이라고 한다.

함수적 종속의 종류

1) 완전 함수적 종속(Full Functional Dependency)

완전 함수적 종속이란, 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을경우

기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우입니다.

2) 부분 함수적 종속(Partial Functional Dependency)

부분 함수적 종속이란, 릴레이션에서 종속자가이 기본키가 아닌 다른 속성에 종속되거나,

기본키가 여러 속성으로 구성되어 있을경우 기본키를 구성하는 속성 중 일부만 종속되는 경우입니다.

3) 이행적 함수 종속(Transitive Functional Dependecy)

릴레이션에서 X, Y, Z라는 3 개의 속성이 있을 때 X→Y, Y→Z 이란 종속 관계가 있을 경우, X→Z가 성립될 때 이행적 함수 종속이라고 합니다. 즉, X를 알면 Y를 알고 그를 통해 Z를 알 수 있는 경우를 말합니다.

 

 

 

조인 (Join)

관계형 데이터베이스에서는 중복 데이터를 피하기 위해서 데이터를 쪼개 여러 테이블로 나눠서 저장합니다.

이렇게 분리되어 저장된 데이터에서 원하는 결과를 다시 도출하기 위해서는 여러 테이블을 조합할 필요 있습니다.

관계형 데이터베이스에서는 조인(JOIN) 연산자를 사용해 관련 있는 컬럼 기준으로 행을 합쳐주는 연산입니다. 

내부 조인 (INNER JOIN) - 교집합

    • on 또는 where 테이블이 결합하는 조건을 걸어줌
    • 둘다 데이터가 있을 경우에만 나오고, 한쪽에만 존재하면 나오지 않는다.

외부 조인 (OUTER JOIN)

    • INNER(내부) JOIN 대비하여 OUTER(외부) JOIN이라고 불리며, JOIN 조건에서 동일한 값이 없는 행도 반환할 사용합니다.
    • A, B 테이블을 JOIN 경우, 조건에 맞지 않는 데이터도 표시하고 싶을 OUTER JOIN 사용합니다.

완전 외부 조인 (FULL OUTER JOIN) - 합집합

    • 조인 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성
    • RIGHT OUTER JOIN LEFT OUTER JOIN 결과를 합집합으로 처리한 결과와 동일
    • 중복되는 데이터는 삭제

왼쪽 (LEFT OUTER), 오른쪽 (RIGHT OUTER) - 한쪽 집합

    • 한쪽에만 값이 존재하는 경우에도 표시하고 싶을 사용
    • 벤다이어그램처럼. outer 단어는 생략 가능
    • A LEFT JOIN B 와 B RIGHT JOIN A는 같은

교차 조인 (CROSS JOIN  - CARTESIN JOIN)

    • 교차 조인은 두 테이블의 카티션 프로덕트(곱집합)를 한 결과입니다.
    • 특별한 조건없이 테이블 A의 각 행과 테이블 B의 각 행을 다 조합한 결과입니다. 

셀프 조인 (SELF JOIN)

    • 자기 자신과 자기 자신을 조인하는 방법

 

DML DDL DCL TCL

DML (data Manipulation Language) : 데이터 조작어

테이블 내의 데이터를 변경하거나 조종하기 위한 명령어입니다.

주요 명령어 - SELECT, INSERT, UPDATE, DELETE, MERGE

데이터를 조회 하거나 새로운 행을 추가, 수정, 삭제 등을 하는 기능을 합니다.

주로 CRUD(CREAT, READ, UPDATE, DELETE)라고 부릅니다.

트랜잭션의 대상이 됩니다.

DDL (data Definition Language) : 데이터 정의어

테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어입니다.

주요 명령어 - CREATE, ALTER, DROP, RENAME, TRANCADE

테이블을 변경하거나 삭제하는 기능을 합니다.

DCL (data Control Language) : 데이터 제어어

데이터에 접근할 수 있는 권한들을 관리하는 명령어 입니다.

주요 명령어 - GRANT, REVOKE

TCL (transaction Control Language) : 트랜잭션 제어어

논리적인 작업의 단위를 묶어서 DML 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어

COMMIT, ROLLBACK, SAVEPOINT

 

 

Transaction

논리적인 일의 단위

한꺼번에 모두 수행되어야 일련의 연산들을 의미

Commit연산

1. Commit 연산은 한개의 논리적 단위(트랜잭션) 대한 작업이 성공적으로 끝났고

데이터베이스가 다시 일관된 상태에 있을 , 트랜잭션이 행한 갱신 연산이 완료된 것을

트랜잭션 관리자에게 알려주는 연산이다.

SAVEPOINT [이름]

현재까지의 트랜잭션을 특정 이름으로 지정하라는 명령

ROLLBACK [TO  SAVEPOINT 이름]

저장되지 않은 모든 데이터 변경 사항을 취소하고 현재의 트랜잭션을 끝내라는 명령

만약 이전에 SAVEPOINT로 지정한 이름이 있으면 그 위치까지 되돌아 간다.

Rollback연산

1. Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 ,

트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해

트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산이다.

2. Rollback시에는 해당 트랜잭션을 재시작하거나 폐기한다.

 

ACID

데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어

Atomicity(원자성)

  1. 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
  2. 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것을 말합니다.

즉, All or Noting의 개념으로서 작업 단위를 일부분만 실행하지 않는다는 것을 의미합니다.

Consistency(일관성)

  1. 트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지하는 것을 말합니다.
  2. 여기서 말하는 일관성이란, 위의 송금 예제에서 금액의 데이터 타입이 정수형(integer)인데, 갑자기 문자열(string)이 되지 않는 것을 말합니다. 즉, 송금 전후 모두 금액의 데이터 타입은 정수형이여야 한다는 것이 일관성입니다.

Isolation(독립성,격리성)

  1. 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것을 말합니다. 즉, 트랜잭션끼리는 서로를 간섭할 수 없습니다.
  2. 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없습니다

Durablility(영속성,지속성)

  1. 성공적으로 수행된 트랜잭션은 영원히 반영이 되는 것을 말합니다.
  2. commit을 하면 현재 상태는 영원히 보장됩니다.

댓글