
본 게시글은 오라클로 배우는 데이터베이스 개론과 실습 2판 - 연습문제 7장 풀이입니다. 제가 이 책을 공부하면서 풀었던 풀이의 흔적이므로 정답이 아닐 수 있습니다. 혹여나 틀린 부분이 있어 오류를 댓글로 지적해주신다면 감사하겠습니다.
- 정규화의 필요성으로 거리가 먼 것은?
(1) 데이터 구조의 안정성 최대화
(2) 중복 데이터의 활성화 → 중복 데이터를 최소화하는 데 목적이 있음
(3) 데이터 수정, 삭제 시 이상현상의 최소화
(4) 테이블 불일치 위험의 최소화
- 관계 데이터베이스의 정규화에 대한 설명으로 옳지 않은 것은?
(1) 정규화를 거치지 않으면 여러 가지 다른 종류의 정보가 하나의 릴레이션에 표현되기 때문에 릴레이션을 조작할 때 이상현상이 발생할 수 있다.
(2) 정규화의 목적은 각 릴레이션에 분산된 종속성을 하나의 릴레이션에 통합하는 것이다. → 종속성을 적절하게 분리하여 데이터 중복과 이상현상을 최소화하는 것임
(3) 이상현상은 속성 간에 존재하는 함수 종속성이 원인이다.
(4) 정규화가 잘못되면 데이터의 불필요한 중복을 야기하여 릴레이션을 조작할 때 문제가 된다.
- 정규화 과정에서 발생하는 이상현상에 관한 설명으로 옳지 않은 것은?
(1) 이상현상은 속성 간에 존재하는 여러 종류의 종속관계가 하나의 릴레이션에 표현되어 있을 때 발생한다.
(2) 속성간의 종속관계를 분석하여 여러 개의 릴레이션을 하나로 결합하여 이상현상을 해결한다. → 정규화는 릴레이션을 분할하여 종속성을 적절히 관리함으로써 이상현상을 해결함. 결합하지 않음
(3) 삭제이상, 삽입이상, 수정이상이 있다.
(4) 정규화는 이상현상을 제거하기 위해서 중복성 및 종속성을 배제시키는 방법을 사용한다.
- 데이터의 중복으로 인해 릴레이션 조작 시 발생하는 이상현상에 관한 설명 중 옳지 않은 것은?
(1) 투플 삭제 시 연쇄삭제 현상으로 인한 정보의 손실을 삭제이상이라고 한다.
(2) 어떤 데이터를 삽입할 때 불필요하고 원하지 않는 데이터도 함께 삽입해야 하거나 삽입이 되지 않는 경우를 삽입이상이라고 한다.
(3) 데이터 수정 시 중복된 투플들 중에서 일부 투플이 잘못된 값으로 수정될 경우 정보의 모순성이 생기는데 이를 모순이상이라고 한다.
(4) 관계 모델에서는 속성 간에 존재하는 여러 종속관계를 하나의 릴레이션에 표현하기 때문에 이상현상이 발생한다. → 관계형 모델 자체가 이상현상을 유발하는 것이 아니라, 비정규화된 설계에서 발생하는 중복과 종속관계 때문에 이상현상이 발생함
- 다음 릴레이션 R과 함수 종속성(FD)에 대하여 R의 후보키(candidate key)가 될 수 없는 것은?
R(A, B, C, D, E)
FD: AB -> C, CD -> E, C -> A, C -> D, D -> B
(1) AB
(2) AD
(3) BD
(4) C
- 제 1정규형에서 제 2정규형이 되기 위한 조건은?
1NF의 조건을 만족해야 함. 모든 도메인이 원자값이어야 하며, 각 투플이 고유해야 함
키가 아닌 모든 속성이 기본키에 완전 함수 종속되어야 함. 이는 기본키의 일부가 아닌 전체 기본키에 의해서만 결정될 수 있음을 의미함
(1) 모든 도메인이 원자값이어야 한다.
(2) 키가 아닌 모든 속성이 기본키에 이행적으로 함수 종속되지 않아야 한다.
(3) 다치종속이 제거되어야 한다.
(4) 키가 아닌 모든 속성이 기본키에 완전 함수 종속되어야 한다.
- 제2정규형에서 제3정규형이 되기 위한 조건은?
이행적 함수 종속을 제거해야 함. 즉, 키가 아닌 모든 속성이 기본키에 이행적으로 함수 종속되지 않아야 함. 이는 키가 아닌 속성이 기본키에만 직접적으로 종속되어야 하며, 다른 비키 속성에 의해 간접적으로 종속되어서는 안 됨을 의미함
(1) 이행적 함수 종속을 제거해야 한다.
(2) 부분 함수 종속을 제거해야 한다.
(3) 다치종속을 제거해야 한다.
(4) 결정자가 후보키가 아닌 함수적 종속을 제거해야 한다.
- 제3정규형에서 보이스코드 정규형(BCNF)이 되기 위한 조건은?
릴레이션에 존재하는 모든 결정자가 후보키여야 함. 즉, 릴레이션의 모든 함수적 종속성에서 결정자가 항상 후보키가 되어야 함. 이는 3NF의 조건을 더 엄격하게 적용한 것으로, BCNF에서는 결정자가 후보키가 아닌 함수적 종속을 허용하지 않음
(1) 원자값이 아닌 도메인을 분해한다.
(2) 부분 함수 종속을 제거해야 한다.
(3) 이행적 함수 종속을 제거해야 한다.
(4) 결정자가 후보키가 아닌 함수적 종속을 제거해야 한다.
- 보이스코드 정규형(BCNF)에 대한 옳은 설명으로만 짝지어진 것은?
ㄱ. BCNF에 속하는 릴레이션은 반드시 제3정규형에 속한다.
ㄴ. 제3정규형에 속하지만 BCNF에 속하지 않는 릴레이션이 있다.
ㄷ. 복합 속성을 허용하지 않는다.
ㄹ. 이행적 종속을 허용한다.
ㄷ. 복합 속성을 허용하지 않는다. → 정규화와 관련이 없음. 정규화의 종류와 관계없이 데이터 모델링의 결정에 따라 달라짐
ㄹ. 이행적 종속을 허용한다. → BCNF는 이행적 종속을 허용하지 않음.
(1) ㄱ, ㄴ
(2) ㄴ, ㄷ
(3) ㄱ, ㄴ, ㄹ
(4) ㄱ, ㄴ, ㄷ, ㄹ
- 다음 중 보이스코드 정규형(BCNF)을 만족하기 위한 조건으로 옳게 짝지어진 것은?
ㄱ. 결정자이면서 후보키가 아닌 것 제거
ㄴ. 이행적 함수 종속 제거
ㄷ. 부분 함수 종속 제거
ㄹ. 도메인이 원자값이어야 함
ㄴ. 3NF의 조건임. BCNF는 3NF의 조건을 포함하며, 추가적으로 더 엄격한 조건(ㄱ)을 가짐.
ㄷ. 2NF의 조건임
ㄹ. 1NF의 조건임
(1) ㄱ
(2) ㄱ, ㄴ, ㄷ, ㄹ
(3) ㄴ, ㄷ, ㄹ
(4) ㄱ, ㄹ
- 다음과 같이 어떤 릴레이션 R과 그 릴레이션에 존재하는 종속성이 주어졌을 때 릴레이션 R은 몇 정규형인가?
릴레이션: R(A, B, C)
기본키: (A, B)
함수 종속성: AB -> C, C -> B
함수 종속성 C -> B는 B(기본키의 일부)가 C(비키)에 의해 결정됨. 이것은 기본키가 아닌 속성이 다른 기본키 속성을 결정하는 이행적 종속성임. 따라서 릴레이션 R은 3NF를 위반함
(1) 제1정규형
(2) 제2정규형
(3) 제3정규형
(4) BCNF
- 릴레이션 스키마 R(A, B, C, D)는 다음 함수적 종속성 집합 FD를 만족한다. R을 BCNF 정규화하였을 때 분해된 두 릴레이션 스키마 R1과 R2로 옳은 것은?
FD = {A -> BCD, B -> ACD, D -> C}
여기서 D -> C 종속성이 BCNF를 위반함. 왜냐하면 D는 후보키가 아님에도 C를 결정하기 때문임. 따라서 R을 분해하여 D -> C 종속성을 별도의 릴레이션으로 분리해야 함
(1) R1(B, C, D), R2(A, B)
(2) R1(A, C, D), R2(B, C, D)
(3) R1(A, B, D), R2(C, D)
(4) R1(A, B, C), R2(C, D)
- 다음 릴레이션에서 함수 종속성과 키를 찾아보시오. 필요한 전제 사항을 포함하여 답하시오.
성적기록(학번, 강좌번호, 학기, 성적)
전제 사항
- 각 학생은 한 학기에 하나의 강좌에 대해 하나의 성적만을 가짐
- 하나의 강좌는 여러 학기에 걸쳐 여러 학생에게 가르쳐질 수 있음
- 학번과 강좌번호의 조합은 각 투플을 고유하게 식별함
함수 종속성
- {학번, 강좌번호, 학기} -> 성적
- 학번, 강좌번호, 학기의 조합은 특정 성적을 고유하게 결정함
- {학번, 강좌번호} -> 성적
- 하나의 학생이 하나의 강좌에 대해 여러 학기에 걸쳐 성적을 가질 수 없다는 가정이 필요함
키
- 후보키: {학번, 강좌번호, 학기}, 릴레이션 내의 모든 투플을 유일하게 식별할 수 있음
- 만약 하나의 학생이 같은 강좌에 대해 다른 학기에 다른 성적을 가질 수 있다면, {학번, 강좌번호, 학기}는 필수적으로 후보키가 됨
- 그러나 하나의 학생이 한 강좌에 대해 한 학기에만 성적을 받는다면, {학번, 강좌번호}만으로도 후보키가 될 수 있음
- 다음 릴레이션에서 AB는 후보키가 될 수 있는가? 아니라면 후보키를 찾아보시오.
릴레이션: R(A, B, C, D, E)
함수 종속성: AB -> C, CD -> E, DE -> B
AB 후보키 여부
AB -> C: AB는 C를 결정함
AB와 CD -> E: AB와 CD를 결합하면 E를 결정할 수 있음. 하지만, AB만으로는 E를 결정할 수 없음
따라서 AB는 후보키가 될 수 없음.
AB와 D를 결합하면 C, E, B 모두 결정할 수 있음. 릴레이션의 모든 속성을 결정할 수 있는 후보키: ABD
- 다음 릴레이션 R을 보고 오른쪽 함수 종속성 중에서 성립하는 것을 모두 고르시오.
R
A | B | C | D |
---|---|---|---|
1 | 1 | 1 | 1 |
2 | 2 | 2 | 2 |
2 | 1 | 3 | 1 |
4 | 3 | 4 | 3 |
A -> B, A -> C, A -> D, B -> A, B -> C, B -> D,
C -> A, C -> B, C -> D, D -> A, D -> B, D -> C
B → D, C → A, C → B, C → D, D → B
- 다음 릴레이션 R을 보고 아래 함수 종속성이 성립하는지 답하시오. 그 이유도 설명하시오.
R
A | B | C |
---|---|---|
b | c | h |
e | i | f |
g | i | f |
e | b | a |
(1) A → C ❌
(2) A → B ❌
(3) B → C ✅
(4) (B, C) → A ❌
(5) (A, B) → C ✅
(6) (A, C) → B ✅
- 아래의 릴레이션 R1(A, B, C)을 릴레이션 R2(A, B)와 R3(A, C)로 분해한 후, 속성 A를 사용하여 다시 조인하면 어떤 가짜 투플이 생기는지 확인해보시오. 생긴다면 이유는 무엇인지 설명하시오.
R1
A | B | C |
---|---|---|
1 | 1 | 1 |
1 | 2 | 2 |
2 | 3 | 3 |
(1, 1, 2), (1, 2, 1)
분해 과정에서 B와 C 사이의 관계가 손실되었기 때문임. R1에서 A가 1일 때, B와 C는 각각 1과 1, 2와 2라는 일관된 관계를 가지고 있음. 그러나 R2와 R3으로 분해하면 이러한 관계가 손실되고, A를 기준으로 조인할 때 B와 C의 모든 가능한 조합이 생성됨
- 다음 릴레이션은 몇 정규형인지 말하고 보이스코드 정규형(BCNF)으로 정규화하시오.
릴레이션: 물품(물품번호, 행사번호, 제조사, 스타일, 가격)
함수 종속성: (물품번호, 행사번호) -> 제조사, 스타일, 가격
물품번호 -> 제조사, 스타일
제2정규형: 물품번호 -> 제조사, 스타일 종속성은 후보키의 일부인 물품번호에 의해 결정되므로, 3NF를 만족하지 않음
BCNF로 정규화
- 물품1(물품번호, 제조사, 스타일)
- 물품번호는 제조사와 스타일을 결정함. 후보키는 물품번호
- 물품2(물품번호, 행사번호, 가격)
- (물품번호, 행사번호)는 가격을 결정함. 후보키는 (물품번호, 행사번호)
- 다음 릴레이션 X에서 성립하는 정규형은 무엇인가?
(1)
릴레이션: X(H, I, J, K, L, M, N, O)
기본키: (H, I)
함수 종속성: (H, I) -> J, K, L
J -> M
K -> N
L -> O
제2정규형
(2)
릴레이션: X(D, O, N, T, C, R, Y)
함수 종속성: (D, O) -> N, T, C, R, Y
(C, R) -> D
D -> N
제1정규형
- 다음은 배송(Shipping) 물품에 대한 릴레이션이다.
릴레이션: Shipping(shipname, shiptype, voyageID, cargo, port, date)
함수 종속성: shipname -> shiptype
voyageID -> shipname, cargo
shipname, date -> voyageID, port
(1) 후보키를 찾으시오.
{shipname, date}
(2) 제2정규형으로 정규화하시오.
- Shipping1(shipname, shiptype)
- Shipping2(shipname, date, voyageID, cargo, port)
(3) 제3정규형으로 정규화하시오.
- Shipping1(shipname, shiptype)
- Shipping2(shipname, date, voyageID, cargo, port)
(4) BCNF로 정규화하시오.
- Shipping3(voyageID, shipname, cargo)
- Shipping4(shipname, date, voyageID, port)
- 릴레이션 Book(booktitle, authorname, booktype, listprice, authorgroup, publisher)에서 함수 종속성은 다음과 같다.
booktitle, authorname -> publisher
booktitle -> booktype
booktype -> listprice
authorname -> authorgroup
(1) Book 릴레이션은 몇 정규형인가? 그 이유를 설명하시오.
제1정규형. booktitle -> booktype 및 authorname -> authorgroup과 같은 부분적 함수 종속성이 존재함. 이는 후보키의 일부분에 의해 비키 속성이 결정되는 것을 나타냄. 따라서 릴레이션은 2NF를 만족하지 않음
(2) 정규화를 수행하시오.
부분적 함수 종속성을 제거하기 위해 릴레이션을 분해함
- Book1(booktitle, authorname, publisher)
- Book2(booktitle, booktype)
- Book3(booktype, listprice)
- Book4(authorname, authorgroup)
- 다음은 부품과 공급자에 대한 릴레이션 Part(partnumber, description, supplier, suppaddress, price)이다. 물음에 답하시오.
Part
partnumber | description | supplier | suppaddress | price |
---|---|---|---|---|
10 | 20GB Disk | Seagate | CA | 100000 |
10 | 20GB Disk | IBM | NY | 90000 |
20 | 256MB RAM | Kensington | CA | 22000 |
20 | 256MB RAM | IBM | NY | 29000 |
20 | 256MB RAM | Samsung | Seoul | 31000 |
40 | LCD Monitor | IBM | NY | 210000 |
(1) 함수 종속성을 찾아보시오.
- partnumber → description (같은 부품번호는 항상 동일한 설명을 가짐)
- supplier → suppaddress (같은 공급자는 항상 동일한 주소를 가짐)
- partnumber, supplier → price (부품번호와 공급자의 조합은 가격을 결정함)
(2) 릴레이션 Part는 몇 정규형인가?
제1정규형. 부분 함수 종속성이 존재함(partnumber → description, supplier → suppaddress). 따라서 2NF를 만족하지 않음
(3) 다음과 같이 분해를 했을 때, 각각의 릴레이션은 몇 정규형인가?
R1(partnumber, description, supplier, price)
R2(supplier, suppaddress)
R1: 1NF, partnumber, supplier → price는 후보키에 대한 완전 함수 종속성이 아님
R2: BCNF, supplier → suppaddress는 완전 함수 종속성임. R2는 2NF를 만족하며, 이행적 종속성이 없으므로 3NF 및 BCNF를 만족함
(4) (3)의 릴레이션에서 분해가 더 필요한가? 필요하면 분해를 수행하시오.
R1은 2NF를 만족하지 않기 때문에 부분 함수 종속성을 제거하려면 추가 분해가 필요함
- R1-1(partnumber, description)
- R1-2(partnumber, supplier, price)
- [병원 데이터베이스] 다음은 마당병원의 환자 처방 폼의 일부이다.
마당병원 환자 처방 폼
환자번호: P10034
환자이름: MacDonald
병동이름: 정형외과병동
병동번호: 병동 11
병실번호: 84
약번호 | 약이름 | 처방 | 용량 | 복용법 | 1일복용단위 | 시작일 | 종료일 |
---|---|---|---|---|---|---|---|
10223 | Morphine | Pain Killer | 10mg | 약물 | 50 | 24/03/13 | 24/03/13 |
10334 | Tetracyclene | Antibiotic | 0.5mg | 주사 | 10 | 24/03/13 | 24/03/13 |
10223 | Morphine | Pain Killer | 10mg | 약물 | 10 | 25/04/09 | 25/04/09 |
(1) 처방 폼에 있는 속성을 보고 함수 종속성을 찾아내고 함수 종속성 다이어그램을 그리시오. 그리고 키를 정하시오. 필요한 경우 속성이나 데이터 값에 조건을 붙여도 좋다.
- 환자번호 → 환자이름, 병동이름, 병동번호, 병실번호
- 약번호 → 약이름, 처방, 용량
- 환자번호, 약번호, 시작일 → 복용법, 1일복용단위, 종료일
키: (환자번호, 약번호, 시작일)
(2) 함수 종속성 다이어그램을 보고 정규화를 수행하시오. 최소 제3정규형이 되도록 만드시오.
환자정보: 환자번호, 환자이름, 병동이름, 병동번호, 병실번호
약정보: 약번호, 약이름, 처방, 용량
처방정보: 환자번호, 약번호, 복용법, 1일복용단위, 시작일, 종료일
각 테이블에서 모든 비키 속성은 기본키에 완전 함수 종속되며, 비키에 의한 이행적 종속성이 없음
(3) 정규화 후 분해된 테이블에 대하여 기본키와 외래키를 표시하시오.
- 환자정보
- 기본키: 환자번호
- 외래키: 없음
- 약정보
- 기본키: 약번호
- 외래키: 없음
- 처방정보
- 기본키: 환자번호, 약번호, 시작일
- 외래키: 환자번호 참조 환자정보, 약번호 참조 약정보
- [주문 데이터베이스] 다음은 어떤 상품의 주문서 양식이다.
주문서
주문번호: 1234
고객번호: 9876
고객이름: 홍길동
고객주소: 도봉구 101번지
국가도시: 서울, 대한민국
주문일자: 01/01/2014
제품번호 | 품목 | 수량 | 단가 |
---|---|---|---|
A123 | 연필 | 100 | 1000 |
B123 | 지우개 | 200 | 500 |
C345 | 샤프 | 5 | 2000 |
(1) 주문서에 있는 속성을 보고 함수 종속성을 찾아내고 함수 종속성 다이어그램을 그리시오. 그리고 키를 정하시오. 필요한 경우 속성이나 데이터 값에 조건을 붙여도 좋다. 초기 테이블은 다음과 같다.
Order(주문번호, 고객번호, 고객이름, 고객주소, 주문일자, 제품번호, 품모그, 수량, 단가)
- 주문번호 → 고객번호, 고객이름, 고객주소, 주문일자
- 고객번호 → 고객이름, 고객주소
- 제품번호 → 품목, 단가
- 주문번호, 제품번호 → 수량
키: (주문번호, 제품번호)
(2) 함수 종속성 다이어그램을 보고 정규화를 수행하시오. 최소 제3정규형이 되도록 만드시오.
- 주문정보(OrderInfo): 주문번호, 고객번호, 주문일자
- 고객정보(CustomerInfo): 고객번호, 고객이름, 고객주소
- 제품정보(ProductInfo): 제품번호, 품목, 단가
- 주문상세(OrderDetail): 주문번호, 제품번호, 수량
(3) 정규화 후 분해된 테이블에 대하여 기본키와 외래키를 표시하시오.
- 주문정보
- 기본키: 주문번호
- 외래키: 고객번호 참조 고객정보
- 고객정보
- 기본키: 고객번호
- 외래키: 없음
- 제품정보
- 기본키: 제품번호
- 외래키: 없음
- 주문상세
- 기본키: 주문번호, 제품번호
- 외래키: 주문번호 참조 주문정보, 제품번호 참조 제품정보
'CSE > 데이터베이스 (database)' 카테고리의 다른 글
오라클로 배우는 데이터베이스 개론과 실습 2판 - 연습문제 9장 (0) | 2023.12.20 |
---|---|
오라클로 배우는 데이터베이스 개론과 실습 2판 - 연습문제 8장 (0) | 2023.12.18 |
오라클로 배우는 데이터베이스 개론과 실습 2판 - 연습문제 6장 (2) | 2023.12.18 |
오라클로 배우는 데이터베이스 개론과 실습 2판 - 연습문제 5장 (0) | 2023.12.17 |
오라클로 배우는 데이터베이스 개론과 실습 2판 - 마당서점 데이터베이스 구축 (0) | 2023.12.16 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!