# DB 연습문제 답

틀릴 수도 있다!

## 7장 정규화

1. 정규화의 필요성으로 거리가 먼 것은? / 2. 중복 데이터의 활성화

   > 중복 데이터의 활성화가 아니라 중복 데이터를 제거하는 과정이다.

2. 관계 데이터베이스의 정규화에 대한 설명으로 옳지 않은 것은? / 2

   > 정규화의 목적은 한 릴레이션안에 존재하는 여러 함수 종속성들을 여러개의 릴레이션으로 분해하는 것이다.

3. 정규화 과정에서 발생하는 이상현상에 관한 설명으로 옳지 않은 것은? / 2

   > 여러 개의 릴레이션을 하나로 결합하는 것이 아니다. 2번 해설 참고

4. 데이터의 중복으로 인해 릴레이션 조작 시 발생하는 이상현상에 관한 설명 중 옳지 않은 것은? / 3

   > 모순이상이 아니라 수정이상이다

5. 제 1정규형에서 제 2정규형이 되기 위한 조건은? / 4

   > 외워두자

6. 제 2저규형에서 제 3정규형이 되기 위한 조건은? / 1

   > 22

7. 제 3정규형에서 BCNF가 되기 위한 조건은? / 4

   > 33

8. BCNF에 대한 옳은 설명으로만 짝지어진 것은? / 1

   > 복합 속성 : 더 분해가 가능한 속성이지만 합쳐 놓은 속성을 이야기함.
   >
   > 즉 주소는 시, 군, 구로 나눌 수 있지만 BCNF에서는 합쳐도 별 상관이 없다.

9. 다음 중 BCNF를 만족하기 위한 조건으로 옳게 짝지어진 것은? / 2

   > BCNF를 만족하려면 1, 2, 3정규형을 전부 만족해야 한다.
   >
   > ㄱ은 BCNF, ㄴ은 3정규형, ㄷ은 2정규형, ㄹ은 1정규형이다.

10. 다음과 같이 어떤 릴레이션 R과 그 릴레이션에 존재하는 종속성이 주어졌을 때 릴레이션 R은 몇 정규형인가? / 3

    > 제 3정규형을 만족하지만 BCNF에서 문제가 발생한다.

11. 다음 릴레이션에서 함수 종속성과 키를 찾아보시오. 필요한 전체사항을 포함하여 답하시오. /

    전제조건

    - 한 학생은 한 학기에 여러 과목을 들을 수 있다.

    - 한 강좌는 한 학기마다 성적을 정한다.

    기본키 : (학번, 강좌번호, 학기)

    (학번, 강좌번호, 학기) → 성적

12. 다음 릴레이션에서 AB는 후보키가 될 수 있는가? 아니라면 후보키를 찾아보시오 / (A, B, D)

    > 후보키를 찾으려면 모든 속성을 결정할 수 있는 컬럼들의 최소 집합을 고르면 된다.

13. 다음 릴레이션 R을 보고 오른쪽 함수 종속성 중에서 성립하는 것을 모두 고르시오 /

    B → D, C → A, C → B, C → D, D → B

    > 함수 종속성을 성립하려면 우리가 수학시간에 배운 함수 개념을 생각해보자. 그 함수를 만족하면 종속성이 성립한다. 같은 입력에는 같은 출력이 나와야 하고 다른 입력에 다른 출력, 같은 출력 둘다 가능하다.

14. 다음 릴레이션 R을 보고 아래 함수 종속성이 성립하는지 답하시오. 그 이유도 설명하시오 / 스킵

15. 아래의 릴레이션을 R1(A, B, C)을 릴레이션 R2, R3로 분해한 후 ... / (1, 1, 2), (1, 2, 1)가 생성됨

    A로는 결정자 (즉 후보키)가 아니므로, A값으로는 B와 C컬럼을 정확히 알 수 없다.

16. 다음 릴레이션은 몇 정규형인지 말하고 BCNF로 정규화하시오 / 제 2정규형,

    (물품번호, 행사번호) → 가격

    물품번호 → 제조사, 스타일

    즉 릴레이션으로

    (물품번호, 행사번호, 가격), (물품번호, 제조사, 스타일)

    > BCNF정규형 문제는 일어나지 않는다.

