정규화

  1. 이상 현상에 대해서 설명해 주세요.

    이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 논리적으로 생기는 오류를 말합니다. 이상 현상은 갱신 이상(Modification ANomaly), 삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly)

    Untitled

    1. 삽입 이상 : 자료를 삽입할 때 의도하지 않은 자료까지 삽입해야만 자료를 테이블에 추가가 가능한 현상

    강의를 아직 수강하지 않은 새로운 학생을 삽입할 경우 강의 코드와 강의명 속성에는 null값이 들어가야 하는 문제가 생깁니다.

    1. 갱신 이상 : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상

    강의 코드가 "AC3"인 김현수의 전화번호를 수정할 경우, 3번째 튜플의 데이터만 수정될 것입니다. 그러면 3, 4번째 튜플은 같은 사용자의 데이터임에도 불구하고 전화번호가 다르게 됩니다.

    1. 삭제 이상 : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제되어버리는 현상

    강의코드가 "AC1"인 데이터베이스 개론 강의를 삭제하게 되면, 이태호 학생의 데이터까지 삭제되어버립니다.

  2. 정규화에 대해서 설명해 주세요.

    데이터베이스 정규화는 데이터베이스 내의 데이터 구조를 조직화하고 최적화하는 과정이다. 정규화를 하는 목적은 데이터 중복을 제거하고, 효율성을 향상시키며, 데이터 무결성을 보장하기 위함이다.

  3. 정규화의 장단점에대해 설명

    1. 장점 1. 데이터베이스 변경 시 이상현상 제거
    2. 효과적인 검색 알고리즘 생성
    3. 데이터 구조의 안정성, 무결성 유지
    4. 단점 1. Join연산의 증가로 응답 시간이 저하
  4. 반정규화란?

    정규화된 엔티티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법

  5. 정규화의 종류에 대해서 말해보세요.

    Untitled

    NF = Normal Form (정규형)

    1) 제 1정규화 (1NF)

    " 테이블 내의 속성값은 원자값을 가지고 있어야 한다. "

    1NF는 다음을 만족해야 한다.

    1. 각 컬럼이 하나의 속성만을 가져야 한다.
    2. 하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야 한다.
    3. 각 컬럼이 유일한(unique) 이름을 가져야 한다.
    4. 칼럼의 순서가 상관없어야 한다.

    2) 제 2정규화 (2NF)

    부분 함수 종속을 제거한다. (완전 함수 종속 관계)"

    2NF는 다음을 만족해야 한다.

    1. 제 1정규형을 만족해야 한다.
    2. 모든 컬럼이 부분적 종속이 없어야 한다. 즉, 모든 컬럼이 완전 함수 종속을 만족해야 한다.

    3) 제 3정규화 (3NF)

    이행 함수 종속을 제거한다. "

    3NF는 다음을 만족해야 한다.

    1. 제 2정규형을 만족해야 한다.
    2. 기본키를 제외한 속성들간의 이행 종속성 (Transitive Dependency)이 없어야 한다.

    4) 보이스-코드 정규화 (BCNF)

    " 결정자가 후보키가 아닌 함수 종속을 제거한다. "

    BCNF는 다음을 만족해야 한다.

    1. 제 3정규형을 만족해야 한다.
    2. 모든 결정자가 후보키 집합에 속해야 한다.

    5) 제 4정규화 (4NF)

    다치 종속을 제거한다. "

    4NF는 다음을 만족해야 한다.

    1. BCNF를 만족해야 한다.
    2. 다중값 종속(다치 종속)이 없어야 한다.

    6) 제 5정규화 (5NF)

    조인 종속을 제거한다. "

    5NF는 다음을 만족해야 한다.

    1. 4NF를 만족해야 한다.
    2. 더 이상 비손실 분해를 할 수 없어야 한다.
  6. 함수적 종속성이란 무엇인가요? 속성(attribute) X의 값 각각에 대해 시간에 관계없이 항상 속성(attribute) Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수 종속이라 하고, X → Y라고 표기합니다.

