이번 포스팅은 데이터 모델링에 관한 기본적인 이해를 전제로 합니다. 데이터 모델링에 대해 알지 못하는 경우, 따로 공부를 하거나 "이 포스팅"을 참고한 후 이번 포스팅을 읽기 바랍니다.
관계 데이터 모델의 개념
관계 데이터 모델에서 하나의 개체에 관한 데이터를 "릴레이션"에 담아 데이터베이스에 저장한다. 지금부터 릴레이션과 관련된 기본 용어들을 알아보도록 하겠다.
관계 데이터 모델 기본 용어
- 속성(Attribute): 릴레이션의 열을 의미하며, 각 속성은 서로 다른 이름을 이용해 구별한다.
- 튜플(Tuple): 릴레이션의 행을 의미한다.
- 도메인(Domain): 속성 하나가 가질 수 있는 모든 값의 집합을 말한다.
- 널 값(Null): 릴레이션에 있는 특정 튜플의 속성 값을 모르거나 적합한 값이 없는 경우에 사용하는 특별한 값이다. 숫자 0이나 공백 문자와는 다른 특별한 값이다.
- 차수(Degree): 하나의 릴레이션에서 속성의 전체 개수를 의미한다. 모든 릴레이션은 1 이상의 차수를 유지해야 한다.
- 카디널리티(Cardinality): 하나의 릴레이션에서 튜플의 전체 개수를 의미한다.
릴레이션과 데이터베이스 구성
관계 데이터 모델에서 릴레이션은 "릴레이션 스키마"와 "릴레이션 인스턴스"로 구성되어 있다.
- 릴레이션 스키마(Relation Schema): 릴레이션의 이름과 릴레이션에 포함된 모든 속성의 이름으로 정의하는 릴레이션의 논리적 구조이다. 자주 변하지 않는 정적인 특징을 가진다.
- 릴레이션 인스턴스(Relation Instance): 어느 한 시점에 릴레이션에 존재하는 튜플들의 집합이다. 자주 변경되는 동적인 특징을 가진다.
데이터베이스는 릴레이션 여러 개로 구성된다. 데이터베이스 구성은 다음과 같다.
- 데이터베이스 스키마(Database Schema): 데이터베이스를 구성하는 릴레이션 스키마를 모아놓은 것이다.
- 데이터베이스 인스턴스(Database Instance): 어느 한 시점에 데이터베이스에 저장된 데이터 내용의 전체 집합이다.
릴레이션의 특성
릴레이션에는 네 가지의 중요한 특성이 있고, 이 네 가지 특성을 모두 만족해야 테이블이 릴레이션으로 인정받을 수 있다. 릴레이션의 네 가지 특성에 대해 알아보도록 하겠다.
- 튜플의 유일성: 하나의 릴레이션에는 동일한 튜플이 존재할 수 없다.
- 튜플의 무순서: 하나의 릴레이션에는 튜플 사이의 순서는 무의미하다.
- 속성의 무순서: 하나의 릴레이션에서 속성 사이의 순서는 무의미하다.
- 속성의 원자성: 속성 값으로 원자 값만 사용할 수 있다.
관계 데이터 모델의 키
릴레이션의 튜플들을 구별해주는 역할을 속성이나 속성들의 집합인 "키(Key)"가 담당한다. 키는 관계 데이터 모델에서 중요한 제약조건을 정의하며 튜플을 처리하는데 중요한 역할을 한다. 키는 "슈퍼키", "후보키", "기본키", "대체키", "외래키"로 분류될 수 있다.
- 슈퍼키(Super Key): 유일성의 특성을 만족하는 속성 또는 속성들의 집합
- 후보키(Candidate Key): 유일성과 최소성을 만족하는 속성 또는 속성들의 집합
- 기본키(Primary Key): 여러 후보키 중 기본적으로 사용할 키 (널 값 가능성이 있는 후보키와 값이 자주 변경될 수 있는 후보키는 배제하고, 단순한 후보키를 기본키로 선택하는 것이 좋다.)
- 대체키(Alternate Key): 기본키로 선택되지 못한 키
- 외래키(Foreign Key): 어떤 릴레이션에 소속된 속성 또는 속성 집합이 다른 릴레이션의 기본키가 되는 키, 다른 릴레이션의 기본키를 기대로 참조하는 속성의 집합이다.
관계 데이터 모델의 제약
관계 데이터 모델에서 정의하는 기본 제약 사항은 "무결성 제약조건(Integrity Constraint)"이다. 이는 데이터가 결함없이 정확하고 유효하게 유지되는 상태를 말한다. 관계 데이터 모델이 기본으로 포함하는 무결성 제약조건은 "개체 무결성 제약조건"과 "참조 무결성 제약조건"이 있다. 이 두 가지 모두를 만족시켜야 데이터베이스의 상태를 일관성 있게 유지할 수 있다.
- 개체 무결성 제약조건(Entity Integrity Constraint): 기본키를 구성하는 모든 속성은 널 값을 가질 수 없다는 규칙이다.
- 참조 무결성 제약조건(Referential Integrity Constraint): 외래키는 참조할 수 없는 값을 가질 수 없다는 규칙이다.