17. 다음 릴레이션 X에서 성립하는 정규형은 무엇인가? / (1) : 제 2정규형, (2) : 제 1정규형

    > (1) : 궁극적으로 후보키가 아닌 속성이 기본키에 **완전 함수 종속**한다. (H, I) → J → M 이니 (H, I) → M 인 셈.
    >
    > (2) : (D, O) → N 이지만 D → N 이다. 즉 N은 기본키의 모든 속성에 종속하지 않고 부분집합인 D에만 종속됨.
    >
    > 2번에서 기본 키에 대한 언급이 없지만 (D, O) → N, T, C, R, Y를 보고 기본키임을 유추해냈다.

18. 다음은 배송 물품에 대한 릴레이션이다.

    - 후보키를 찾으시오 / (shipname, date), (voyagelID, date)

    - 제 2정규형으로 정규화하시오 / (shipname, date, voyagelID, port, cargo), (shipname, shiptype)

      > 기본키를 (shipname, date)로 정한 뒤, (shipname, date)에 완전함수 종속하지 않는 속성 (shiptype)을 외부로 꺼낸다

    - 제 3정규형으로 정규화하시오 / (shipname, date, voyagelID, port), (voyagelID, cargo), (shipname, shiptype)

      > (shipname, date) → voyagelID, voyagelID → cargo이므로 AB, BC로 분리한다.

    - BCNF로 정규화하시오 / (voyagelID, shipname), (voyagelID, date, port), 나머지 둘

      > BCNF를 정규화 하는 방법은 일반 컬럼이 후보키를 결정하는 경우 (voyagelID → shipname)를 찾는다.
      >
      > voyagelID, shipname으로 구성된 릴레이션 하나, voyagelID와 나머지 속성들로 구성된 릴레이션 하나로 수정한다. (voyagelID, date, port)

19. 릴레이션 Book 에서 함수 종속성은 다음과 같다.

    - Book 릴레이션은 몇 정규형인가? 그 이유를 설명하시오 / 제 1정규형. 기본 키에 완전 함수 종속이 아님

      > 여기서 (booktitle, authorname)를 기본키로 봐야한다. 릴레이션 전체를 결정할 수 있는 최소의 집합이다.
      >
      > 하지만 booktype은 기본 키의 부분집합 booktitle에 종속되고, authorgroup도 authorname에 종속된다.

    - 정규화를 수행하시오

      - 제 2 정규화 / (booktitle, authorname, publisher), (booktitle, booktype, listprice), (authorname, authorgroup)

        > 그냥 기본 키에 완전 함수 종속하지 않는 속성들을 전부 꺼냈다.

      - 제 3 정규화 / (booktitle, booktype), (booktype, listprice), 나머지 둘

        > booktitle → booktype, booktype → listprice로 제 3정규형 문제점이 나타나므로 AB, BC로 나눈다.

      - BCNF / 일어나지 않는다.

20. 다음은 부품과 공급자에 대한 릴레이션 Part이다. 물음에 답하시오.

    - 함수 종속성을 찾아보시오 / supplier → suppaddress, (partnumber, supplier) → price,

      partnumber → description

      > 속성의 명을 풀이해가면서 감으로 때려 맞춰야 한다.

    - 릴레이션 part는 몇 정규형인지 답하시오 / 제 1정규형

      > 현재 후보키는 (partnumber, supplier)이다. 하지만 suppaddress는 supplier에 종속되고 description도 partnumber에 종속되니 부분함수 종속성이 생긴다. 즉 2정규형은 만족한다. 다만 릴레이션의 데이터를 보면 도메인이 원자값이니 1정규형은 만족한다.

    - 다음과 같이 분해를 했을 때 각각의 릴레이션은 몇 정규형인지 답하시오. / R1:제 1정규형, R2:모두 만족

      > 현재 R1의 후보키는 (partnumber, supplier)이다. 하지만 description은 partnumber에 종속되기 때문에 제 2정규형을 만족하지 못한다.
      >
      > R2는 모두 만족한다.

    - 위(세 번째 문제)의 릴레이션에서 분해가 더 필요한가? 더 필요하면 해봐라 / (partnumber, supplier, price), (partnumber, description)

      > 현재 AC → D, B / A → B이므로 제 2정규형 규칙으로 AB, ACD로 바꾼다.
