---
# System prepended metadata

title: kmg Database 답변
tags: [Database 답변]

---

# kmg Database 답변

###### tags: `Database 답변`

## Database
#### 💡 Database의 특징을 설명하시오.
일관성 있는 데이터를 여러 사람들에게 실시간으로 제공할 수 있습니다.

#### 💡 Database 설계 시, 고려할 점을 설명하시오.
데이터의 정확성과 일관성을 고려해야 합니다.
데이터의 정확성이란 데이터의 중복이나 누락이 없는 상태를 말합니다.
데이터의 일관성은 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태를 의미합니다.

#### 💡 Schema가 무엇인가요?
데이터베이스에 어떤 구조로 데이터가 저장되는지를 정의한 것입니다.
속성, 개체, 관계, 제약조건들로 기술됩니다.

#### 💡 DBMS는 무엇인가요?
데이터베이스를 관리하는 소프트웨어 입니다.

#### 💡 데이터 모델링이 무엇인가요?
복잡한 현실 세계의 데이터를 단순화해서 컴퓨터 세계의 데이터베이스로 변환하는 과정입니다.


## Normalization
#### 💡 정규화를 왜 진행하나요?
종속적으로 잘못 설계된 관계형 스키마를 분해하여 하나의 릴레이션에 표현하기 위해서 입니다. 정규화를 거치지 않으면 데이터의 중복성 문제로 인해 이상 현상이 발생합니다.

#### 💡 모든 테이블에 정규화를 진행하나요?
아닙니다. 항상 같이 사용되는 속성값이 정규화로 인해 각각 다른 테이블로 쪼개진다면 항상 join연산을 해야합니다. 그렇게 되면 연산횟수의 증가로 성능 저하 문제가 발생할 수 있습니다. 이런 경우에는 역정규화를 실행합니다.


#### 💡 이상현상에 대해 설명하시오.
이상현상은 정규화를 거치지 않아 데이터가 불필요하게 중복되어 생기는 문제를 의미합니다.
종류에는 삽입 이상, 삭제 이상, 갱신 이상이 있습니다.
삽입 이상은 릴레이션에 데이터를 삽입할 때 원하지 않은 값들도 함께 삽입되는 현상을 의미합니다.
삭제 이상은 릴레이션에서 튜플을 삭제할 때 다른 값들도 함께 삭제되는 현상입니다.
갱신이상은 릴레이션에서 튜플의 속성값을 갱신할 때 일부 튜플만 갱신되는 현상입니다.


#### 💡 정규화 단계별 과정에 대해 설명하시오.
제 1정규형은 도메인을 원자값으로 변경하는 것입니다.
제 2정규형은 부분 함수적 종속을 제거하는 것입니다.
제 3 정규형은 이행적 함수 종속을 제거하는 것입니다.
BCNF 는 결정자이면서 후보키가 아닌것을 제거하는 것입니다.
제 4 정규형은 다치 종속성을 이용하는 것이고, 제 5 정규형은 조인 종속성을 이용하는 것입니다.

## RDBMS/NoSQL
#### 💡 관계형 데이터베이스의 특징
스키마에 따라서 데이터를 관리하므로 정교한 검색이 가능합니다. 하지만 부하의 분산이 어렵다는 단점이 있습니다.
#### 💡 무결성 제약조건이란 무엇인가?
데이터가 정확성과 일관성을 유지하기 위해서 가져야할 조건들을 의미합니다.
개체 무결성은 기본키가 Null이면 안되고 중복 값을 가지면 안되는 것을 의미합니다.
참조 무결성은 외래키 값이 Null 또는 참조 테이블의 기본키 값과 동일해야 함을 의미합니다.
도메인 무결성은 속성값이 도메인에 속한 값이어야 함을 의미합니다.

#### 💡 View란 무엇인가?
사용자에게 접근이 허용된 데이터만 보여주기 위해 만들어진 가상 테이블입니다.

#### 💡 SQL과 NoSQL의 차이점에 대해 설명하시오.
sql은 스키마에 따라 데이터를 저장하기 때문에 검색에 용이합니다. 반면 스키마가 없는 NoSQL은 방대한 양의 데이터를 자유롭게 저장할 수 있습니다.
#### 💡 Select 쿼리 실행 순서
<img src = "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRsvSY%2FbtqCEPbs2Sv%2Fq0kvql0BKJnxitoOFkBbGK%2Fimg.png">

