본문 바로가기
데이터베이스설계

[데이터베이스설계] 2-10 활용 문제들

by 젼젼39 2024. 11. 19.
Q) find the ID of each borrower who has a loan in branch Downtown
=> π ID (σ branch_name=”Downtown” ( borrower loan ) )
=> π ID (σ branch_name=”Downtown” ( borrower borrower.loan_number = loan.loan_number loan ) )
-> 이건 loan이랑 borrower 테이블만 쓰면 됐음
 

Q) find the customer_name of each borrower who has a loan in branch Perridge
=> π customer_name (σ branch_name=”Perridge” ( customer borrower loan ) )      //이웃끼리 자연조인
=> π customer_name ( customer borrower ( σ branch_name=”Perridge” ( loan ) )
 

Q) ID = 12121보다 급여 많은 교수의 ID와 이름 구하기
=> π i.D, i.name ( σ i.salary > w.salary ( ρ i ( instructor ) X ( σ w_id=12121 ( ρ w ( instructor ) ) ) ) )
리네임후 하나를 12121로 만들고 / 리네임한 다른 거랑 엮고 / 그거 가지고 비교하고 / 뽑고
최댓값 구하기
Q) find the name of each employee who earns at least as much as every employee in the database
=> π person_name ( works ) - π i.person_name ( σ i.salary < w.salary ( ρ i ( works ) X ρ w ( works ) ) )
 
한 컬럼의 모든 가능한 값들에서 최댓값이 아닌 값들을 빼면 최댓값만 남음
자기자신을 카티션 곱 하고,
왼쪽의 salary가 오른쪽의 salary보다 작은 튜플들 뽑고 (=> 그럼 왼쪽값은 절대 최댓값이 될수없음)
왼쪽의 이름컬럼 뽑아
원본테이블에서 이름만 뽑은 것에서, 위에서 뽑은 이름컬럼값들 빼기
 
 
Q) find ID and name of each employee who earns at least as much as every employee in the database
=> π employee.ID, person_name
(employee employee.ID=i.ID (π ID (works) - π i.ID (σ i.salary < w.salary (ρ i (works) X ρ w (works)))))
=> π employee.ID, person_name
(employee employee.ID=i.ID (π ID (works) - π i.ID (ρ i (works) i.salary < w.salary ρ w (works))))
 
위랑 동일하게 계산해둔 뒤에(카티션곱하고 셀렉트 또는 세타조인), 왼쪽의 ID컬럼만 뽑아두고,
그거랑 employee 테이블이랑 ID값 가지고 equi join
그 후 ID, name 컬럼 프로젝트
 

Q) find the IDs of all students who have taken all Comp.Sci courses with relational algebra expression
(1) using Division operation
=> π ID, course_id (takes) ÷ π course_id (σ dept_name=”Comp.Sci” ( course )
 
takes에서 ID, course_id를 뽑아두고
courses에서 dept_name comp인 것의 course_id를 뽑아두고
나누면 takes ID만 남음
 
(2) without using Division
=> r <- π ID, courses (takes)
   s <- π course_id (σ dept_name=”Comp.Sci” (course) )
   π ID ( takes ) – π ID ( ( π ID ( takes ) x s ) –  r )
   π ID ( takes ) – π ID ( ( π ID ( takes ) x s ) –  r )
 
r s는 각각 준비함 (r ID, course_id / s comp에 개설된 course_id)
takes에서 ID를 뽑아두고 (무슨 과목이든 수강한 학생),
courses에서 dept_name comp인 것의 course_id를 뽑아두고,
takes에서 ID컬럼만 뽑고, courses에서 뽑은 course_id와 카티션곱한 후 실제 takes의 두 컬럼값들 뺌
이거(= comp 다 듣지 않아 짝짓기 미완성인) ID컬럼만 뽑은 뒤 takes ID(전체)값에서 빼준다.
 
=> πR-S(r) – πR-S( ( πR-S(r) x s ) – πR-S, S(r) )
= πA(r) – πA( ( πA(r) x s ) –  r )