릴레이션의 개념
릴레이션: 행과 열로 구성된 테이블
모든 데이터들은 튜플 형태로 구성됨 => 단위: 튜플
각 집합의 원소들이 관계를 맺어 하나의 튜플을 맺음
관계(relationship)
1. 릴레이션 내에서 생성되는 관계: 릴레이션 내 데이터들의 관계
2. 릴레이션 간에 생성되는 관계: 릴레이션 간의 관계 -> 외래키를 이용
릴레이션 스키마(내포) : 릴레이션이 어떻게 구성되는지 어떤 정보를 담고 있는지에 대한 기본적인 구조 정의
- 속성( attribute ): 릴레이션의 열
- 도메인(domain): 속성이 가질 수 있는 값의 집합
- 차수(degree): 속성의 개수
릴래이션 인스턴스(외연) : 릴레이션 스키마에 실제로 저장되는 데이터의 집합
- 튜플(tuple): 릴레이션의 행
- 카디널리티(cardinality): 튜플의 수
튜플이 가지는 속성의 개수는 릴레이션 스키마와 차수가 동일하고 릴레이션 내의 모든 튜플들은 서로 중복되지 않아야 함
릴레이션의 특징
- 속성은 단일 값을 가짐
- 속성은 서로 다른 이름을 가짐
- 한 속성의 값은 모두 같은 도메인 값을 가짐 => 데이터 타입을 따른다는 것
- 속성의 순서는 상관없음 => 독립적인 set이라서 순서 상관 X
- 릴레이션 내의 중복된 튜플은 허용하지 않음 => primary key(객체 무결성 제약 조건) --- 동일한 튜플 중복은 객체 무결성 위반
- 튜플의 순서는 상관없음 => 독립적인 매핑 구조라 순서 상관 X, 입력한데로 유지되지 않고 삭제, 수정, 삽입에 따라 순서 바뀔 수 있음
관계 데이터 모델
관계 데이터 모델이란?
데이터를 2차원 테이블 형태인 릴레이션으로 표현함
구성요소: 릴레이션, 릴레이션에 대한 제약조건(기본키, 대체키, 왜래키, check 등), 관계연산을 위한 관계대수(CRUD)
키(속성)
- 특정 튜플을 식별할 때 사용하는 속성 혹은 속성의 집합
- 키가 되는 속성은 반드시 값이 달라서 튜플들을 서로 구별할 수 있어야 함
- 릴레이션간의 관계를 맺는데도 사용됨
더보기
특정 튜플을 식별(Primary key)
키 릴레이션간의 관계 맺는데 사용(Foreign key)
슈퍼키
- 튜플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합(=도메인)
- 키중에서 가장 허용범위가 넓음
후보키
- 튜플을 유일하게 식별할 수 있는 속성의 최소 집합
- 효율적인 측면에서 굉장히 중요
- 튜플을 유일하게 식별할 수 없어 후보키가 되지 못하는 여러개의 속성을 합하여 후보키 만들 수 있음
- 2개 이상의 속성으로 이루어진 키: 복합키(Composite key)
ex)
- 고객번호: 한 명의 고객이 여러 권의 도서를 구입할 수 있어 후보키가 될 수 없음
- 도서번호: 도서번호가 동일한 책이 여러번 주문 기록이 있다면 튜플을 유일하게 식별할 수 없어 후보키가 될 수 없음
(고객번호, 도서번호): 후보키가 될 수 없는 두개의 속성을 합하여 후보키를 만듬
★ 하지만 한명의 고객이 동일한 책을 여러권 구매할 경우 여러개의 속성을 합하여 만들더라도 후보키가 되지 못하는 문제 발생
해결방법: 대리키
기본키
여러 후보키 중 하나를 선정하여 대표로 삼는 키
기본키 선정 시 고려사항
- 릴레이션 내 튜플을 식별할 수 있는 고유한 값 가져야함
- NOT NULL ---> NULL값 허용 X
- 키 값의 변동이 일어나지 않아야 함
- 최대한 적은 수의 속성을 가진 것이어야 함
- 향후 키를 사용하는데 문제 발생 소지 없어야 함
대리키
- 기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때 가상의 속성을 만들어 기본키로 만듬 => 임의로 생성된 키
- 성능향상을 위해 운영되는 키
ex)
후보키의 예제에서 언급한 문제를 해결하는 방법이 대리키임
(고객번호, 도서번호)라는 복합키를 사용하여 튜플을 식별하고자 할 때 만약 한명의 고객이 동일한 책을 여러번 주문 한다면 튜플 식별 불가능
또한 매번 기본키로 (고객번호, 도서번호)를 사용한다면 불편함
따라서 주문번호라는 임의로 생성된 대리키를 사용하여 위의 문제를 해결!
주문번호라는 속성을 사용하면 한명의 고객이 같은 책을 여러권 주문 가능
대체키
- 후보키 중 기본키로 선정되지 않은 나머지 키
- 언제든지 기본키로 대체될 수 있는 가능성을 갖고 있음
외래키
다른 릴레이션의 기본키를 참조하는 속성
외래키 특징
- 관계 데이터 모델의 릴레이션 간의 관계를 표현함
- 다른 릴레이션의 기본키를 참조하는 속성임
- 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 함
- 참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경됨
- 기본키와 달리 NULL 값과 중복 값 허용
- 자기 자신의 기본키를 참조하는 외래키도 가능 ---> 셀프조인(자신의 속성과 참조하려는 속성을 조인해야 함)
- 외래키가 기본키의 일부가 될 수 있음
무결성 제약조건
데이터 무결성이란?
데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것
- 키(속성)를 이용해 제약조건을 검
- 데이터베이스는 데이터를 저장시 일관성을 유지하고 중복을 최소화하여 데이터의 신뢰성을 유지함
- 데이터의 삽입, 삭제, 수정시 여러가지 제약조건이 따름 ---> 신뢰성을 유지하기 위해
- 도메인 무결성 제약조건: 릴레이션 내의 튜플들이 각 속성의 도메인에 지정된 값만 가져야 한다는 조건
SQL 문에서 데이터 형식(type), 널(null/not null), 기본 값(default), 체크(check)등을 사용하여 지정할 수 있음
- 개체 무결성 제약조건: 기본키는 null값을 가지면 안되고 중복값을 가지면 안된다는 조건
모든 릴레이션의 튜플들은 기본키로 식별될 수 있어야 함
- 참조 무결성 제약조건: 릴레이션 간의 참조 관계를 선언하는 제약조건
참조되는 릴레이션 -> 부모 릴레이션 / 참조하는 릴레이션 -> 자식 릴레이션
부모가 변경된 이후에 자식이 변경될 수 있는 것(부모에 의해 자식이 영향 받는 것) => 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받음
외래키로 제약조건 걸 수 있음
구분 | 도메인 | 키 | |
도메인 무결성 제약조건 | 개체 무결성 제약조건 | 참조 무결성 제약조건 | |
제약 대상 | 속성 | 튜플 | 속성과 튜플 |
같은 용어 | 도메인 제약 | 기본키 제약 | 외래키 제약 |
해당되는 키 | ㅡ | 기본키 | 외래키 |
NULL 값 | 허용 | 불가 | 허용 |
릴레이션 내 제약조건의 개수 | 속성의 개수와 동일 | 1개 | 0~여러개 |
기타 | - 투플 삽입/수정 시 제약사항 우선 확인 | - 튜플 삽입/수정 시 제약사항 우선 확인 | - 튜플 삽입/수정 시 제약사항 우선 확인 - 부모 릴레이션의 튜플 수정/삭제 시 제약사항 우선 확인 |
'DB' 카테고리의 다른 글
무결성(Constraint) (0) | 2024.03.21 |
---|---|
Hash (0) | 2024.03.18 |
Transaction이란 (0) | 2024.03.14 |
이상현상과 정규화 트랜젝션 개념 (0) | 2024.01.29 |
데이터베이스 개념 (0) | 2024.01.15 |