Contents

  • Relational Model + Schema
  • Declarative Queries
  • Query Optimization
  • Efficient access and updates to data
    • Recoverability
    • Consistency

What is a database?

  • structured data collection
    • Records
    • Relationships

DB가 다루는 데이터: entity와 그것의 관게 정의되어 있는 것

data 넣고, 사람들이 질문하면 응답 빠르고 정확하게 주는것이 DBMS의 목적.


MAPD (massively parallel database)
대량 data 있을 때 빨리 처리하는 GPU base DB
big data의 real-time querying & visualization을 위해 GPU 사용
(디테일 생략)

Zoo data

추후에 예시로 종종 사용예정

Zoo website features

  • Admin interfac
    • Edit
    • Add an animal
  • Public
    • Pictures & Maps
  • Zookeeper
    • Feed times

entity relationship diagram

1

2 두 table 사이의 relation Cageid로 표현
relation조차 entity로 표현 (foreign key로 연결)

더 고전적인 relation 나타내는 방법

Hierarchy & Graph

3

data 정규화 하는 이유: 중복 최대한 피하고자
(추후에 다룸)

SQL - Structured Query Language

: 질의를 하는 언어

가장 기본적인 format:

SELECT field1, ... ,fieldM
FROM table1, ...    -- 읽어올 대상이 되는 table
WHERE condition1, ...

값 추가:

INSERT INTO table VALUES (field1, ...)

-> 괄호 안이 값

ex)

insert into keeper values (1,'Jenny');
insert into keeper values (2, 'Joe);

값 수정:

UPDATE table SET field1 = x, ...
WHERE condition1, ...

Declarative Queries

  • imparative VS declarative
    • Imparative = 명령적, 절차적
      C, Java, Python 등. 시키는 것만 함
      (nested loops)
        for each row r in animals 
        if r.species = 'giraffe'
            output r.name
      
    • Declarative = 선언적
      how X, what O
      어떻게 해야하는지 명시 X, 뭘 해야하는지만 명시 O
      (join)
      SELECT r.name FROM animals
      WHERE r.species = 'giraffe'
    
  • 코드로 비교
    • 종이 기린인 모든 동물의 이름 출력
      • Imparatives
          for each row r in 'animals'
          if r.species = 'giraffe'
              output r.name
        
      • Declarative
          SELECT r.name FROM animals
          WHERE r.species = 'giraffe'
        
    • Building32의 모든 cage
      • Imparative
          for each row a in animals
          for each row c in cages
              if a.cageno = c.no and c.bldg = 32
                  output a
        
      • Declarative
          SELECT a.name FROM animals AS a, cages AS c
          WHERE a.cageno = c.no AND c.bldg = 32
        

Query examples

  • 곰 나이의 평균
    SELECT AVG(age) FROM animals
    WHERE species = 'bear'
    

    <Complex Queries>

  • 한살 이상의, 같은 종의 암수의 쌍 출력
    SELECT a1.name, a2.name                 -- 4) 한 쌍
    FROM animals as a1, animals as a2
    WHERE a1.gender = M and a2.gender = F   -- 3) 암수
    AND a1.species = a2.species             -- 2) 종이 동일한
    AND a1.age>1 and a2.age>1               -- 1) 1살 이상인
    

    => self join
    animal table은 1개인데, 2개인것처럼 연결하는 것

  • 평균적으로 밥 먹는 (feed time)시간보다 늦는 salamander 종인 동물
SELECT  cages.cageid FROM cages, animals
WHERE animals.species = 'salamander'
AND animals.cageid = cages.cageid
AND cages.feedtime>
    (SELECT AVG(feedtime) FROM cages)

=> nested queries 한 테이블에 결과 추린 후 그 table에 다시 질문한 것

  • student와 salamander를 동시에 관리하는 keeper
    SELECT keeper.name
    FROM keeper, cages as c1, cages as c2,
      keeps as k1, keeps as k2, animals as a1, animals as a2
    WHERE c1.cageid = k1.cageid AND keeper.keeperid = k1.keeperid
    AND c2.cageid = k2.cageid AND keeper.keeperid = k2.keeperid
    AND a1.sepcies = 'student' AND a2.species = 'salamander'
    AND c1.cageid = a1.cageid AND c2.cageid = a2.cageid
    

4

동물은 어떤 cage에 살꺼고, -> 그 cage의 사육사 id 있을 꺼고, -> 이 ID 들이 같은 경우 출력

Declarative Queries

: ‘What’ not ‘How’

5

SQL -> Procedural Plan -> Optimized Plan -> Compiled Program

SQL 쿼리에 대한 여러 후보 plan (Procedual Plan)
처리하는 데이터 양이 적거나 횟수가 적은 등 **제일 비용 적은** plan (Optimized plan)선택
       optimized plan의 예시로, WHERE 뒤에 들어가는 condition
       join 후에 condition 들어가는 것이 아닌,
       condition 먼저 선별 수 join


출처 : 2023-2 ITE2038 수업