course
라는 테이블을 관계로써 생각한다면, course_id
와 각 course
를 나타내는 값인 title
, dept_name
, credits
간의 관계로 생각할 수 있다. 또는, prerequisite
이라는 테이블은 course
와 prereq_course
간의 관계를 나타낸다.Table
은 Relation
의 추상화이다 라고 생각할 수 있다.tuple
, 또는 n
개의 값을 가지는 모음인 n-tuple
과 row
가 대응된다.attribute
가 column
과 대응된다.relation
이 table
과 대응된다.Relation instance
란, 어떤 relation
의 특정 instance
, 즉 특정 행 여러 개를 모아둔 집합이라고 생각할 수 있다. → 따라서 우리는 행의 순서를 고려하지 않고 relation
의 균등함을 판단한다.attribute
에서 가능한 값을 domain
이라고 한다. (정의역?)relation
의 모든 attribute
의 각 domain
은 atomic
해야만 한다. 즉 domain
의 구성 요소들이 원자성을 가져야만 한다. 이 때 atomic
함을 잘 정의한다면, 굳이 억지로 요소를 쪼갤 필요가 없다.010-1234-5678
에서 010
, 1234
, 5678
으로 쪼개서 의미를 가지지 않는다면, 이렇게 쪼갤 필요 없이 010-1234-5678
자체가 atomic
하다고 볼 수 있다.Database schema
: 데이터베이스의 논리적 설계Database instance
: 특정 시점의 데이터베이스 스냅샷Relation
과 Relation schema
Relation
을 프로그래밍 언어의 변수에 대응된다고 하면 Relation schema
는 프로그래밍 언어의 타입 정의에 대응된다고 할 수 있다.department(dept_name, building, budget)
위와 같이 Relation schema
를 나타낼 수 있다.
Key
의 종류Relation
에 속한 tuple
을 어떻게 구분할 수 있을까? → 어떤 두 tuple
도 겹치치 않는 값을 가지는 attribute
인 key
를 통해서 구별하자.Superkey
tuple
의 유일함이 보장되는 1개 이상의 attribute
조합t1 != t2
이면, t1.K != t2.K
이다.Candidate keys
Superkey
의 특성을 가지는 최소 집합Candidate keys
를 확장하면 Superkey
의 부분집합을 만들 수 있다.Primary key
relation
의 tuple
들을 구별하기 위해 설정한 key
이다.Candidate keys
중 하나로 고른다.Primary key constraints
attribute
로 설정해야 한다.Constraint
Foreign-key constraint
(Referential integrity constraint
의 특수한 경우)Foreign key
가 참조한 테이블의 해당 key
는 반드시 Primary key
여야 한다.Referential integrity constraint
(참조 무결성)