백앤드 기술면접 - 데이터 베이스 [1]
🔥 스키마
데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술할 메타 데이터의 집합이다.
메타 데이터란 - 어떤 목적을 가지고 만들어진 데이터
1. 외부 스키마 - 사용자나 프로그래머가 데이터베이스의 데이터들을 보기 쉽게 접근 할 수 있도록 논리적으로 정의한 데이터베이스
2. 개념 스키마 - 데이터베이스 안에 테이블 구조이다. 즉 어떤 테이블이 어떤 구성 및 속성을 가지고 있는가 어떤 테이블과의 관계를 가지고 있는가에 대해 정의 하는 것
3. 내부 스키마 - 데이터베이스 프로그램의 구성이다. 내부적으로 어떤 알고리즘을 가지고 하드디스크에 저장이 되는지 등 프로그램 그 자체를 정의 하는 것
🔥 뷰
사용자에게 허용된 자료만을 제한적으로 보여주기 위해 만드는 가상의 테이블이다. 뷰는 저장장치 내에 물리적으로 존재하지 않는다.
1. 단순 뷰 - 하나의 테이블에서 원하는 컬럼들을 조회 하는 것
2. 복합 뷰 - 여러 테이블이 조인되어 만들어 진 뷰
3. 인라인 뷰 - FROM 절 안에 서브쿼리를 사용하여 데이터를 뽑아내는 것
🔥 인덱스 생성시 고려할 사항
1. 인덱스 생성시 유사 인덱스가 있는지 확인
- 유사 인덱스끼리의 경합에 의해 더 느린 인덱스를 실행하여 성능문제 발생
2. 연산자
- !=
- IS NULL
- NOT IN list
- LIKE 날짜 또는 column number
- LIKE '%'로 시작되는 비교 문자열
3. indexed column
- 표현식이나 함수에 의해 수정되는 경우
- 형 변환되는 경우
- 같은 table의 다른 column과 비교되는 경우
🔥 DB에서의 Commit과 Rollback
Commit은 작업 중 이상이 없을 경우 해당 작업을 정상적으로 처리하겠다고 확정하는 하는 것.
Rollback은 작업 중 문제가 생겼을 경우 해당 작업을 취소하고 이전 상태로 돌리는 것이다.
🔥 DB정규화란(개요)
- DB정규화는 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화 시키는 것이다.
- 하나의 릴레이션에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정이다.
- 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이다.
🔥 DB 정규화(목적)
- 데이터 삽입, 변경 삭제를 할 때 이상현상을 제거하며 이후에 데이터베이스 구조 확장 시 재 디자인을 최소화 시키는 것.
- 불필요한 데이터(data redundancy)를 제거해 불필요한 중복을 최소화
- 삽입/갱신/삭제 시 발생할 수 있는 각종 이상 현상을 방지하기 위해서, 테이블의 구성을 논리적이고 직관적으로 함
- 제 1정규형 : 테이블의 컬럼이 원자 값(Atomic Value : 하나의 값)을 갖도록 분해한다.
- 제 2정규형 : 제 1정규형을 만족하고, 기본키가 아닌 속성이 기본키에 완전 함수 종속이도록 분해한다.
- 완전 함수 종속 : 기본키의 부분 집합이 다른 값을 결정하지 않는 것을 의미
- 제 3정규형 : 제 2정규형을 만족하고, 이행적 함수 종속을 없애도록 분해한다.
- 이행적 종속 : A → B, B → C 가 성립할 때 A → C가 성립되는것을 의미
- BCNF 정규형 : 제 3정규형을 만족하고, 함수 종속성 X → Y가 성립할 때 모든 결정자가 X가 후보키가 되도록 분해
🔥 DB 정규화의 장단점
장점
- 데이터베이스 변경 시 이상현상이 발생하는 문제점을 해결할 수 있다.
- 데이터베이스 구조 확장 시 정규화된 데이터 베이스는 그 구조를 변경하지 않아도 되거나 일부만 변경하면 됨
단점
- 릴레이션의 분해로 인해 릴레이션 간의 연산(JOIN 연산)이 많아진다. 이로인해 질의 응답시간이 느려진다.
-정규화를 수행한다는 것은 이상현상을 제거하는 것이다.한 테이블의 데이터 용량이 최소화되는 효과가 있다.
- 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질수도, 느려질수도 있는 특성이 있다.
- 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로, 한 테이블의 데이터 용량이 최소화되는 효과가 있다. 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질수도, 느려질수도 있는 특성이 있다.
🔥 NoSQL이란?
Not Only SQL의 약자로 기존 관계형 DBMS가 갖고 있는 특성 뿐만 아니라 부가적인 기능을 지원하는 것을 의미한다.
빅데이터 시대인 요즘 데이터들이 정형화 되어있지 않는다. 그래서 이를 보다 쉽게 저장하고 처리할 수 있는 구조를 가진 NoSQL 데이터베이스들이 생겨나고 있다.
🔥 Join이란?
한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다.
따라서 조인은 테이블로서 저장되거나, 그 자체로 이용할 수 있는 결과 셋을 만들어 낸다.
🔥 아우터 조인과 이너조인의 차이
이너조인은 교집합을 뜻한다. 양쪽 테이블 집합에서 공통적으로 존재하는 데이터만 조인해서 결과 데이터 집합으로 추출한것이다.
아우터 조인은 left 아우터 조인, right 아우터 조인, full 아우터 조인 3가지가 있다.
outer join은 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 출력하는 방법이다.
full 아우터 조인은 합집합을 뜻한다. 조인 키 컬럼 값이 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터와 한쪽테이블에만 존재하는 데이터 모두 결과 데이터 집합으로 추출한다.
🔥 DB Transaction
트랜젝션이란 데이터베이스의 상태를 변환 시키는 과정에서 여러 기능이 처리 될 때 기능 중에 하나라도 에러가 나면 전체적으로 취소하며 모든 기능이 정상처리가 될 때만 한번에 수행이 되게 하는 것
- 트랜잭션은 작업의 완전성을 보장해준다.
- 즉, 작업들을 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여
- 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능
- 하나의 트랜잭션은 Commit(작업 완료) 되거나 Rollback(취소) 된다.
🔥 트랜잭션의 특성 (ACID)
- 원자성(Atomicity) : 작업이 모두 반영되던지 아니면 전혀 반영되지 않아야 한다.
- 일관성(Consistency) : 실행이 완료되면 언제나 일관성 있는 상태를 유지해야 한다.
- 독립성(Isolation) : 둘 이상 트랜잭션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없다.
- 영속성(Durability) : 완료된 결과는 영구적으로 반영되어야 한다.
🔥 NoSQL이 기존 RDBMS와 다른점
NoSQL은 RDBMS와 다르게 스키마와 관계라는 개념이 없다. 그래서 NoSQL은 Key, Value의 값으로 데이터를 저장하며 데이터를 자유롭게 추가가 가능하다. 잘못하면 중복된 데이터가 들어 갈 수 있다는 단점이 있지만 비정형화 데이터를 관리하는데 있어서는 유리하다. 그에 비해 RDBMS는 데이터들을 정해진 규칙에 의해 데이터를 저장하기 때문에 정형화된 데이터를 넣고 관리하는데 있어서 유리하다