CMU Database (15-445/645) 01 Introduction

·2023년 8월 15일

CMU 15-445/645 Database

목록 보기
1/7

CMU Database Fall 2022 를 듣고 정리한 글입니다.


Database

  • 실제 세상의 특정 부분을 모델링하는, 서로 연관된 데이터의 체계적인 컬렉션

ex) 실제 세상의 '디지털 뮤직 스토어'에 대한 모델링을 생각해 보면, 아티스트들에 대한 정보와 아티스트가 발매한 앨범에 대한 정보가 필요하고, 이 정보들은 서로 연관되어 있음.

  • 아티스트가 언제 데뷔했는가?
  • 아티스트가 어떤 앨범들을 발매했는가?

이 정보를 CSV (Comma-separated value) 파일로 저장한다고 가정해 보자.

  • Entity마다 별개의 파일을 갖는다.

여기서 Entity는 저장될 정보를 가지고 있는 객체를 의미하는데, 학교 데이터베이스라고 하면 Student, Teacher, ... 가 Entity가 된다. Entity는 저장될 정보를 의미하는 Attribute를 갖고 있다.

// artist.csv: Artist(name, year, country)
"Wu-Tang Clan", 1992, "USA"
"Notorious BIG", 1992, "USA"
"GZA", 1990, "USA"
// Album.csv: Album(name, artist, year)
"Enter the Wu-Tang", "Wu-Tang Clan", 1993
"St.Ides Mix Tape", "Wu-Tang Clan", 1994
"Liquid Swords", "GZA", 1990

이 데이터베이스에서, GZA가 앨범을 낸 년도를 찾기 위해서는 애플리케이션 레벨에서 다음과 같은 코드를 작성해야 한다.

for line in file.readlines():
  record = parse(line)
  if record[0] == "GZA":
    return int(record[1])

DBMS (Database Management System)

DBMS 는 데이터베이스에 정보를 저장하고, 꺼내올 수 있도록 해주는 소프트웨어이다. DBMS는 데이터 모델을 생성, 조회, 업데이트할 수 있게 해 준다.

  • Data Model: DB의 데이터를 설명하는 개념들의 콜렉션
  • Schema: Data Model을 사용한, 특정 데이터 콜렉션에 대한 설명

초기에는 IDS, IMS CODASYL과 같은 DBMS들이 있었고 이들은 만들고 유지보수하기 어려웠다. 1970년대부터 등장한 Relational Model이 지금까지도 널리 쓰임.

Relational Model

Relational Model에서는 유지보수 비용을 줄이기 위해, 데이터베이스를 Relation 기반으로 표현한다.

  • 데이터베이스는 간단한 자료구조 (Relation)로 표현한다.
  • Physical Storage는 DBMS 구현에 맡긴다.
  • 고수준 언어를 사용하여 데이터에 접근하고, DBMS가 execution strategy를 정한다.

Relational Model: Relation

Relation은 Entity의 Attribute의 관계를 나타내는 unordered set이다. RDB에서 Relation은 기본적으로 Table과 같다. 테이블의 어떤 row도 column도 논리적인 순서를 갖지 않으므로 unordered set임을 알 수 있다.

Tuple은 RDB에서 row/record로도 불리는 것으로, Relation의 Attribute (=domain)의 set.

  • 값은 일반적으로 scalar
  • 특별히 NULL 이라는 값을 허용하기도 함

Relational Model: Primary Key

Primary Key는 single tuple을 unique하게 식별할 수 있는 값이다. 몇 DBMS는 값을 지정하지 않는 경우, 자동으로 값을 지정한다.

  • SEQUENCE (SQL:2003)
  • AUTO_INCREMENT (MySQL)

Relational Model: Foreign Key

Foreign Key는 한 Relation의 Attribute를 다른 Relation의 tuple과 어떻게 연관짓는지를 기술한다.

위 그림에서, ArtistAlbumartist_idalbum_id 는 foreign key로, 각각 ArtistAlbum 의 primary key에 대응된다.

Data Manupulation Language (DML)

DML은 데이터베이스로부터 정보를 어떻게 저장하고 꺼내올지를 나타내는 방법이다.

  • Procedural (Relational Algebra): 원하는 결과를 찾는 high level의 전략을, sets/bags를 사용하여 기술한다.
  • Non-Procedural (Relational Calculus): 원한느 결과를 명세하되, 어떻게 찾는지는 명시하지 않는다.

Relational Algebra

Set algebra를 기반으로 하여 relation의 tuple을 조작하고 가져오는 데 필요한 기초적인 operator 들이 있다. 이 각 operator들은 relation(s)를 받아, 새 relation을 반환한다. 복잡한 작업을 위해서는 operator들을 chaining 할 수 있다.

Relational Algebra: SELECT

predicate 를 만족하는 tuple을 선택해, 원래 relation의 subset을 만든다. 이 때 predicate는 conjunction / disjunction 을 사용하여 복잡한 조건을 표현할 수 있다.

Relational Algebra: Projection

지정한 attribute만을 포함하는 tuple으로 새 relation을 만든다. 이 때 attribute의 순서를 바꾸거나 값을 조작할 수 있다.

Relational Algebra: UNION

Union-compatible한 두 relation (같은 수의 attribute를 가지고 대응되는 attribute의 data type이 같음)에 대해, 한 relation에라도 포함된 tuple로 새로운 relation을 만든다.

Relational Algebra: INTERSECTION

UNION과 같은데, 양 쪽에 모두 있는 tuple로 새로운 relation을 만든다.

Relational Algebra: DIFFERENCE

first relation에는 있지만 second에는 없는 tuple로 새 relation을 만든다.

Relational Algebra: PRODUCT

input relation의 모든 possible combination으로 새 relation을 만든다.


Relational Algebra: JOIN

두 relation의 각 tuple에 대해, attribute 중 같은 값을 가지고 있는 tuple을 combination 해서 새 relation을 만든다.

Relational Algebra: Extra

Observation

Relational Algebra를 사용하면 쿼리를 어떻게 실행할 것인지에 대한 고차원 스텝을 제공할 수 있다.

하지만 결과를 '어떻게' 가져올 것인지가 아니라 '어떤' 결과를 가져와야 하는지를 명세하는 것이 더 좋은 방법

Relational Model 자체는 어떤 Query Language를 사용하더라도 관계 없지만, SQL 이 사실상 표준이다.

위의 csv 구현에서 필요한 데이터를 가져오기 위해 작성했던 코드는 아래와 같은데,

for line in file.readlines():
  record = parse(line)
  if record[0] == "GZA":
    return int(record[1])

SQL로는 아래와 같이 나타낼 수 있다.

SELECT year
FROM artists
WHERE name = 'GZA'

Document Data Model

Relational Model을 제외하면 Document/Object Model이 제일 유망. Document Data Model에서는 Relation이 아니라 Object 안에 embedding 한다.

예를 들어 위 Artist / Album 예시에서, 한 Artist instance의 모든 Album 목록을 가져오려면, artist_id, album_id 의 relation인 ArtistAlbum 을 거쳐야 한다.

하지만 아래 사진처럼 Document Data Model 에서는 Artist object 내부에 Album object를 포함한다.

1개의 댓글

comment-user-thumbnail
2023년 8월 15일

이렇게 유용한 정보를 공유해주셔서 감사합니다.

답글 달기