[DB] 관계형 모델

임승섭·2023년 4월 8일
0

Database system

목록 보기
1/22
post-thumbnail

Example - instructor

attributes (columns) : (ID, name, dept_name, salary)
tuples (rows) : (12121, Wu, Finance, 90000)


relation schema

  • R을 관계(relation)의 이름,
    A1, ... An을 속성(attribute)이라 하면,
    R = (A1, A2, ... , An)으로 표현하고,
    이를 relation schema 라고 한다.
    몇 개의 속성이 있는지 확인 가능하다.
    instructor = (ID, name, dept_name, salary)
  • relation instance r은 schema R에 대해 정의되고,
    r(R)으로 표현한다.
    "The current values a relation are specified by a table"

    릴레이션 인스턴스(Relation Instance)
    - 어느 시점의 릴레이션에 들어 있는 튜플들의 집합


attribute

  • 각 속성에 대해 허용되는 value들의 집합을 domain이라고 한다
    변수의 타입과 비슷하다고 생각하면 된다.
    ID : 정수 or 문자열
    NAME : 문자열

  • 속성의 값들은 atomic 해야 한다. 즉, indivisible하다

    1. 속성의 값은 하나만 있어야 한다. single value
    2. 전화번호(+82, ...)를 보고 다른 정보(국적 등)을 끄집어내면 안된다.
      하나의 속성은 그 자체로서의 의미밖에 없다.
  • special value인 null은 모든 domain의 멤버이다. '알수 없다'는 값을 나타낸다.


Database Schema

  • Database Schema : logical structure of the database

    데이터베이스 스키마(database schema)는 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조이다

  • Database instance : 주어진 특정 시점에 대한 database의 data의 snapshot

Keys

Let K⊆R.
(K는 속성들의 부분집합)

Superkey

  • 만약 K의 value들로 R의 tuple들을 unique하게 식별할 수 있다면
    K는 R의 superkey이다
  • {ID}, {ID, name}는 모두 instructor의 superkey이다.

Candidate key

  • 만약 superkey K가 minimal하다면, K는 R의 candidate key이다
  • {ID}는 instructor의 candidate key이다
  • 혹시나 {ID}와 {name}이 둘 다 candidate key가 될 수는 있지만, {ID, name} pair가 될 순 없다.

Primary key

  • candidate key 중 하나가 primary key가 된다.
  • 이왕이면 더 간결한 것으로 고르는게 낫다.

Foreign key

  • 한 relation에 있는 value가 다른 곳에도 나타난다
  • Referencing relation
  • Referenced relation
  • (번역 어려움)
    "dept_name in instructor is a foreign key from instructor referencing department"
  • 두 relation 간에 여러 속성들이 referencing하고 있을 때는 속성 하나하나는 foreign key가 아니다.
    • 개별적인 속성은 primary key 역할을 하지 못하고 하나의 component일 뿐이다.
    • 속성들이 모두 모였을 때 foreign key 역할을 수행한다.

Relational Algebra

6개의 기본 연산자 (기호는 너무 쓰기 어려워서 생략한다)

  • select
  • project
  • union
  • set difference
  • cartesian product
  • rename

select

  • 주어진 조건을 만족하는 tuple들을 출력한다(?)
  • (instructor)에서 (dept_name = "Physics")를 만족하는 tuple들

project

  • 주어진 속성만 출력한다
  • (instructor)에서 (ID, name, salary)속성만. (dept_name을 제외)

cartesian-product

  • 두 relation의 정보를 합친다
  • 두 관계 간 가능한 모든 pair를 만든다.
  • 속성의 이름이 같을 경우에는 구분해준다 (ID -> insturctor.ID, teaches.ID)
  • Join operation

union

  • 두 relation(r, s)의 정보를 합친다.
  • r과 s는 다음과 같은 조건을 만족해야 한다
    1. 속성의 개수가 동일해야 한다.
    2. 속성들의 domain이 동일해야 한다.

속성의 이름까지 같을 필요는 없다!!

intersection

  • union과 비슷

set differenct

  • union과 비슷

assignment

  • 때로는 위와 같은 algebra expression의 결과를 일시적인 relation 변수에 저장해두면 편리하다.
  • assignment 연산을 통해 일시적인 table에 저장하고, 이를 다른 연산에 보다 간단하게 이용한다.

rename

  • algebra expression의 결과는 다음에 그걸 또 refer하고 싶어도 따로 이름이 없다. 이를 위해 rename을 사용한다.
  • 인자로 들어가는 건 table 이름과 relation expression 결과 모두 가능하다

(assignment vs rename)

  • Assignment : 동일한 table을 또 만든다
  • rename : 이름만 다르게 해서 사용한다
  • 둘 다 질의가 끝나면 끝.

Equivalent Queries

손으로 직접 써가면서 공부하기.
연습문제 풀어보기.

0개의 댓글