II. Introduction to Relational Model

Bard·3일 전
0

데이터베이스개론

목록 보기
2/8

Relation

  • Relation = Table

Domain: Attribute types

  • 도메인은 각 attribute에 대해 허용된 값들의 집합임
    • Domain = data type + constrains
    • 예를 들어 Score : 0-100 사이의 숫자
  • Attribute 값들은 atomic해야함
  • Null은 모든 도메인의 원소임

Relation Schema and Instance

  • A1,  A2,  ,  AnA_1,\;A_2,\;\dots,\;A_n 이 attributes
  • R=(A1,  A2,  ,  An)R=(A_1,\;A_2,\;\dots,\;A_n)이 relation schema
    • 예를 들어 instructor = (ID, name, dept_name, salary)
  • relation은 인스턴스, 즉 tuple들의 집합임.

Relations are Unordered

  • tuple들의 순서는 상관없음 (임의의 순서로 저장됨)
    • 즉, relation은 집합

Database

  • 데이터베이스는 여러 relation으로 이루어짐
  • 예를 들어 대학 데이터베이스는 instructor, student, advisor relation으로 구성됨

Key

  • 해당 relation에서 가장 중요한 역할을 수행하는 attribute

Key의 정의

  • KRK \subseteq R이라 하자

  • 만약 KK의 값들이 relation RR의 유일한 순서쌍을 식별하는데 충분하다면, KKRR의 superkey임

    • 예를 들어 {ID}와 {ID, name}은 모두 instructor의 superkey임
  • Minimal superkey를 candidate key라고 부름
    예를 들어 {ID}는 Instructor의 후보키임

  • 후보키 중 하나를 primary key로 선택함

Relational Query Languages

두 개의 수학적 query language가 있음

  • Relational algebra
    • 더 기능적이고, 실행 계획을 나타낼 때 유용함
  • Relational calculus
    • 더 선언적임. 즉 어떻게 계산할지보다 어떤걸 원하는지를 표현함
    • 더 이론적이어서 본 수업에서는 다루지 않음
    • 예를 들어 SSN이 10인 학생을 찾는 건
      {ttSTUDENTt[ssn]=123}\{t|t\in STUDENT \land t[ssn] = 123 \}

Relational Operators

다섯 개의 기본적인 relational 연산자가 있음

  • Union (\cup)
  • Selection (σ\sigma)
  • Projection (Π\Pi)
  • Cartesian Product (×\times)
  • Set Difference (-)

Union (\cup)

합집합

Set difference (-)

차집합

Selection (σ\sigma)

  • 행을 선택함
  • relation rr에 대해서

  • 여기에서 A=BA=B이고, D>5D>5인 tuple들을 찾는건 아래와 같이 표현할 수 있음
    σA=BD>5(r)\sigma_{A=B \land D>5} (r)

Projection (Π\Pi)

  • 프로젝션은 열들을 선택한뒤 중복을 제거함
  • 관계 rr에 대해

  • AACC를 선택하는 Projection ΠA,C(r)\Pi_{A,C}(r)

Cartesian Product (×\times)

  • 카테시안 곱은 가능한 모든 쌍을 생성함
  • 관계 r,  sr,\;s에 대해

  • r×sr\times s

  • 중첩루프로도 표현 가능
for each row i in r
	for each row j in s
    	output i,j

예시

  • 'swe3003'을 듣는 학생들의 이름을 찾아보자
Πname(σStudent.ID=Take.ID    c_id=swe3003(Student×Take))\Pi_{name}(\sigma_{\text{Student}.ID = \text{Take}.ID \;\land\; c\_id='swe3003'}(\text{Student} \times \text{Take}))

파생연산자

  • 기본 5개 관계 연산자만으로 충분하지만,
    • Union (\cup)
    • Selection (σ\sigma)
    • Projection (Π\Pi)
    • Cartesian Product (×\times)
    • Set Difference (-)
  • 편의를 위해 파생연산자를 추가함
    • Set Intersection (\cap)
    • Join (\bowtie)
    • Rename (ρ\rho)
    • Division (÷\div)
    • Group by (GG)

Set Intersection (\cap)

  • 관계 r  sr\;s에 대해

  • 교집합 rsr\cap s

  • 이는 ABA\cap BA(AB)A-(A-B)와 동치이기 때문에 기본연산자가 아님.

Natural Join (\bowtie)

  • RS=ΠR.a,R.b,(σR.a=S.a    R.b=S.b    (R×S))R\bowtie S = \Pi_{R.a, R.b, \dots}(\sigma_{R.a=S.a\;\land\;R.b=S.b\;\land\;\cdots}(R\times S))
  • RRSS의 각 순서쌍 tRt_RtSt_S에 대해서
  • 만약 tRt_RtSt_S가 같은 attibute를 공유한다면, tRt_RtSt_S의 value가 같은 것만 뽑은 뒤 중복을 제거하여 tuple tt를 만듦
  • 'swe3003'을 듣는 학생들의 이름을 찾아보자
Πname(σc_id=swe3003(StudentTake))\Pi_{name}(\sigma_{c\_id='swe3003'}(\text{Student}\bowtie\text{Take}))

Rename (ρ\rho)

ρAFTER(BEFORE)\rho_{AFTER}(BEFORE)

  • 같은 테이블이 여러번 사용될 수 있기 때문에 필요함.

여기에서 Tom의 조부모를 찾기 위해서는, 다음과 같이 할 수 있음

σPC1.child=PC.parent(ρPC1(PC)×PC)\sigma_{PC1.child=PC.parent}(\rho_{PC1}(PC)\times PC)

Division (÷\div)

  • 다음과 같은 쿼리를 표현하는데 유리함
    • 모든 CS 과목들을 수강한 학생들을 찾으세요.
  • RR이 두개의 attributes (x,y)(x,y), SS(y)(y)를 갖는다면
  • R÷SR\div Sxx들 중 모든 yy와 매치되는 xx의 집합을 반환함
  • 예를 들어 RRFriend(x,y)Friend(x,y)이고, SS가 10명 학생의 집합이라면,
    • R÷SR\div S는 모든 10명과 친구인 모든 xx들의 집합을 반환함.

Observations

  • Division ÷\div는 카테시안 곱의 역임
  • 이는 기본 연산자로 표현할 수 있음
r÷s=π(RS)(r)π(RS)[(π(RS)(r)×s)r]r\div s = \pi_{(R-S)}(r)-\pi_{(R-S)}[(\pi_{(R-S)}(r)\times s)-r]

0개의 댓글