기본 개념
관계(relation)란 하나의 개체에 관한 데이터를 2차원 테이블 구조로 정리한 것으로 아래와 같이 생겼다. 릴레이션 내에서 생성되는 데이터 간 관계가 있고, 릴레이션 간 생성되는 릴레이션 간 관계가 있다.
행을 튜플(tuple) 혹은 행(row)라 하고, 열을 속성(attribute) 혹은 열(column)이라 한다.
열의 수를 차수(degree), 행의 수를 카디널리티(cardinality)라 한다.
가장 위 열 이름을 스키마(schema)로 볼 수 있고, 각 행에 들어가 있는 값을 인스턴스(instance)로 볼 수 있다.
도메인(domain)은 하나의 속성이 가질 수 있는 모든 값의 집합, 즉 정의역이다. 속성 값에 대한 입력, 수정에서 적합성 여부를 판단하는 기준이 되며, 속성 특성을 고려한 데이터 타입으로 일반적으로 정의된다.
널(null)은 속성 값을 모르거나, 해당하는 값이 없음을 표현하는 것으로 널이 허용된 열에서만 사용 가능하다.
릴레이션에서 튜플은 유일해야 하고, 즉 중복되지 않아야 한다. 또한 튜플 순서에는 의미가 없으며, 속성 순서에도 의미가 없다. 속성 값으로는 원자 값만 사용할 수 있다.
키(key)는 릴레이션에서 튜플들을 유일하게 구별하는 속성 또는 속성들의 집합이다. 릴레이션은 앞서 말했듯 튜플 중복을 서용하지 않기 때문에 속성 중 어느 하나라도 값이 달라야 한다. 즉 키가 존재해야 한다. 릴레이션 간 관계에서도 키가 활용된다.
키로 사용되는 속성 혹은 속성들의 집합은 하나의 릴레이션에서 모든 튜플이 서로 다른 값을 가져야 한다. 이를 유일성(uniqueness)이라 한다. 또한 가능한 최소한의 속성들로만 키를 구성해야 한다. 이를 최소성(minimality)이라 한다.
슈퍼키(super key)는 유일성을 만족하는 속성 혹은 속성들의 집합이고, 후보키(candidate key)는 유일성과 최소성 모두를 만족하는 속성 혹은 속성들의 집합이다. 후보키 중 기본적으로 사용하기 위해 선택된 키를 기본키(primary key)라 한다.
기본키는 릴레이션 내 튜플을 식별할 수 있는 고유한 값을 가져야 하고, 널(null)을 허용하지 않아야 한다. 키 값 변동 역시 일어나지 않아야 하며, 최소성 때문에 가능한 적은 수의 속성을 가져야 한다. 결론적으로 향후 키를 사용하는 데에 문제가 생기면 안된다. 기본키는 밑줄로 표기하는 것이 일반적이다.
대체키(alternate key)는 기본키로 선택되지 못한 후보키를 말한다.
외래키(foreign key)는 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합이다. 예를 들어서 주문 릴레이션에서 주문고객 속성을 고객 릴레이션의 기본키인 고객아이디를 참조하여 사용한다면 주문 릴레이션의 주문고객 속성은 외래키이다. 여기서 주문제품은 또 제품 릴레이션의 기본키인 제품번호를 참조하여 사용할 수 있다. 즉 외래키는 여러개 존재 가능하다.
같은 릴레이션 내 기본키를 참조하는 외래키가 정의될 수도 있다. 예를 들어 고객 릴레이션에서 추천 고객이라는 속성이 같은 릴레이션 내의 기본키인 고객아이디를 참조할 수도 있다. 이때는 기본키가 아니기에 널이 허용될 수도 있다.
제약
관계 데이터 모델을 만들 때는 모델의 안정성을 위해 여러 제약이 필요하다.
무결성 제약조건(integrity constraint)은 데이터의 무결성을 보장하고 일관된 상태를 유지하기 위한 규칙이다. 무결성이란 데이터를 결합없는 상태로 유지하는 것이다.
도메인 무결성 제약조건, 즉 도메인 제약(domain constraint)는 릴레이션 내 튜플들이 각 속성의 도메인이 지정한 값만 가져야 한다는 조건이다. 개체 무결성 제약조건, 즉 기본키 제약(primary key constraint)은 릴레이션 내 기본키를 지정해야 하며, 기본키는 널을 허용해선 안되고, 오직 하나의 값만 존재해야 한다는 조건이다. 참조 무결성 제약조건, 즉 외래키 제약(foreign key constraint)은 자식 릴레이션의 외래키는 부모 릴레이션의 키본키와 도메인이 동일해야 하며, 자식 릴레이션 값이 변경될 때 부모 릴레이션의 제약을 받는다는 조건이다.
'Computer Science and Engineering > Database' 카테고리의 다른 글
[DB] 관계 데이터 연산(relational data operator) (0) | 2025.04.03 |
---|---|
[DB] 데이터 모델링(data modeling) 및 표기법(notation) (0) | 2025.03.26 |
[DB] 데이터 정의어(DDL),데이터 조작어(DML), 데이터 제어어(DCL) (0) | 2025.03.19 |
[DB] 데이터베이스 구조 및 구성 (0) | 2025.03.19 |
[DB] 데이터베이스 관리 시스템(DBMS, database management system) (0) | 2025.03.12 |