NLP Learner in Switzerland

데이터베이스시스템 2019년도 중간고사 문제 및 답안[Q5~Q7] 본문

Database SQL/Exercise

데이터베이스시스템 2019년도 중간고사 문제 및 답안[Q5~Q7]

초코빵 2021. 4. 29. 10:00
728x90
반응형

 

 

 

@University of Zurich

 

 

 

Question 5

[답] 1번

customer table과 booking table은 같은 컬럼인 Lname을 기준으로 join되고, destination ID가 2이고 Year가 2018년인 경우의 Last name을 전부 반환한다. 이 때 Lname은 중복값이 있을 수 없다. Destination table에 보면 DID, Lname, Year가 세트로 primary key를 구성하는데, 조건에서 DID=2, Year=2018로 고정이므로 Lname이 서로 다른 값을 갖는다면 primary key에 위반된다. 

 

 

 

[답] 2번

customer table과 booking table은 같은 컬럼인 Lname을 기준으로 join되고, destination ID가 2인 경우 First name을 반환한다. 이 때 Last name과 First name그룹 별로 평균가격을 산출하고, 이 평균가격이 예약리스트에서 목적지가 2인 경우 Last name별로 산출된 평균가격의 최솟값과 같은 경우만 결과값을 반환한다. 저 쿼리를 보이는 차례대로 쓰면 이따구로 한국말인데도 못알아듣겠는 말이 되버린다. 하지만 아무튼, 목적지 2 예약자 평균의 최솟값과 같은 평균가격을 지불한 고객이라는 것까지는 이해함. 이 이후는 그냥 보기를 보면서 맞는것을 찾아보는 수밖에 없다. 답을 그대로 보자면, 목적지 2를 예약한 고객 중 평균적으로 가장 적은 가격을 지불한 모든 고객의 이름을 의미한다. 비슷하군.

 

 

 

[답] 3번

주어진 Q를 해석하자면 고객 중 누구도 방문한 적이 없는 모든 목적지의 이름이다. 근데 이 문제는 엄청 쉬운 이유가, 해석할 필요가 사실 없이 그냥 영어지문 그대로를 보면 된다. such that there is = Exists이고, did not = Not Exists 이므로 차례대로 고르면 된다. 위의 쿼리에 적용시켜보면, 예약리스트에 해당 목적지도 없고 고객도 없는 경우, 즉 예약이 된 적이 없는 목적지의 케이스에 대해 목적지 이름을 반환한다.

 

 

 

Question 6

[답] 3번

주어진 쿼리를 읽어보면 booking table과 destination table을 공통 컬럼인 DID를 기준으로 join하되, 목적지의 국가별로 최소가격이 2000보다 큰 경우에 해당 국가를 반환한다.  답에 보면, DCountry와 Min(price)를 조건으로 join시키고 D,P로 rename한 후에 P가 2000초과인 D를 찾는다. 근데 수업시간에 ϑ 를 세타조인할 때 배웠는데, 내가 배운거는 join기호옆에 붙여서 쓰는 것뿐이다... 이 답에 있는 포맷은 모르는 포맷임 ㅠㅠ 그래서 잘 모르겠다 누가 알려주셈...

 

 

 

[답] 1번

모르겠어서 답보고 이해했다. destination과 booking을 같은 DID기준으로 join하고 P2보다 큰 P값이 존재하지 않는, 즉 P값이 최솟값인 경우, 이 P가 2000보다 클 때 C를 반환한다.

 

 

 

Question 7

[답] 1번

 

S1 : 후보키는 minimality(최소성)을 만족해야 하므로 후보키의 UNION은 최소성을 위배하여 후보키가 될 수 없다.

S2 : 슈퍼키는 completeness(유일성)만 만족해도 슈퍼키가 된다. 즉 다양한 슈퍼키가 나올 수 있으며 상호간에 아예 교집합이 없을 수도 있다.

 

 

 

 

[답] 3번

cartesian product와 join은 교환법칙이 성립하므로 1번과 2번은 둘다 맞다. 3번과 4번은 예시를 넣어가면서 풀어보면 알 수 있다.

 

 

 

[답] 3번

r과 s가 union compatible하다는 것은 컬럼명, 컬럼수, 컬럼의 데이터타입이 모두 같다는 것을 의미한다. 카디널리티는 연산을 수행하고 나서 최종적으로 출력될 결과의 수, 즉 튜플 수를 세면 된다.

만약 r의 튜플이 4개, s의 튜플이 3개라고 하면 최소카디널리티는 r튜플중 3개가 s튜플 3개 전부와 다 각각 같은 경우고, UNION 연산 수행시 최종 4개가 도출될 것이므로 max(|r|,|s|)로 쓸 수 있다. 최대카디널리티는 튜플 모두가 다른 경우이므로 그냥 4+3이 된다. 즉 |r|+|s|가 된다.

 

 

 

[답] 3번

join의 경우에는 서로 매치되는 값이 없으면 drop시켜버린다. 따라서 maximum cardinality가 나오려면 R과 S내의 A튜플값들이 모두 같은 경우이다. 만약 R의 튜플 수가 2개 (1,2) (2,3)이고 S의 튜플 수가 3개 (1,2) (2,3) (3,4)인 경우 join을 하면 (1,2) (2,3)이 도출된다. 즉 min(|r|, |s|)가 된다.

 

Comments