CHAPTER 02 관계 데이터 모델
관계 데이터 모델의 개념
1. 릴레이션
릴레이션(relation)-테이블이라고 주로 많이 부름
- 행과 열로 구성된 테이블
- 릴레이션(relation)과 관계(relationship)을 구분 지을 필요가 있음
관계(relationship)
- 릴레이션 내 데이터들의 관계와 릴레이션 간의 관계로 구분할 수 있다.
- 릴레이션 간의 관계는 각 릴레이션 간의 식별 가능한 값을 이용하여 연결한다.
2. 릴레이션 스키마와 인스턴스
- 릴레이션은 스키마와 인스턴스로 이루어진다.
- 스키마(schema): 관계 데이터베이스의 릴레이션의 구성, 정보에 대한 기본적인 구조를 정의
- 헤더: 테이블의 첫 행
- 스키마는 헤더에 나타나며, 각 데이터의 특징을 나타내는 속성, 자료 타입 등의 정보 내포
- 인스턴스(instance): 정의된 스키마에 따라 테이블에 실제로 저장되는 데이터의 집합
릴레이션 스키마
- 릴레이션에 어떤 정보가 담길지 정의
- 용어정리
- 속성(attribute): 릴레이션 스키마의 열
- 도메인(domain): 속성이 가질 수 있는 값의 집합
- 차수(degree): 속성의 개수
- 표기법: ‘릴레이션 이름(속성1, 속성2, 속성3, …)’ 또는 ‘릴레이션 이름(속성1: 도메인1, 속성2: 도메인2, 속성3: 도메인3, …)’
릴레이션 인스턴스
- 릴레이션 스키마에 실제로 저장된 데이터의 집합
- 용어정리
- 투플: 릴레이션의 행
- 카디날리티: 투플의 수
3. 릴레이션의 특징
- 속성의 단일 값을 가진다.
- 속성은 서로 다른 이름을 가진다.
- 한 속성의 값은 모두 같은 도메인 값을 가진다.
- 속성의 순서는 상관없다.
- 릴레이션 내의 중복된 투플은 허용하지 않는다.
- 투플의 순서는 상관없다.
관계 데이터 모델
- 데이터를 2차원 테이블 형태인 릴레이션으로 표현
- 제약조건(constraints)와 관계 연산을 위한 관계대수(relational algebra)를 정의
- 관계 데이터베이스 시스템: 관계 데이터 모델에 기초하여 SQL을 기반으로 구현(아래의 내용을 SQL로 구현한 것)
- 릴레이션의 생성, 관리
- 제약조건
- 관계대수
무결성 제약조건
- 데이터를 저장하는 데 있어서 DB는 일관성을 유지하고 중복을 제거하는 등 데이터의 신뢰도를 유지해야 한다.
1. 키
- 식별자의 역할
릴레이션 내의 중복된 투플은 허용하지 않는다.
라는 조건이 있기에 투플들을 서로 구별할 수 있어야한다.
- 관계를 맺는 역할도 수행한다.
슈퍼키(super key):
- 투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합
후보키(candidate key)
- 투플을 유일하게 식별할 수 있는 속성의 최소 집합
- 하나의 속성으로 식별이 불가능할 때, 두 개 이상의 속성으로 이루어진 키를 복합키(composite key)라고 한다.
기본키(PK, primary key)
- 여러 후보키 중 하나를 선정하여 대표로 삼는 키
- 기본키 제약조건
- 릴레이션 내 투플은 식별할 수 있는 고유한 값을 가져야 한다.
- NULL 값은 허용하지 않는다.
- 키 값의 변동이 일어나지 않아야 한다.
- 최대한 적은 수의 속성을 가진 것이어야 한다.
- 향후 키를 사용하는 데 있어서 문제 발생 소지가 없어야 한다.
- 릴레이션 스키마를 표현할 때 기본키는 밑줄을 그어 표시한다.
대리키(surrogate key), 인조키(artificial key)
- 기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때는 일련번호 같은 가상의 속성을 만들어 기본키로 삼는다. 이것이 대리키 또는 인조키(artificial key)라고 한다.
- DBMS나 관련 소프트웨어에서 임의로 생성하는 값
대체키(alternate key)
- 기본키로 선정되지 않은 후보키
외래키(FK, foreign key)
- 다른 릴레이션의 기본키를 참조하는 속성
- 관계 데이터 모델의 특징인 릴레이션 간의 관계를 표현
- 성립 조건
- 참조하고 참조되는 양쪽 릴레이션의 도메인이 서로 같아야한다.
- 참조되는 릴레이션의 기본키의 값이 변경되면 이 기본키를 참조하는 외래키 값도 변경(연동되어야 한다.)
- NULL 값과 중복 값 등이 허용된다.
- 자기 자신의 기본키를 참조하는 외래키도 가능하다.
- 외래키가 기본키의 일부가 될 수 있다.
2. 무결성 제약조건
- 데이터 무결성(integrity): 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것
- 투플의 삽입, 삭제, 수정 시 데이터의 제약조건 준수 여부를 확인하여야 한다.
[도메인] 제약조건
도메인 무결성 제약조건(domain integrity constraint)
- 릴레이션 내의 투플들이 각 속성의 도메인에 지정된 값만을 가져야 한다.
- 도메인 제약이라고도 한다.
- 속성 값과 관련된 무결성으로, SQL 문에서 데이터 형식(type), 널(null, not null), 기본 값(default), 체크(check) 등을 사용하여 지정할 수 있다.
[키] 제약조건
개체 무결성 제약조건(entity integrity constraint)
- 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙 즉, 기본키는 NULL 값을 가져서는 안 되며 릴레이션 내에 어오직 하나의 값만 존재해야 한다는 조건이다.
- 기본키 제약(primary key constraint)이라고도 한다.
참조 무결성 제약조건(referential integrity constraint)
- 부모 릴레이션: 참조되는(제공하는) 릴레이션
- 자식 릴레이션: 참조하는(제공받는) 릴레이션
- 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 속성의 도메인이 동일해야 하며, 자식 릴레이션의 값 변경 시 부모 릴레이션의 값에 제약을 받는다는 조건이다.
- 즉, 부모 릴레이션의 도메인과 다른 값으로 삽입, 수정될 경우 거부되고, 반대로 자식 릴레이션에서 참조하고 있는 값을 부모 릴레이션에서 삭제하거나 다른 값으로 변경하려고 하면 거부된다.
- 외래키 제약이라고도 한다.
유일성 제야조건, 고유성 제약조건(UNIQUE 제약조건)
- 속성의 모든 값들에 서로 같은 값이 없어야 한다는 것.
- 기본키와 달리 NULL값을 허용한다.
3. 무결성 제약조건의 수행
- 제약조건의 준수여부는 데이터의 변경(삽입, 수정, 삭제)이 있을 때마다 확인해야 한다.
개체 무결성 제약조건
- DBMS는 투플을 삽입하거나 수정할 때마다 개체 무결성 제약 조건을 지키는지 확인한다.
- 삽입
- 같은 PK를 가지거나, PK가 NULL인 경우 삽입 거부
- 수정
- 삽입과 마찬가지로 DBMS가 동일 값이 존재하는지 검색 후 처리한다.
- 삭제
- 외래키로 참조하고 있지 않으면 바로 삭제한다.
참조 무결성 제약조건
- 단일 릴레이션에 대한 내용이 아니다. 두 릴레이션 간의 참조 관계를 처리한다.
- 삽입
- 자식 릴레이션에 삽입하려는 외래키가 부모 릴레이션에 없다면 삽입은 거부
- 단, 자식 릴레이션의 외래기 속성에 NULL값을 허용한다면 삽입가능하다.
- 삭제
- 자식 릴레이션에서 투플이 삭제되는 경우 부모 릴레이션에는 아무런 영향을 주지 않으므로 바로 삭제 가능
- 단, 부모 릴레이션에서 삭제 시에는 해당 투플을 참조하는 다른 릴레이션이 없는지 확인해야한다.
- 만약 문제가 생긴다면,
- 즉시 작업 중지
- 자식 릴레이션의 관련 투플을 삭제
- 초기에 설정된 다른 어떤 값으로 변경
- NULL 값으로 설정
투플을 삭제할 때, 참조 무결성 제약조건을 수행하기 위한 4가지 옵션
명령어 | 의미 |
---|---|
RESTRICTED | 자식 릴레이션에서 참조하고 있을 경우 부모 릴레이션의 삭제 작업을 거부함 |
CASCADE | 자식 릴레이션의 관련 투플을 같이 삭제 |
DEFAULT | 자식 릴레이션의 관련 투플을 미리 설정해둔 값으로 변경 |
NULL | 자식 릴레이션의 관련 투플을 NULL 값으로 설정함(NULL 값을 허가한 경우) |
- 수정 | |
- 삭제와 삽입 명령이 연속해서 수행된다고 보면 된다. | |
- 부모 릴레이션의 수정이 일어날 경우 삭제 옵션에 따라 처리된 후 문제가 없으면 다시 삽입 제약조건에 따라 처리된다. |
관계 대수
- 릴레이션에서 데이터를 추출하는 데 사용하는 언어인 관계대수에 대해 배운다.
1. 관계 대수
- 릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어이다.
관계의 수학적 의미
- 관계 데이터베이스는 수학적 의미의 릴레이션에 기초한다.
- 집합의 개념을 적용한 것으로, 합집합(∪), 교집합(∩), 카티전 프로덕트(X) 등이 있다.
관계대수 연산자
- 순수 관계 연산: 관계형 데이터 모델을 위해 고안
- 셀렉션(selection), 프로젝션(projection), 조인(join), 디비전(division), 개명(rename)
- 일반 집합 연산: 수학의 집합이론에서 차용
- 합집합(union), 차집합(difference), 교집합(intersection), 카티전 프로덕트(cartesian product)
관계대수식
- 단항 연산자: 연산자<조건> 릴레이션
- 이항 연산자: 릴레이션1 연산자<조건> 릴레이션2
2. 셀렉션과 프로젝션
- 셀렉션과 프로젝션은 관계 대수에서 가장 기본적인 연산으로 하나의 릴레에션을 대상으로 하는 단항 연산자이다.
셀렉션(selection)
- 릴레이션의 투플을 추출하기 위한 연산
- 하나의 릴레이션을 대상으로 하는 단항 연산자
- 찾고자 하는 투플의 조건을 명시하고 그 조건에 만족하는 투플을 반환한다.
- 조건:
<속성> = <상수값 또는 속성>
형태가 올 수 있다.
프로젝션(projection)
- 릴레이션의 속성을 추출하기 위한 연산으로 단항 연산자이다.
- 결과 릴레이션의 차수는 대상 릴레이션의 차수보다 작거나 같고 카디날리티는 동일하다.
3. 집합 연산
- 집합연산자 중 합집합, 교집합, 차집합은 두 릴레이션의 차수 및 도메인과 속성의 순서가 동일해야 한다.
- 각 릴레이션의 속성 수가 같고 순서도 같아야 하며, 각각 동일한 도메인으로 대응되어야 한다. → 합병 가능
- 속성 이름은 동일하지 않아도 되먀, 반환되는 릴레이션의 속성 이름은 첫 번째 릴레이션의 이름과 같다.
합집합
- 두 개의 릴레이션을 합하여 하나의 릴레이션을 반환한다.
- 두 개의 릴레이션은 서로 같은 속성 순서와 도메인을 가져야 한다.
교집합
- 두 릴레이션이 공통으로 가지고 있는 투플 반환
차집합
- 첫 번째 릴레이션에는 속하고 두 번째 릴레이션에는 속하지 않는 투플을 반환한다.
카티전 프로덕트
- 합집합, 교집합, 차집합이 수직적 연산이라면, 카티전 프로덕트는 수평적 연산
- 두 릴레이션을 연결시켜 하나로 합칠 때 사용
- 속성과 도메인이 동일할 필요는 없다.
- 결과 릴레이션의 차수는 두 릴레이션의 차수의 합이며, 카디날리티는 두 릴레이션의 카디날리티의 곱이다.
- 결과 릴레이션의 속성 이름은 두 릴레이션에서 그대로 가져와 사용
- 만약 두 릴레이션의 속성 이름이 같다면, ‘<릴레이션 이름>.<속성 이름>’의 형태로 표현하거나 순서(위치)를 사용하여 표현한다.
- 카티전 프로덕트는 두 릴레이션을 무조건 수평으로 합친 결과를 반환하기 때문에 결과에 의미가 없다.
- 즉, 유용한 자료로 활용하기 힘들다.
- 이를 해결한 것이 조인이다.
4. 조인
- 두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 투플을 수평으로 결합하는 연산
- 즉, 두 릴레이션을 카티전 프로적트 연산을 한 후 셀렉션 연산을 한 것
- 조인을 수행하기 위해서는 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성되어야 한다.
세타조인(theta join)
- 조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 투플만 반환한다.
동등조인(equi join)
- 내부조인(inner join)이라고도 한다.
- 세타조인에서 =연산자를 사용한 조인
- 보통 조인 연산은 동등조인을 지칭한다.
자연조인(natural join)
- 동등조인에서 조인에 참여한 속성이 두 번 나오지 않도록 두 번째 속성을 제거한 결과를 반환
외부조인(outer join)
- 외부조인은 자연조인의 확장된 형태
- 외부조인은 자연조인 시 조인에 실패한 투플을 모두 보여주되 값이 없는 대응 속성에는 NULL 값을 채워서 반환한다.
- 왼쪽(left) 외부조인, 오른쪽(right) 외부조인, 완전(full) 외부조인이 있으며, 각 방향을 기준으로 자연조인에 실패한 투플을 모두 보여준다.(빈 값은 NULL)
세미조인(semi join)
- 자연조인을 한 후 두 릴레이션 중 한쪽 릴레이션의 결과만 반환한다.
- 왼쪽, 오른쪽이 있다.
5. 디비전
- 릴레리션의 속성 값의 집합으로 연산을 수행
- 속성 A와 B로 이루어진 릴레이션 R과 속성 B로 이루어진 릴레이션 S의 디비전 연산은 , 릴레이션 S의 속성 B값과 서로 동일하게 대응하는 릴레이션 R의 속성 A의 투플들을 반환한다.
Reference
'Develop > Database' 카테고리의 다른 글
DB | 데이터 모델링 (1) | 2023.08.28 |
---|---|
DB | 데이터베이스 프로그래밍 (1) | 2023.08.27 |
DB | SQL 고급 (2) | 2023.08.27 |
DB | SQL 기초 (0) | 2023.08.25 |
DB | 데이터베이스 시스템 (0) | 2023.08.25 |