Agenda
1. ERD내 Super key, 후보키 (53번 문제)
2. 관계 대수 연산 (54번 문제)
3. 함수적 종속관계 -> 정규화 (61번 문제)
4. SQL 문제 (62, 63, 65번 문제) - 기출영상 재 정리
- SQLD 기출정리
5. 동시성제어- 유령데이타 읽기 오류 문제 ( 66번문제)
6. 동시성제어- 락킹규약 (Strict 2PLP 등) ( 68번 문제)
62번 다시
풀이) 후보키 : 유일성, 최소성 만족, 슈퍼키: 유일성을 만족한다.
따라서, 후보키는 슈퍼키가 될 수 있다, 슈퍼키는 모두 후보키가 될 수 있는 것은 아니다
위 문제에서 후보키로 Registration, Vehicle_id 로 정의되 있음으로, 두 entity가 들어가 있는 것은 슈퍼키가 된다.
두 entity가 없는 (State, Year, Model)이 정답
- |RuS| = 13 - 합집합, 고유의 튜플이면, 상한값은 7+6=13 이된다
- |RnS| = 6 - 교집합, R과 S에 모두 있는 튜플이어야 함으로, 상한값은 작은값인 6이 된다
- |R-S| = 7 - 차집합, 아무상관이 없는 튜플들만 있을때 상한값이 발생하며, 상한값은 7이된다
- |R*S| = 42- 카데시안 곱, R과 S의 모든 튜플의 조합이 상한값임으로 42가 답
참고 : https://chatstory.tistory.com/20
2023년 제 24회 정보시스템 감리사 기출문제 풀이 - 데이터베이스(51-55)
[오늘부터 데이터베이스 기출문제 51-55를 풀어보겠습니다.] 문제 51 51. ISO 8000의 데이터 품질 기준 관련하여 다음 괄호안에 적합한 용어는? ( ) 오류는 데이터가 표준 코드 값 또는 표준 도메인 값
chatstory.tistory.com
- 관계연산 강의 : https://www.youtube.com/watch?v=e3zu3Yk8__4
3. 함수적 종속관계 -> 정규화 (61번 문제) -> 정답: 1번
풀이) BCNF 정규화 : 모든 결정자는 후보키여야 한다
1) 올바른 BCNF 정규화,
- R1은 A->B, A->D의 함수 종속성을 가짐, A는 R1의 기본키, R2는 D->C의 함수 종속성을 가지며, D는 R2의 기본키
2) BCNF 불만족
- R2에서 C는 기본키가 아님, C -> D 함수 종속성 있음
3) BCNF 불만족
- R2에서 B는 기본키가 아님, B-> D 의 함수 종속성 존재
4) BCNF 불만족
- R2에서 B는 기본키가 아님, B-> A 의 함수 종속성 존재
풀이2)
1) 후보키 : A OR B
2) A 를 대표키로 선정 -> 함수 종속 A -> (B, C, D), D-> C 로 구분되며, 이행 항수 종속 존재 (A -> D -> C) 그럼으로 2 정규형임
A->D->C는 이행함수종속관계임, (순환루프와 비슷), 따라서 2 릴레이션으로 쪼개는 것이 3정규형이다
3) 3정규화 작업을 위해 이행함수 종속 관계 제거하고 R1, R2로 구분함
- R1(A, B, D), R2(D, C) => 여기서 D는 외래키이며, R2는 외래키인 D가 기본키이다
4) 별도의 종속성이 존재하지 않음으로 BCNF 완료
참고 : https://chatstory.tistory.com/22
2023년 제 24회 정보시스템 감리사 기출문제 풀이 - 데이터베이스(61-65)
[오늘부터 데이터베이스 기출문제 61-65를 풀어보겠습니다.] 문제 61 61. 다음과 같은 함수 종속을 가진 릴레이션 R을 BCNF로 정규화한 결과로 옳은 것은? (단, 아래 지문에서 밑줄친 열은 기본키, 이
chatstory.tistory.com
- 이행적 함수 종속 제거 : (주문번호, 회원ID), (회원ID, 회원명, 회원등급) 으로 구분해야 한다.
- BCNF 정규화 : 아래와 같이 결정자가 아닌 C가 다시 B를 결정하는 현상이 발견될때, 다시 쪼개는 활동이 BCNF 이다
https://www.youtube.com/watch?v=RXQ1kZ_JHqg : 정규화 과정
https://www.youtube.com/watch?v=-bLCtP2HNHo : 함수적 종속성 과정
주어진 함수 종속 관계 A -> (B, C, D), B -> (A, C, D), D -> C에 대한 BCNF(Boyce-Codd Normal Form) 정규화 결과를 설명해 드리겠습니다.
1. 함수 종속 관계 분석:
* A -> (B, C, D): A는 B, C, D를 결정합니다.
* B -> (A, C, D): B는 A, C, D를 결정합니다.
* D -> C: D는 C를 결정합니다.
2. 후보 키 식별:
* A와 B는 모든 속성을 결정하므로 후보 키가 될 수 있습니다. 즉, {A}, {B}는 후보키입니다.
* D는 C만 결정하므로 후보 키가 될 수 없습니다.
3. BCNF 위반 여부 확인:
* D -> C에서 D는 후보 키가 아니므로 BCNF를 위반합니다.
4. BCNF 정규화 수행:
* BCNF 위반을 해결하기 위해 D -> C를 기준으로 테이블을 분해합니다.
* R1 (D, C)
* R2 (A, B, D)
* R1 (D, C) 테이블에서 D는 C를 결정하고, D는 R1의 후보 키이므로 BCNF를 만족합니다.
* R2 (A, B, D) 테이블에서 A는 (B, D)를 결정하고 B는 (A, D)를 결정합니다. 즉 A, B는 R2의 후보키 이므로 BCNF를 만족합니다.
5. 최종 결과:
* 주어진 함수 종속 관계는 다음과 같이 두 개의 테이블로 BCNF 정규화됩니다.
* R1 (D, C)
* R2 (A, B, D)
핵심 개념:
* 함수 종속성: 한 속성(또는 속성 집합)이 다른 속성(또는 속성 집합)의 값을 결정하는 관계입니다.
* BCNF: 모든 결정자가 후보 키인 정규형입니다. 즉, 후보 키가 아닌 속성이 다른 속성을 결정하는 경우가 없어야 합니다.
* 정규화: 데이터베이스 설계에서 중복을 최소화하고 데이터의 무결성을 보장하기 위해 테이블을 분해하는 과정입니다.
이러한 BCNF 정규화를 통해 데이터베이스의 이상 현상을 방지하고 데이터의 일관성을 유지할 수 있습니다.
4. SQL 문제 (62, 63, 65번 문제)
-62번 : 정답: 3번
풀이 )
1) RED OR GREEN의 보트를 예약한 선원의 이름을 반환한다. 우리가 원하는 것은 둘다 예약한 선원 이름임
2) 이 질의는 보트의 색상이 RED와 GREEN인 경우를 찾는 것임, 이는 불가능한 질의임
주어진 SQL 쿼리는 다음과 같습니다. gpt답변
Select s.sname from sailors s, reserve r, boats b where s.sid = r.sid and r.bid = b.bid and( b.color =red and b.color=green);
이 쿼리는 다음과 같은 작업을 수행합니다.
* sailors, reserve, boats 테이블을 조인합니다.
* 조인 조건은 다음과 같습니다.
* s.sid = r.sid (선원의 ID와 예약의 선원 ID가 일치)
* r.bid = b.bid (예약의 보트 ID와 보트의 ID가 일치)
* 추가적으로 b.color = 'red' and b.color = 'green' 조건을 만족하는 행을 필터링합니다.
* 결과에서 선원의 이름(s.sname)을 선택합니다.
여기서 b.color = 'red' and b.color = 'green' 조건은 논리적으로 불가능합니다. 하나의 보트는 동시에 빨간색과 초록색일 수 없기 때문입니다. 따라서 이 조건을 만족하는 결과는 존재하지 않습니다.
따라서 쿼리의 결과는 빈 결과(empty set)가 됩니다.
3) 맞음 - RED BOAT를 예약한 선원과 GREEN 보트를 예약한 선원을 찾아 교집합을 반환함
4) 틀림 - RED BOAT를 예약한 선원과 GREEN 보트를 예약한 선원을 찾아 합집합을 반환 (우리는 둘다 예약한 사람을 찾는 교집합을 찾아야 함) - UNION 으로 2개의 쿼리가 있음
- RED 와 GREEN 색 1개 씩만 예약한 선원도 함께 나타남
- 63번 : 정답 - 4번
풀이)
1) SQL 문법 오류
- JOIN 연산자와 WITH 절을 함께 사용 불가
2) SQL문법 오류
- NATURAL JOIN 과 USING 동시 사용 불가
- NATURAL JOIN은 두 테이블에서 이름이 같은 모든 열을 자동 결함하고, USING은 결함할 열을 명시적으로 지정해야 하기 때문에 같이 사용할 수 가 없음
3) SQL문법 오류
- NATURAL JOIN 과 ON 절을 동시 사용 불가
- NATURAL JOIN은 두 테이블에서 이름이 같은 모든 열을 자동으로 결함, ON은 결함 조건을 명시적으로 지정해야 되서 같이 사용 불가
4) 맞음
- JOIN 연산자와 함께 ON 절을 사용하여 STUDENT 테이블과 ENROLL 테이블을 Sno 열을 기준으로 결함, WHERE절을 사용하여 Cno = 413인 행만 선택
- 65번 : 정답 : 4번
풀이)
가) EMPLOYEE 테이블에서 Ssn이 DEPENDETN 테이블의 Essn 과 일치 하고, EMPLOYEE의 Name과 DEPENDENT의 Name이 일치하는 직원의 이름을 선택함
나) EMPLOYEE 테이블에서 적어도 하나의 DEPENDENT 행이 존재하며, 그 행의 Essn이 EMPLOYEE의 Ssn과 일치하고 DEPENDENT의 Name이 EMPLOYEE의 Name과 일치하는 직원의 이름을 선택한다.
다) EMPLOYEE테이블과 DEPENDENT 테이블이 조인하고, 조인된 결과에서 Ssn과 Essn이 일치하고, EMPLOYEE의 Name과 DEPENDENT의 Name이 일치하는 직원의 이름을 선택한다
1. SQLD 기출
https://www.youtube.com/watch?v=sBT5FG6rCMk
- DB 전체 개념 강좌 GOOD
https://www.youtube.com/watch?v=rdfHFnqVoRw
- 정답 : 유령데이타 읽기 (Phantom read)
6. 동시성제어- 락킹규약 (Strict 2PLP 등) ( 68번 문제)
https://www.youtube.com/watch?v=0PScmeO3Fig
- 동시성제어: LOCK의 개념
- locking을 실행하다보면 다시 문제가 발생함
write_lock을 실행하고, unlock을 하면, 다음 transaction에서 write lock을 가지고 가기 때문에, 최종데이타에 문제가 생긴다.
따라서, write_lock(y)을 먼저 설정하고, read의 unlock(x)을 실행하면 문제가 해결된다. ==> 이것이 2PL 이다
- 2PL에서는 상황에 따라 DEAD LOCK이 발생할 수 있다.
'- 배움이 있는 삶 > - 데이타베이스' 카테고리의 다른 글
2024년 기출문제 - 데이타베이스 (6) | 2025.04.09 |
---|---|
데이타베이스 - 기본 과정 정리(1차 완료) (5) | 2025.03.17 |
2022년 기출문제-데이타베이스ㅡ다시 (5) | 2025.03.04 |
정보처리기사 - 데이타베이스 (0) | 2024.09.23 |
23회(23년) 기출문제 - 데이터 베이스 정리(1차 완료) (4) | 2024.09.22 |