![](https://i.imgur.com/5BQKOpS.png)

#### 💡 Subquery와 Join의 차이점
서브쿼리는 다른 쿼리 내부에 포함되어 있는 select문을 의미합니다. Join이란 2개의 테이블을 특정 속성을 통해 연결하는 것입니다. 

#### 💡 Subquery의 성능은?
MySQL 5.5 이하의 버전에서 IN절에 사용하는 경우 EXISTS로 테이블을 FULL SCAN 하여 속도가 느립니다. MySQL 5.6부터는 최적화가 되어 있지만 다양한 조건에 최적화되어 있지 않아 가능한 join문 2개로 푸는 것이 더 효과적입니다.

#### 💡 PK와 FK 설명해주세요.
PK는 최소성, 유일성 특징을 가지며 null 값을 가질 수 없는 키입니다.
FK는 릴레이션 간의 관계를 표시하는 키입니다. FK는 null값이거나 참조하는 테이블의 PK 값이어야 합니다.
## Transaction
#### 💡 트랜잭션이란 무엇이고 특성에 대해 설명하시오.
데이터베이스의 상태를 변화시키기 위해 한번에 수행되어야 할 연산들입니다. 원자성, 일관성, 고립성, 지속성의 특징을 가지고 있습니다.

#### 💡 잠금기법(Locking)에 대해 설명하시오.
트랜젝션 여러개가 동시에 수행될 때 발생할 수 있는 문제를 해결하기 위한 방법입니다. 프랜젝션에 Lock을 설정하여 Lock이 존재하는 경우 다른 트랜젝션이 수행될 수 없도록 합니다. 
#### 💡 교착상태(Deadlock)란 무엇인가? 
여러 트랜젝션이 실행되지 못하고 무기한 대기중인 상태를 의미합니다.

#### 💡 교착상태의 빈도를 낮추는 방법에는 무엇이 있나요?
예방방법과 회복방법이 있습니다.
예방법은 트랜잭션 시작 전, 필요한 데이터에 LOCK을 모두 걸어주는 방법입니다.
회복법은 자원 할당 시, 타임스탬프를 사용하여 시간 순서대로 제어하는 기법입니다.

## Index
#### 💡 Index란 무엇인가?
데이터에 빠르게 접근하기 위해 <키값, 포인터> 쌍으로 구성되는 데이터 구조입니다.

#### 💡 데이터베이스의 Index 구조에 대해 설명하시오.
해쉬테이블과 B+Tree 구조가 있습니다. 
* 해쉬테이블은 키 값에 해쉬함수를 적용하여 나온 주소값과 매칭하는 기법입니다. 하지만 부등호 연산이 많은 db에는 효과적이지 않은 방법입니다. 
* B+Tree는 LinkedList로 연결된 구조입니다. 연결된 노드를 따라가면서 일치하는 값으로 가면 읽고, 일치하지 않는 값이 나오면 즉시 중지합니다. B+Tree는 부등호 연산에 효율적입니다.

##### 왜 효과적일까요?--> 흠?


#### 💡 Index를 따로 설정하지 않은 경우의 테이블은 어떤가요?
인덱스를 설정하지 않아도 기본적으로 PK값이 인덱스로 설정되어 있습니다.

#### 💡 Index 사용 시 장단점과 사용하면 좋은 경우와 나쁜 경우에 대해 설명하시오.
인덱스의 장점은 데이터의 조회가 빠르다는 점이고, 단점은 추가 저장공간이 필요하다는 점입니다.
인덱스는 삽입, 삭제, 갱신이 자주 발생하지 않는 테이블, 데이터 중복도가 낮은 칼럼에 사용하면 좋습니다.
삽입, 삭제, 갱신이 발생하게 되면 인덱스 테이블을 재정렬해야합니다.이는 오히려 성능 저하로 이어질 수 있습니다.

#### 💡 모든 칼럼에 Index를 사용하면 좋나요?
인덱스는 인덱스로 설정된 칼럼을 추가 저장 공간에 저장합니다. 그렇기 때문에 모든 칼럼에 인덱스를 넣게 되면 저장 공간을 많이 차지하게 됩니다. 또한, 삽입, 삭제, 갱신이 발생하게 되면 인덱스 테이블을 재정렬해야합니다.이는 오히려 성능 저하로 이어질 수 있습니다.