6장: 관계데이터 연산 연습문제

Icarus<Wing>·2025년 1월 9일
0

basic DB

목록 보기
8/11

📢본 연습문제의 저작권은 http://www.kocw.net/home/search/kemView.do?kemId=1163794에 있으므로 무단 복제 및 배포를 금합니다.

연습문제1

우리는 관계 대수 연산자에 포함되는 다양한 일반 집합 연산자와 순수 관계 연산자를 학습하였다. 이제 위의 연습문제를 풀어보자.

🤓스스로 풀어본 연습문제 풀이

  1. π_과목이름(과목)
  2. π_학번 ∧ 이름(σ_학년 = '1학년'(학생))
  3. π_학번, 과목번호, 학점(σ_중간성적 ≥ 80 ∧ 기말성적 ≥ 70(학생⋈과목⋈수강)
  4. π_학번(σ_과목번호(과목⋈학생))
  5. π_이름, 학년(σ_과목번호=3 ∧ 학점 = 'A0'(과목⋈수강⋈학생))

👩‍🏫모범답안

  1. π_과목이름(과목)

  2. π_학번, 이름(σ_학년 = '1학년'(학생))
    👉속성은 논리 연산자가 아니라 콤마를 사용!

  3. π_학번, 과목번호, 학점(σ_중간성적 ≥ 80 ∧ 기말성적 ≥ 70(수강)
    👉수강 릴레이션에 학번, 과목번호, 학점이 있기 때문에 굳이 조인 연산 할 필요 x
    👉프로젝트를 기준으로 해서 먼저 찾았기 때문에 이런 오류가 발생하였음. 따라서, clockwise 순서로 릴레이션 -> 셀렉트 -> 프로젝트 순으로 표현하는 것이 바람직하다.

  4. π_학번, 과목번호(수강) ÷ π_과목번호(과목)
    👉셀렉트에 대한 표현법 미숙지로 인한 오답!
    👉디비전은 R이 S의 모든 속성을 포함하고 있어야 연산이 가능하기 때문에 과목이름이 아니라 과목번호를 프로젝트하였다.

  5. π_이름, 학년(σ_과목번호=3 ∧ 학점 = 'A0'(학생⋈수강))

연습문제2

🤓스스로 풀어본 연습문제 풀이

  1. π_판매자번호, 이름(σ_수수료 < 0.05(판매자))
  2. π_이름, 수수료(σ_고객번호='C001' ∧ 제품번호='P003'(판매자⋈주문))
  3. 몰?루
  4. π_판매자번호(σ_거주도시='부산'(주문⋈고객))

👩‍🏫모범답안

  1. 정답
  2. 정답
  3. π_이름(고객) - π_이름(σ_판매자번호='A003'(고객⋈주문))
    👉"않은"은 차집합('-')으로 변환을 하는데, 속성의 차수가 같아야 하므로속성 리스트는 검색하고자 하는 이름을 동일하게 설정한다.
    👉즉, "주문하지 않은"에서 주문을 타겟 릴레이션으로 잡는 것이 아니라, 관형어가 어떤 명사를 꾸미는지(여기서는 고객 릴레이션) 유심히 살펴봐야 한다.
    📢말 그대로 릴레이션 스키마이기 때문에, 머릿속에서 예시 투플들을 생성하는 것이 아니라 질의문을 어떻게 관계대수로 치환할 것인가를 생각하는 것이 포인트!!
  4. π_판매자번호, 고객번호(주문) ÷ π_고객번호(σ_거주도시='부산'(고객)
  • 위의 연습문제1의 (4)에서도 "모든"이라는 단서가 디비전 연산을 표현하라는 것으로 보아, 우리는 다음과 같은 절차를 따를 수가 있다:
    • 고객, 주문 릴레이션 추출
    • 부산에 거주 -> σ_거주도시='부산'
    • 모든 고객 -> π_고객번호 && 주문을 받은 판매자의 번호 -> π_판매자번호(주문)
      • 모든 과목의 이름을 검색 -> π_과목이름(과목)π_고객번호(σ_거주도시='부산'(고객)) (∵고객번호가 key라 훨씬 identifiable함)
    • 그것보다 더 큰 개념인 π_판매자번호, 고객번호(주문)을 고려한다면:
      주문을 받은 판매자의 번호 ÷ 부산에 거주하는 모든 고객
      == π_판매자번호, 고객번호(주문) ÷ π_고객번호(σ_거주도시='부산'(고객))
      💡R이 S의 모든 속성을 포함하고 있어야 연산이 가능하므로 고객번호는 공통 속성이 되어야 한다.

🤔차집합과 디비전 개념이 익숙하지 않으므로 개념 복습만은 하되, 어짜피 실무에서는 관계 해석을 기반한 SQL 쿼리문을 주로 사용하기 때문에 너무 deep하게 공부할 필요는 없음!

profile
모든 코드에는 이유가 있기에 원인을 파악할 때까지 집요하게 탐구하는 것을 좋아합니다.

0개의 댓글