인덱스

  1. 인덱스란 무엇인가요? 어떻게 동작 하나요?

    인덱스는 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료구조이다.

    특정 컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다. 또한, 인덱스 생성 시 오름차순으로 정렬하기 때문에 정렬된 주소체계라고 표현할 수 있다.

    인덱스를 책에서의 목차라고 생각하면 이해하기 쉽다. 책에서 원하는 내용을 찾을 때 목차나 색인을 이용하면 훨씬 빠르게 찾을 수 있듯이 테이블에서 원하는 데이터를 찾기 위해 인덱스를 이용하면 빠르게 찾을 수 있다. 그러므로

    데이터=책의 내용

    인덱스=책의 목차

    물리적 주소=책의 페이지 번호

    라고 생각하면 된다.

  2. 인덱스를 사용하는 이유와 장단점에 대해 설명해 주세요

    📎 장점: 인덱스를 사용하는 이유

    👉 데이터가 정렬되어 있기 때문에 테이블에서 검색과 정렬 속도를 향상시킨다.

    👉 인덱스를 사용하면 테이블 행의 고유성을 강화시킬 수 있다.

    👉 시스템의 전반적인 부하를 줄일 수 있다.

    📎 단점: 인덱스 사용시 주의할 점

    👉 인덱스의 가장 큰 문제점은 정렬된 상태를 계속 유지시켜야 한다는 점이다.

    인덱스가 적용된 컬럼에 정렬을 변경시키는 INSERT, UPDATE, DELETE 명령어가 수행된다면 계속 정렬을 해주어해서 그에 따른 부하가 발생한다. 이런 부하를 최소화하기 위해 인덱스는 데이터 삭제라는 개념에서 인덱스를 사용하지 않는다 라는 작업으로 이를 대신한다.

  3. 인덱스를 사용하면 좋은 경우와 사용을 피해야 하는 경우를 설명해 주세요. + 어떤 테이블에 인덱스를 사용하면 좋은지

    👉 무조건 인덱스 스캔이 좋은 것은 아니다

    검색을 위주로 하는 테이블에 인덱스를 생성하는 것이 좋지만 무조건 인덱스가 검색에 좋은 것은 아니다. 예를 들어, 1개의 데이터가 있는 테이블과 100만개의 데이터가 들어 있는 테이블이 있다고 하자. 100만 개의 데이터가 들어있는 테이블이라면 풀 스캔보다는 인덱스 스캔이 유리하겠지만, 1개의 데이터가 들어있는 테이블은 인덱스 스캔보다 풀 스캔이 더 빠르다.

    👉 속도 향상을 위해 인덱스를 많이 만드는 것이 좋지 않다.

    인덱스를 관리하기 위해서는 데이터베이스의 약 10%에 해당하는 저장공간이 추가로 필요하다. 때문에 너무 많이 인덱스를 생성하면 하나의 쿼리문을 빠르게 만들 수 있지만 대신에 전체적인 데이터베이스의 성능 부하를 초래한다. 때문에 무조건적인 인덱스 생성보다 SQL문을 효율적으로 짜고, 인덱스 생성은 마지막 수단으로 사용해야한다.

  4. 테이블의 어떤 키에 인덱스를 거는 것이 좋은지?

    1) 핵심적인 기준 4가지

    인덱스는 한 테이블당 보통 3~5개가 적당합니다.

    (정규화 정도나 테이블의 목적에 따라서는 개수가 달라질 수도 있습니다.)

    아래 4가지 기준을 사용하여 기준에 부합하는 컬럼을 인덱스로 설정하는 것이 좋습니다.

  5. 인덱스의 알고리즘에는 어떤 것들이 있나요? 인덱스는 여러 자료구조를 이용해서 구현하 수 있는데, 대표적인 자료구조로 해시 테이블과 B+Tree가 있다.

  6. Table Full Scan과 Index Range Scan 을 설명해주세요.

  7. 클러스터드 인덱스와 넌클러스터드 인덱스란 무엇인가?

트랜잭션

  1. 트랜잭션이란 무엇인가요? 4가지 원칙을 포함해서 설명해 주세요.
  2. 트랜잭션의 동작 과정에 대해 설명해 주세요
  3. 트랜잭션의 격리 수준과 각 수준에서 발생할 수 있는 문제들에 대해 말해보세요.