데이터 모델
- 물리적 혹은 추상적으로 존재하는 현실 세계를 단순화되고 정형화된 형태로 표현하는 하나의 방식 또는 규범이다
- 실제 데이터가 갖는 특성을 살리면서, 목적에 맞게 관심있는 정보만을 단순화 하여 표현하는 방식이다. 이때, 데이터에 대한 조작이 가능해야 한다.
관계형 데이터 모델(Relational Data Model)
- 테이블 형식을 이용하여 데이터들을 정의하고 설명한 모델이다
- 실세계의 데이터를 누구나 직관적으로 이해할 수 있는 형태로 기술할 수 있는 간단한 방식이다.
- 테이블을 릴레이션이라고 부른다.
릴레이션(Relation)
- 수학적으로 두 개 이상의 집합으로부터 각 집합을 구성하는 원소들의 순서쌍에 대한 집합을 의미한다.
- 테이블이라고 표현할 수 있다.
이름 = {김짱구, 이철수, 박맹구}
주소 = {서울, 대전, 대구, 부산}
순서쌍 = {김짱구, 서울}, {이철수, 서울}, {박맹구, 부산}
릴레이션의 요소
속성(attribute)
- 릴레이션을 구성하는 각 열(column)의 이름
- 예를 들어, '주소록 릴레이션'을 구성하는 속성은 이름, 전화번호, 주소, 생일이 있다.
- 필드(field), 컬럼(column)이라고 표현할 수 있다.
튜플(tuple)
- 릴레이션의 각 행
- 예를 들어, '주소록 릴레이션'의 한 튜플은 {홍길동, 010-1234-1234, 서울, 3월 15일}이다.
- 레코드(record), 행(row)이라고 표현할 수 있다.
도메인(domain)
- 각 필드에 입력 가능한 값들의 범위이다. 즉, 각 필드가 가질 수 있는 모든 값들의 집합이다.
- 더 이상 분리되지 않는 원자값(atomic value)이어야 한다.
널(null)
- 특정 필드에 대한 값을 알지 못하거나 아직 정해지지 않아 입력하지 못한 경우의 필드의 값
- 0이나 공백 문자와는 다르다.
테이블 스키마(Table Schema)
- 테이블 정의에 따라 만들어진 데이터 구조
- 예를 들어, 신입생(학번, 주민등록번호, 이름, 주소, 학과명)으로 나타낼 수 있다.
- 신입생: 테이블의 이름 / 나머지: 필드의 이름
- 테이블 스키마에 정의된 필드의 수를 차수(degree)라고 한다.
테이블 인스턴트(Table Instance)
- 테이블 스키마에 현실 세계의 데이터를 레코드로 저장한 형태
- 스키마는 한번 정의하면 거의 변함이 없지만, 인스턴스는 수시로 바뀔 수 있다.
- 테이블 인스턴스의 레코드 수를 기수(cardinality)라고 한다.
테이블의 특성
- 중복된 레코드가 존재하지 않는다.
- 레코드 간의 순서는 의미가 없다.
- '첫번째 레코드', '두번째 레코드'라는 표현은 의미 없다.
- 레코드 내에서 필드의 순서는 의미가 없다.
- '첫번째 필드', '두번째 필드'란 표현은 의미 없다.
- 모든 필드는 원자값을 가진다.
키(Key)
- 필드들의 일부로 각 레코드를 유일하게 식별해낼 수 있는 식별자
- 일반적으로 하나의 필드를 지정하여 키로 지정하나, 여러 개의 필드들로 키를 구성할 수 있다. 이를 복합키라고 한다.
- 관계형 데이터 모델에서 특정 레코드를 구별하거나 탐색하기 위한 유일한 방법이다.
- null 값을 가지게 되면 식별 기능을 상실하므로, 기본키는 null이 될 수 없다.
키의 종류
수퍼키(super key)
- 아무런 제약 조건 없이 레코드들을 식별할 수 있는 필드의 집합
- (주민등록번호), (학번, 주민등록번호), (주민등록번호, 이름), (이름, 주소)...
후보키(condidate key)
- 최소한의 필드만으로 구성된 키
- (학번), (주민등록번호), (이름, 주소)...
기본키(primary key)
- 후보키 중에서 식별자로 정의한 하나의 키
- 되도록 하나의 필드로 구성된 후보키를 선정하는 것이 유리하다.
외래키(foreign key)
- 다른 테이블의 기본키를 참조하는 필드 집합
- 두 테이블 스키마 R1, R2에 대해 R1의 어떤 필드 집합 FK가 다음 두 조건을 만족하면 FK는 R2의 기본키인 PK를 참조하는 R1의 외래키이다.
- FK의 필드들은 테이블 스키마 R2의 기본키 PK와 동일한 도메인을 가진다.
- R1의 각 레코드들의 FK 값은 R2의 레코드 중 하나의 PK값과 일치하거나 널이 된다. 널이 된다는 것은 알지 못하거나 아직 결정되지 않았다는 것을 의미한다
- R1: 참조하는 테이블(referencing table) / R2: 참조되는 테이블(referenced table)