내일 면접이다....(2)

박주윤·2022년 11월 23일
0

DB 지식

목록 보기
2/2

하아... 내가 모르는게 너무 많다.

일단 하나하나 천천히 적어보자.

2. 트랜잭션에 대해 설명해봐요

DB의 상태변화가 일어나는 작업의 최소 단위 입니다. 상태변화란 DML을 사용한 데이터베이스 조작입니다. 작업의 최소 단위인 이유는 해당 작업단위로 커밋 혹은 롤백되어 그 이전 혹은 완전히 실행된 그 이후로만 저장되며 그 중간단계에서의 정지는 있을 수 없습니다.

2-1. 트랜잭션은 어떤 특징을 갖고 있나요?

원자성, 일관성, 독립성, 지속성이라는 4가지 특징이 있습니다.
원자성은 앞서 말씀드린 트랜잭션의 정해진 단위 만큼만 데이터베이스의 변경이 이루어지거나 이루어지지 않거나 두가지의 상태만 존재합니다.
일관성은 커밋 이전과 이후, 데이터베이스의 상태가 변경이 없어야 합니다.
예를들어, 주민번호가 기본키인 테이블은 주민번호가 없는 튜플을 삽입할 수 없습니다. 기본키 원칙에 위배되기 때문입니다.
독립성은 각각의 트랜잭션이 독립적임을 의미합니다. 만약 거의 동시에 트랜잭션이 이루어진다고 하더라도, 늦은 트랜잭션은 다른 트랜잭션의 종료 이후에 실행 순서에 맞게 진행됩니다.
지속성은 트랜잭션 결과는 지속되어야 하는 특성입니다. 한번 트랜잭션이 커밋된 데이터는 다음 트랜잭션 이전까지 데이터의 형태가 일정합니다.

3. 인덱스에 대해 설명해봐요

인덱스는 데이터의 탐색을 용이하게 하는 자료구조입니다. 해당 자료구조는 테이블 이외에 저장공간이 추가로 필요합니다. 실제 사전, 성경, 교과서 등 순서가 있는 책들은 인덱스를 가지고 있습니다. 저희가 책을 볼때는 인덱스를 활용해서 원하는 내용을 더 빠르게 찾을 수 있습니다. 실제 데이터베이스에서도 인덱스를 활용해 원하는 데이터를 좀 더 빠르게 찾을 수 있습니다.

3-1. 좀 더 자세히

데이터베이스 참고서에서 저희는 원하는 과목에 대해 대한 정보를 찾기 위해 목차로 가서 원하는 과목의 페이지를 탐색합니다. 실제 데이터베이스의 인덱스에도 이러한 구조가 적용됩니다. 해시테이블 자료구조를 활용하면 키값을 입력하여 해당 위치의 자료를 바로 찾을 수 있습니다. 실제 저희가 책에서 몇페이지로 가라는 정보를 찾듯 인덱스에서도 몇번째 자료로 가라는 데에서 WHERE절을 자주 사용하는 컬럼임을 알 수 있습니다. 만약 목차페이지의 내용이 자주 바뀐다면 데이터의 탐색에 혼란이 올 수 있습니다. 실제 인덱스 컬럼은 update,delete가 자주 일어나는 컬럼이면 데이터를 기존의 인덱스를 삭제하거나 업데이트 하는것이 아니라, 사용하지 않는다고 저장합니다. 따라서 데이터의 튜플 수에 비해 인덱스의 크기가 커진다면 오히려 효율은 떨어집니다.

4. 뷰에 대해 설명해봐요

뷰는 가상의 테이블입니다. 가상 테이블을 보여주는 이유는 실제 테이블의 모든 정보를 보여주는 데에는 보안상의 문제가 발생할 수 있기 때문입니다. 테이블을 생성하듯 CREATE VIEW 명령어로 생성합니다. 또한 실제 물리적인 저장소를 사용하지 않습니다.

4-1 뷰의 특징 말해봐요

뷰는 가상의 테이블입니다. 실제 물리공간에 존재하지 않습니다. 그렇기 때문에 뷰만을 위한 인덱스는 존재하지 않습니다. 인덱스는 물리공간이 필요하기 때문입니다. 또 DML에 제약이 걸립니다. 뷰를 생성한 테이블에는 있지만 뷰에는 없는 컬럼은 SELECT이 제한됩니다. 또 NOT NULL 조건이 있는 컬럼이 뷰에 선언되어 있지 않다면 INSERT를 할 수 없습니다.

5. 정규화 해서 문제 해결했다고 자소서에 썼죠? 정규화 말해봐임마.

이상현상이 발생하는 테이블을 분리하여 이상 현상을 없애는 과정입니다.
릴레이션을 분리하여 데이터의 삽입, 삭제, 갱신 이상을 해결할 수 있습니다. 정해진 정규화 원칙에 맞는 정도를 정규형 이라고 합니다. 예를들어 제 3정규화 원칙에 맞게 릴레이션이 분해되면 3정규형입니다.

5-1. 그게 다야?

제가 해본 정규화는 3정규화 까지 입니다.

5-1-1. 제 1 정규형

1정규형부터 말씀드리겠습니다.
1정규형은 모든 컬럼이 원자값을 가져야 합니다.
한개의 컬럼에선 한개의 값만을 가져야 합니다.
예를들어 출생 년도와 이름 두개의 속성을 가진 테이블이 있다고 가정하면

92년생, [박주윤, 박은빈]

이런 상태가 되면 안됩니다. 92년생이라는 출생년도 속성값 하나에 대응하는 이름값은 박주윤이거나 박은빈 둘중 하나만 검색되어야 합니다.

92년생, 박주윤
92년생, 박은빈

이렇게요

5-1-2. 제 2 정규형

1정규형을 만족한다는 전제 하에 제 2 정규화를 진행합니다. 2정규형은 어려운 말로다가 완전 함수 종속이어야 합니다. 다르게 말하면 부분 함수 종속을 제거해야 합니다. 이 말은 기본키의 일부분이 결정자가 되어서는 안된다는 것입니다.

제가 자주가는 스타벅스의 매출테이블을 예시로 들겠습니다.

아.... 자러갑니다. 내일 10시 면접입니다.
내일의 나 화이팅

0개의 댓글