도메인
이라고 한다.NULL
은 모든 도메인의 값으로 들어가있다.NULL
이 불가능하다.)관계형 스키마
라고 한다. 이때 좌변을 relation, 우변을 schema (스키마)라고 한다.customer(customer-name, customer-street, customer-city)
와 같이 쓰인다.아래 예시를 보면 더 쉽게 이해할 수 있을 것이다.
NULL
값을 필요로 함 (교수가 정해지지 않은 학생)정규화 이론 (Normalization Theory)은 어떻게 "좋은" 관계형 스키마를 설계할 수 있을지를 다룬다
instructor(ID, name, dept_name, salary)
등)이라고 가정해보자. (: 속성의 집합, : 스키마)
이때, 에 대한 값이 각 가능한 관계 의 고유 튜플을 식별하기에 충분하다면 는 의 슈퍼 키이다.
예시: {ID}
와 {ID, name}
은 모두 강사의 슈퍼 키이다.
슈퍼 키 는 가 minimal할 경우 후보 키가 될 수 있다.
예시: {ID}
는 강사의 후보 키이다.
주의할 점: minimal하다는 것은 후보 키가 하나임을 의미하지 않는다. 키가 여러 개인 집합 자체가 후보 키가 될 수도 있다. 즉, 두 개 이상의 키가 모두 있어야만 unique하게 식별 가능한 경우가 있을 수도 있다.
예시로 아래의대학 데이터베이스의 스키마 다이어그램
에서prereq
테이블을 보자.
prereq 테이블은 선수과목을 나타내는 것으로써, 과목-선수과목을 나타낸다.
한 과목은 여러 개의 선수과목을 가질 수 있다. 따라서course_id
으로는 unique하게 식별할 수 없다.
선수 과목 또한 여러 개의 과목을 가질 수 있다. 따라서prereq_id
만으로는 unique하게 식별할 수 없다.
이러한 이유에 의해, 후보 키로는{course_id, prereq_id}
가 들어갈 수 있으며, Primary Key 또한{course_id, prereq_id}
가 되는 것이다. 특히 "PK는 한 키만 해당할 수 있지 않나?"라고 헷갈리기 쉬운데, 후보 키 집합의 원소 중 하나가 될 수 있다 (즉, 집합도 가능하다)고 생각을 하자.
외래 키는 반드시 다른 관계에 있거나 NULL
값이어야 한다. 이때, 각 테이블에서의 속성 이름은 달라도 된다.
ID
를 PK로 가진다. (NULL
이 될 수 없다.)name
, dept_name
, tot_cred
는 후보 키가 될 수 없다.dept_name
은 FK이다. (NULL
이거나 외부 테이블에 반드시 존재하는 값이다.)dept_name
을 PK로 가진다.building
, budget
은 후보 키가 될 수 없다.s_id
를 PK로 가진다.i_id
는 후보 키가 될 수 없다.s_id
와 i_id
는 FK이다.ID
를 PK로 가진다.name
, dept_name
, salary
는 후보 키가 될 수 없다.dept_name
은 FK이다.course_id
를 PK로 가진다.title
, dept_name
, credits
는 후보 키가 될 수 없다.dept_name
은 FK이다.course_id
와 prereq_id
모두 PK이자 FK이다.ID
, course_id
, sec_id
, semester
, year
는 PK이자 FK이다.grade
는 후보 키가 될 수 없다.time_slot_id
, day
, start_time
은 PK이다.time_slot_id
는 FK이다.end_time
은 후보 키가 될 수 없다.course_id
, sec_id
, semester
, year
는 PK이자 FK이다.building
, room_number
, time_slot_id
는 후보 키가 될 수 없다.building
, room_number
도 FK이다.building
, room_number
는 PK이자 FK이다.capacity
는 후보 키가 될 수 없다.