2022.02.22 - [개발/데이터베이스 시스템] - 모델링, ER 모델
이어지는 포스팅입니다.
목표
- 관계형 모델의 개념과 관계 연산을 할 수 있다.
목차
- 관계형 모델
- ERD의 변환
- 관계 연산 (관계형 모델의 데이터 연산)
관계형 모델
논리적 데이터 모델링
DBMS에서 사용하는 데이터 모델 구조에 맞게 데이터를 설계 (표현)하는 것을 말합니다. 이때 개념 스키마가 생성됩니다. 이 포스팅에서는 그중 관계형 디비 (relational database management system, RDBMS)를 위한 관계형 모델에 대해 말하고자 합니다.
관계형 모델 (relational model, relation)
릴레이션 (relation, 관계)으로 데이터를 표현하는 모델로, 현재 대다수 DBMS가 RDBMS이기 때문에 가장 보편적인 논리적 모델링입니다.
릴레이션의 구성은 다음과 같습니다.
위 표 자체가 하나의 인스턴스입니다. 컬럼 값 (데이터)는 2개 이상의 메타데이터로 이루어집니다. (예 : '아르헨티나' 값은 '메신', '바르셀로나'라는 메타데이터로 이루어진 주소 데이터)
릴레이션의 특징
- 레코드의 유일성 : 중복된 레코드는 존재하지 않음
- 레코드의 무순서성 : 레코드 간의 순서는 의미 없음
- 컬럼의 무순서성 : 컬럼 간의 순서는 의미가 없고, <컬럼이름, 데이터>가 한 쌍
- 컬럼 값의 원자성 : 컬럼 값은 더 이상 나눌 수 없는 데이터
원자성의 경우 예를 들면 ', '을 구분자로 여러 데이터를 하나의 컬럼에 저장하는 것은 관계형 모델에 어긋나는 지양해야 한다는 뜻입니다.
키 (key)
키는 릴레이션 레코드의 유일 값으로서 그 레코드의 유일성을 나타내는 대표 값의 역할을 합니다. 따라서 키는 유일성 (Uniqueness)과 최소성 (Irreducibility)을 가집니다. 키는 하나 이상의 컬럼으로 이루어집니다. 키의 종류는 다음과 같습니다.
- 수퍼키 (super key) : 유일성 만족
- 후보키 (cadidate key) : 유일성을 만족 and 최소성을 만족
- 기본키 (primary key, PK) : 후보키 중 릴레이션 안에 레코드 구분을 위해 선택된 키
- 외래키 (foreign key, FK) : 다른 릴레이션과의 참조를 위해 선택된 다른렐레이션의 기본키
제약조건
- 영역 제약조건 : 컬럼에 정의된 영역에만 해당하는 값이 들어감 (글자 수, 숫자의 크기 등)
- 키 제약조건 : 키는 레코드 간의 유일성을 유지할 수 있는 값으로 구성
- 개체 무결성 제약조건 : 기본키는 NULL이면 안됨
- 참조 무결성 제약조건 : 반드시 존재하는 다른 릴레이션 레코드의 기본키만 참조
ERD의 변환
ERD도 마찬가지로 RDBMS에 맞게 변환하여야 합니다. 아래와 같이 변환할 수 있습니다.
연고지라는 관계 집합 자체도 하나의 릴레이션으로 변환할 수 있습니다.
관계 연산 (관계형 모델의 데이터 연산)
릴레이션들 간의 연산을 통해 새로운 릴레이션 (임시 릴레이션)으로 표현하는 것을 관계 연산이라 합니다. 사용자 (개발자) 측에서 보면 각 릴레이션들 중 필요한 데이터만 의도에 맞게 조건을 주어 연산하도록 하는 것입니다.
- SELECT 연산 : 릴레이션에서 조건에 만족하는 레코드를 선택하여 릴레이션을 생성
- 프로젝션 연산 : 필요한 컬럼만 골라서 릴레이션을 생성
- 관계대수 연산 : 특정 조건에 맞는 컬럼값을 릴레이션으로 생성
- 집합 연산 : 릴레이션을 하나의 집합, 레코드를 그 집합의 원소로 보고 연산
- 카티시언 프로덕트 연산 : 두 릴레이션 사이 레코드 간의 모든 조합을 생성하는 것 (cross join)
- 조인 연산 : 카티시언 프로덕트 연산 이후 특정 조건에 맞는 레코드를 릴레이션으로 생성하는 것
- 집계 함수 연산 : 집계 함수 (합계, 평균, 최댓값 등)를 특정 레코드의 집합에 적용하여 연산하는 것
'Programming > Database System' 카테고리의 다른 글
SQL (2) - 데이터 검색, SELECT (0) | 2022.04.04 |
---|---|
SQL (1) - 데이터베이스 객체와 DDL, DML (0) | 2022.03.23 |
[ORACLE] 시퀀스를 여러 테이블에서 공유하면 안될까 (0) | 2022.03.03 |
모델링, ER 모델 (0) | 2022.02.22 |
데이터베이스 (DB)의 이해 (1) | 2022.02.18 |
댓글