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하다
- 속성의 값은 하나만 있어야 한다. single value
- 전화번호(+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
set differenct
assignment
- 때로는 위와 같은 algebra expression의 결과를 일시적인 relation 변수에 저장해두면 편리하다.
- assignment 연산을 통해 일시적인 table에 저장하고, 이를 다른 연산에 보다 간단하게 이용한다.
rename
- algebra expression의 결과는 다음에 그걸 또 refer하고 싶어도 따로 이름이 없다. 이를 위해 rename을 사용한다.
- 인자로 들어가는 건 table 이름과 relation expression 결과 모두 가능하다
(assignment vs rename)
- Assignment : 동일한 table을 또 만든다
- rename : 이름만 다르게 해서 사용한다
Equivalent Queries
손으로 직접 써가면서 공부하기.
연습문제 풀어보기.