< 목차 >
0. TL;DR
1. 릴레이션
2. 관계 데이터 모델 (Relation Data Model)
3. 무결성 제약 조건
0. TL;DR
- 릴레이션: 행과 열로 구성된 ‘테이블’
- 스키마: 테이블(릴레이션)이 무엇을 가지고 있는지를 나타내는 것
- 인스턴스: 릴레이션 스키마에 저장된 ‘데이터의 집합’
- 관계 데이터 모델: 데이터를 2차원 테이블 형태인 릴레이션으로 표현
- 데이터 무결성(integrity): 데이터의 일관성과 정확성을 지키는 것
1. 릴레이션
: 행과 열로 구성된 ‘테이블’
데이터를 표(Table) 형태로 표현한 것으로, 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성된다.
용어 | 한글 용어 |
relation | 릴레이션 테이블 |
relational data model | 관계 데이터 모델 |
relational database | 관계 데이터베이스 |
relational algebra | 관계대수 |
relationship | 테이블과의 관계 |
용어를 잘 모르면 나중에 혼동할 수 있으니 새로운 용어가 나올 때마다 제대로 알아두자.
IT를 잘하기 위해서는 용어가 중요하다고 하시니 용어를 정확히 알고 넘어가자.
릴레이션은 수학의 ‘집합’에서 나온 개념이다.
예를 한 번 봐보자. 아래와 같은 데이터가 있다고 가정하자.
강의 번호 | 강의명 | 강사명 | 강의 가격 |
1 | 데이터베이스 | 김디비 | 10000 |
2 | Java | 김자바 | 7000 |
3 | SQL | 이큐엘 | 8000 |
4 | Python | 파이썬 | 9000 |
- 각 집합은 아래처럼 원소로 구성됨
- 강의 번호 = {1, 2, 3, 4}
- 강사명 = {김디비, 김자바, 이큐엘, 파이썬}
- 첫 번째 행은 4개의 집합에서 각 원소 1개씩 선택해 이뤄지며, 관계(= relationship)를 맺고 있음
- 강의 릴레이션은 이러한 관계 4개가 모여 생성됐음
(1) 릴레이션 스키마
: 테이블(릴레이션)이 무엇을 가지고 있는지를 나타내는 것
즉, 관계 데이터베이스의 릴레이션 구성과 어떤 정보를 담고 있는지에 대한 기본 구조를 정의한다.
- 첫 행은 헤더이며 각 데이터의 특징을 나타내는 속성, 데이터 타입 등의 정보를 갖고 있음
- 각 열은 속성(attribute)이라고 하며, 속성은 각각의 이름을 갖고 있음
- 도메인은 속성의 값이 무엇인지 정의
- 차수는 릴레이션이 몇 개의 속성을 가지는지 나타냄
(2) 릴레이션 인스턴스
: 릴레이션 스키마에 저장된 ‘데이터의 집합’
즉, 데이터의 집합은 ‘하나의 행’을 뜻하며 릴레이션에서는 한 행을 튜플(tuple)이라고 부른다.
튜플에 대해 잠시 정리해 보자.
- 튜플은 인스턴스의 각 행을 나타냄
- 튜플의 속성값은 스키마에서 정의한 도메인 값으로 구성됨
- 튜플 속성의 개수는 스키마의 차수와 동일함
- 릴레이션 내의 모든 튜플은 서로 중복되지 않아야 함
- 릴레이션에 저장된 튜플의 수를 카디널리티(cardinality)라고 함
상황에 따라서 용어를 사용하는 게 다른데, 표를 통해서 명확히 알아보자.
릴레이션 용어 | 일반적인 통용 용어 | 파일 시스템 |
릴레이션(relation) | 테이블 (table) | 파일 (file) |
스키마 (schema) | 내포 (intention) | 헤더 (header) |
인스턴스 (instance) | 외연 (extension) | 데이터 (data) |
튜플 (tuple) | 행 (row) | 레코드 (record) |
속성 (attribute) | 열 (column) | 필드 (field) |
위 용어를 현업에서는 혼용해서 사용 중이라고 한다.
(3) 릴레이션 특징
- 속성과 튜플은 단일 값으로 구성
: [예시] 집합 = {운동, 독서, 음악}의 경우 {운동}, {독서}와 같이 단일 값으로 구성해야 함 - 속성은 서로 다른 이름으로 구성
- 한 속성의 값은 모두 같은 도메인으로 구성
: [예시] 이름 column 인데 생년월일이 들어오면 안 됨 - 속성과 튜플의 순서는 상관 없음
: 순서가 달라도 릴레이션 스키마는 동일하기 때문
2. 관계 데이터 모델 (Relation Data Model)
: 데이터를 2차원 테이블 형태인 릴레이션으로 표현
- 릴레이션에 대한 제약조건과 관계 연산을 위한 관계대수를 정의
- 제약조건은 각 릴레이션에 저장된 데이터 값이 가져야 하는 제약
- 관계 데이터 모델을 시스템으로 구현한 것이 관계 데이터베이스
릴레이션 key 종류
키(key): 유일하게 식별한다는 의미
- key 한 개로는 1개의 요소만 열 수 있음
- 관계 데이터베이스에서 key는 릴레이션에서 튜플을 식별할 때 사용
- key는 릴레이션을 맺는 데 사용
(1) 슈퍼키
: 튜플을 유일하게 식별할 수 있는 하나의 속성 or 속성 집합
- 튜플을 유일하게 식별할 수 있는 값이면 모두 슈퍼키 가능
- 슈퍼키는 포함하지 않아도 되는 속성을 포함할 수 있음
- 튜플을 식별할 수 있는 최소한의 속성 집합
- 키를 구성하는 속성이 많으면 관계 표현이 복잡해짐
(2) 후보키
: 튜플을 유일하게 식별할 수 있는 속성의 ‘최소’ 집합
- 효율성 측면에서 매우 중요
- 슈퍼키와 후보키의 차이
: 슈퍼키는 유일한 속성이 아니어서 굳이 없어도 되는 속성을 포함해도 괜찮다면, 후보키는 절대 포함할 수 없음
(3) 기본키 (primary key)
: 여러 후보키 중 하나를 선정해 대표로 삼는 키
- 후보키가 1개라면 그 키를 사용하고, 여러 개라면 릴레이션 특성을 반영해 하나를 선택
- 기본키 제약조건
- 튜플을 식별할 수 있는 고유한 값을 가져야 함
- NULL 값을 허용하지 않음
- key 값의 변동이 발생하지 않아야 함
(4) 대리키 (surrogate key)
: 기본키가 보안을 요하거나 여러 개의 속성으로 구성돼 복잡하거나 마땅한 기본키가 없을 때, 일련번호 같은 가상의 속성을 만들어 기본 키로 사용
소프트웨어에서 임의로 생성하는 값으로, 사용자가 직관적으로 그 값의 의미를 알 수 없다. UUID와 비슷한 개념으로 보인다.
(5) 대체키 (alternate key)
: 기본키로 선정되지 않은 후보키
(6) 외래키 (foreign key)
: 다른 릴레이션의 기본키를 참조하는 속성
- 관계 데이터 모델의 특징인 릴레이션 간의 관계(relationship)를 표현
- 외래키가 성립하기 위해선 참조와 참조되는 양쪽 릴레이션의 도메인이 서로 동일해야 함
- 릴레이션의 기본키 값이 변경되면 참조하는 외래키 값도 모두 변경
⇒ 이런 특징을 ‘외래키 제약조건’이라고 함 - 다른 릴레이션이 아닌 자기 자신을 참조하는 것도 가능
3. 무결성 제약조건
데이터 무결성(integrity): 데이터의 일관성과 정확성을 지키는 것
- DB에 저장된 데이터는 결함이 없어야 하고 질의에 대해 신뢰성 있는 답을 제공해야 함
- DB는 일관성을 유지하고 중복을 제거하는 등 데이터의 신뢰도를 유지해야 함
- 데이터의 삽입, 수정, 삭제 시 여러 가지 제약조건을 따름
- 무결성 제약조건은 튜플에 삽입 가능한 데이터 값을 제한하는 도메인 무결성과 모델의 관계 표현을 위한 개체 무결성, 참조 무결성이 있음
(1) 도메인 무결성 제약조건 | 도메인 제약
: 릴레이션 내의 튜플의 속성이 도메인에 지정된 값만 허용하는 조건
- 도메인 무결성 제약조건은 속성과 관련된 무결성
- 데이터 형식 (type)
- null, not null
- 기본값 (default)
- 체크 (check)
- 프로그래밍에서 변수형 선언과 비슷함
(2) 개체 무결성 제약조건 | 기본키 제약
- 기본키를 지정하고 그에 따른 무결성 원칙과 null을 가질 수 없음
- 릴레이션 내에서 오직 1개의 값만 가질 수 있음
(3) 참조 무결성 제약조건 | 외래키 제약
: 릴레이션 간 참조 관계를 선언하는 제약조건
- 참조되는 키들은 도메인이 동일해야 함
- 자식 릴레이션은 부모 릴레이션의 제약을 받음
- RESTRICTED: 자식에서 참조하고 있을 경우, 부모의 삭제 불가
- CASCADE: 자식 릴레이션의 관련 튜플을 같이 삭제
- DEFAULT: 자식 릴레이션의 관련 튜플을 미리 설정해 둔 값으로 변경
- NULL: 자식 릴레이션의 관련 튜플을 NULL 값으로 설정 (NULL 허용 경우)
복습하면서 용어에 대한 개념을 정확히 해야 이후에 나오는 개념과 적용을 이해할 수 있다. 용어를 주의깊게 보고 익히도록 하자.
'CS (Computer Science)' 카테고리의 다른 글
[개발 공부 101일차] DB 개론 | 트랜잭션과 동시성 (0) | 2024.09.23 |
---|---|
[개발 공부 100일차] DB 개론 | 관계대수 (2) | 2024.09.22 |
[개발 공부 97일차] DB 개론 | 데이터베이스의 유형 및 특징 (5) | 2024.09.08 |
[개발 공부 96일차] DB 개론 | 데이터베이스 및 관리 시스템 (6) | 2024.09.06 |
[개발 공부 95일차] 파이썬 | 파일 입출력, 예외 처리 (2) | 2024.09.05 |