관계 데이터 구조
관계 데이터의 특성
- 테이블 형태(tabular form)의 구조로 모든 데이터를 표현
- 이론적으로는 수학적인 릴레이션(mathematical relation)을 기초로 함
- 테이블의 행(row)은 튜플(tuple), 테이블의 열(column)은 애트리뷰트(attribute)로 표현
- 연산수행이 한 번에 한 행을 접근하는 방식(row-at-a-time)이 아닌 한 번에 하나의 레코드 집합을 접근하는 방식(set-at-a-time)
애트리뷰트 (attribute)
- 가장 작은 논리적 단위
- 속성의 유일한 식별을 위해 속성의 명칭은 유일
도메인 (domain)
- 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자(atomic)값들의 집합
- 같은 도메인의 값만 비교 허용
릴레이션 (Relation)
릴레이션 R의 수학적 개념
- 테이블에 대한 수학적 용어
- 차수(degree)
- 카디널리티(cardinality)
릴레이션의 정의
- 릴레이션 = 릴레이션 스키마(scheme) + 릴레이션 인스턴스(instance)
- 릴레이션 스킴(scheme, schema, 내포(intension))
- 릴레이션 이름 + 애트리뷰트 이름 + 제약 조건
- 릴레이션의 구조를 의미하며 자주 변하지 않는 정적 성질을 가짐
- 릴레이션 인스턴스(instance, 외연(extension))
- 릴레이션의 인스턴스는 어느 한 시점에 릴레이션의 내용(상태)
- 저장된 데이터 전체를 의미(튜플 전체)
- 삽입, 삭제, 갱신으로 자주 내용이 변하는 동적 성질을 가짐
릴레이션의 특성
- 튜플의 유일성: 한 릴레이션에 포함된 튜플들은 모두 상이
- 튜플의 무순서성: 한 릴레이션에 포함된 튜플 사이에는 순서가 없음
- 애트리뷰트의 무순서성: 한 릴레이션을 구성하는 애트리뷰트 사이에는 순서가 없음
- 애트리뷰트의 원자성: 모든 애트리뷰트 값은 원자값(atomic value)
릴레이션과 테이블의 차이점
- 추상적 개념인 릴레이션을 구체적으로 표현한 것이 테이블
- 하나의 릴레이션은 여러 가지 형태의 테이블로 표현 가능
- 테이블은 같은 행을 중복해서 가질 수 있음
- 테이블은 왼쪽에서 오른쪽으로 열들이 순서가 정해져 있음
이진 / 순환 관계성의 사상 방법
Relationship의 사상 시 고려 사항
- relationship의 제약 조건 준수: 1:N / M:N / 1:1 relationship
- mandatory(total) / optional(partial) relationship
- 키 무결성(key integrity) 준수
- 널 값(null value)의 발생 최소화
- 조인(join)연산 횟수 고려
Relationship의 사상 방법
이진 관계성 (Binary Relationship)
- 일대일(1:1) 관계
- 양쪽 모두 선택적 참여(부분 참여) 관계는 외래키를 서로 주고받음
- 남자(주민번호, 남자이름, 여자주민번호, 날짜), 여자(주민번호, 여자이름, 남자주민번호, 날짜)
- 어느 한쪽이 의무적 참여(전체 참여) 관계는 필수적으로 참여하는 개체에 대응하는 릴레이션에만 외래키를 포함
- 손님(손님번호, 손님이름), 카드(카드번호, 카드종류, 신용한도, 손님번호)
- 양쪽 모두 의무적 참여(전체 참여) 관계는 릴레이션 하나로 합침
- 손님선적정보(손님번호, 우편번호, 선적주소, 손님이름)
- 일대다(1:N) 관계
- 1측 개체 릴레이션의 기본키를 가져와 n측 개체 릴레이션에 포함시키고 외래키로 지정
- 판매원(이름, 전화번호), 주문(주문번호, 날짜, 이름)
- 다대다(M:N) 관계
- 기존 두 관계의 기본키로 구성되는 새로운 관계를 생성하며, 새로운 관계의 기본키로는 기존 두 관계의 기본키를 결합한 복합키를 사용
- 학생(학생번호, 학과), 과목(과목번호, 과목이름), 등록(학생번호, 과목번호, 학점)
순환 관계성 (Recursive Relationship)
- 순환 관계성 집합을 관계로 전환하는 방법은 이진 관계성 집합의 전환방법과 동일
- 일대다(1:N) 순환 관계성
- 1측 개체 릴레이션의 기본키를 가져와 n측 개체 릴레이션에 포함시키고 외래키로 지정
- 직원(직원번호, 이름, 생년월일, 상사직원번호)
- 다대다(M:N) 순환 관계성
- 기존 두 관계의 기본키로 구성되는 새로운 관계를 생성하며, 새로운 관계의 기본키로는 기존 두 관계의 기본키를 결합한 복합키를 사용
- 직원(직원번호, 이름, 생년월일), 감독(부하직원번호, 상사직원번호)
삼진이상의 관계 타입
- 삼원 또는 그 이상의 다원 관계성 집합은 새로운 릴레이션을 생성하고 새로운 릴레이션은 기존 릴레이션의 기본키로 구성되며, 기본키는 다측의 기본키로 선정
- 사원(공급자#, 이름, 나이, 주소), 부품(부품#, 이름, 색상), 프로젝트(프로젝트#, 이름), 공급(공급자#, 부품#, 프로젝트#, 물량)
확장 ER 모델 / 특수한 속성의 사상방법
일반화, 집단화 관계성 집합의 사상
일반화
- 상위 개체집합의 기본키를 하위 개체집합의 기본키로 다시 사용
- 직원(직원번호, 직원이름, 호봉), 생산직원(직원번호, 기술분야), 영업직원(직원번호, 최대할인율, 할당액)
집단화
- 집단화 관련 관계를 별도의 릴레이션으로 생성하고 기본키는 복합키로 구성
- 종업원(사원번호, 이름), 프로젝트(번호), 기계(기계번호, 기계이름), 작업(사원번호, 프로젝트번호), 사용(사원번호, 프로젝트번호, 기계번호)
특수한 attribute / entity type의 사상
약한 개체타입 (weak entity type)
- 약한 개체타입의 식별은 강한 개체타입의 기본키와 약한 개체타입의 부분키로 식별
- 사원 (사원번호, 이름, 나이, 주소, 부서), 부양가족({이름}, 나이, 성별, 관계, 사원번호)
복합 속성 (composite attribute)
- 복합속성 개개 속성이 데이터베이스 내에서 중요한 의미를 가지는 경우에는 나눠 표현하고, 전체를 사용할 때에는 복합속성이 아닌 단순속성으로 표현
- 교수(교수번호, 교수이름, 시, 군, 동) 또는 교수(교수번호, 교수이름, 주소)
다중값 속성 (multi-valued attribute)
- 새로운 릴레이션을 생성하고 생성된 릴레이션을 다중값 속성과 원래 릴레이션의 기본키 값으로 구성하고 원래 릴레이션에서 다중값 속성이 빠지며 새로 생성된 릴레이션의 기본키는 복합키로 구성
- 부서정보(번호#, 이름, 매니저), 부서위치(부서번호#, 위치)
유도 속성 (derived attribute)
- 유도 속성은 릴레이션의 속성으로 포함되지 않음