이번 포스팅은 면접 질문 리스트 DB편!

알고있는 개념이여도 다른사람에게 설명하기에는 부족하다고 느껴서 다시 개념을 정리하려고한다!


관계형 데이터 베이스 특징

- 모든 데이터를 2차원 테이블로 표현
- 테이블은 row(record, tuple)과 column(field, item)으로 이루어진 기본 데이터 저장 단위
- 상호 관련성을 가진 테이블(table)의 집합
- 만들거나 이용하기도 비교적 쉽고, 확장이 용이하다는 장점
- ER모델에 따라, DB가 만들어지며, 데이터베이스는 하나 이상의 테이블로 구성 (ER모델에서 엔티티를 기반으로 테이블이 만들어짐)


스키마

속성, 개체, 관계에 대한 정의와 이들이 유지해야 할 제약조건을 기술한 것

: 데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것

- 개체의 특성을 나타내는 속성(attribute)
- 속성들의 집합으로 이루어진 개체(entity)
- 개체 사이에 존재하는 관계(relation)
  • 개념스키마 - 전체적인 뷰

: DB전체를 기술 한 것 (조직의 모든 응용시스템에서 필요로 하는 개체관계, 제약조건들 포함)

- 데이터 베이스의 전체적인 논리적 구조
- 데이터 베이스당 하나만 존재
  • 내부 스키마

: 물리적인 저장장치 입장에서 DB가 저장되는 방법을 기술한 것

- 데이터 베이스의 물리적 저장구조를 정의
- 데이터의 실제 저장방법을 기술
- 시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마
  • 외부 스키마 = 서브 스키마

: 사용자나 응용 프로그래머가 개인의 입장에서 필요한 데이터베이스의 논리적 구조를 정의

- 실세계에 존재하는 데이터들을 어떤 형식, 구조, 배치화면을 통해 사용자에게 보여줄 것인가를 정의
- 일반 사용자는 질의어를 이용 DB를 쉽게 사용


PK, FK, ER모델

- primary key : 테이블에서 각Row를 유일하게 구분하는 Column-key
- Foreign Key : 하나의 테이블에 있는 Column으로는 그 의미를 표현할 수 없는 경우, 다른 테이블의 primary-key column의 값을 반드시 참조해야하는 키
- ER(entity-relation)모델 : 개체-관계 모델, 데이터베이스를 설계할 때 사용하는 모델 중 하나


참조 무결성이란?

- 관계 데이터베이스 관계 모델에서 관련된 테이블 간의 일관성
- 사용자의 실수로 관련 데이터가 삭제되거나 수정되는 것을 막아준다.
- 참조 무결성 제약 조건 : 기본테이블에서 일치하는 필드가 기본키이거나 고유 인덱스를 갖고있거나 관련 필드의 데이터 형식이 같아야 한다.


트랜잭션(Transaction)이란?

: 하나의 논리적 기능을 수행하기 위한 작업의 단위

<트랜잭션의 특징>

- 1) 원자성(atomicity) : 연산을 전부 수행하거나 전부 수행하지 않거나 둘 중 하나만 가능한 원자성의 특징을 가진다.
- 2) 일관성(consistency) : 실행을 성공적으로 완료하면 일관성있는 데이터베이스 상태로 변화한다.
- 3) 고립성(isolation) : 트랜잭션이 실행되고 있을 때 연산 중간에 다른 트랜잭션이 접근할 수 없다.
- 4) 지속성(durability) : 트랜잭션이 성공적으로 실행을 완료하면 결과는 계속해서 지속된다.


Commit 과 Rollback

- commit : 작성한 쿼리문에서 update, delete, insert를 수행했을 때, 그 쿼리문 수행결과에 대해 확정을 짓겠다는 것
- rollback : 쿼리문 수행 이전으로 원상복귀 하겠다는 뜻


DB에서 index를 사용하는 이유

- 인덱스는 데이터를 논리적으로 정렬하여 검색과 정렬 작업의 속도를 높이기 위해 사용된다.
- 기본키에 대해서는 항상 DBMS가 내부적으로 정렬된 목록을 관리하기에 특정 행을 가져올 때 빠르게 처리된다. 하지만 다른 열의 내용을 검색하거나 정렬시에는 하나하나 대조를 해보기 때문에 시간이 오래걸린다.
- 단점 : 인덱스를 사용하면 데이터를 가져오는 작업의 성능은 향상시킬 수 있지만 데이터 삽입, 변경 등이 일어날 때 매번 인덱스가 변경되기 때문에 성능이 떨어질 수 있다.


NoSQL

- 스키마가 없다. (데이터의 관계와 정해진 규격이 없음)
- 관계 정의가 없으니 join이 불가능 (하지만 reference와 같은 기능으로 비슷하게 구현은 가능)
- 트랜잭션을 지원하지 않는다.
- 분산처리(수평적 확장)의 기능을 쉽게 제공
- 대부분의 NoSQL DB는 분산처리기능을 목적으로 나왔기 때문에 분산처리 기능을 자체 프레임워크에 포함하고 있다.