관계형 데이터 모델
관계형 데이터 모델은 릴레이션(relation)이라는 수학적 개념에 기초하고 있다.
결국 릴레이션(relation)은 동일한 구조로 이뤄진 튜플(tuple)의 집합이고, 2차원 테이블(table) 형태의 단순한 구조다.
(테이블 개념은 내부 저장 구조에 대한 추상적인 표현일 뿐이고, 물리적으로는 복잡한 구조 속에 데이터가 저장된다.)
관계형 데이터베이스는 데이터 묶음을 릴레이션(테이블)의 형태로 저장한다.
주로 테이블이라고 불린다.
💡 릴레이션(테이블)
Student라는 릴레이션을 상상해보자.
학번이름학과나이전화번호MBTI
170 | 원석 | 컴퓨터SW | 27 | 010123123 | INTP |
180 | 영두 | 컴퓨터SW | 24 | 010456456 | ISTP |
181 | 성욱 | 정보보호 | 24 | 010789789 | INFP |
- 속성(attribute) : 데이터를 정의하는 가장 기본적인 단위. 테이블의 열(column)에 해당
e.g. 이름은 Student 릴레이션의 속성 - 튜플(tuple, record) : 테이블이라는 틀로 찍어낸 각각의 개체를 의미하며 테이블의 각 행(row)에 해당
e.g. 180-영두-컴퓨터SW-24-010456456-ISTJ 는 하나의 튜플 - 속성 도메인(attribute domain) : 각 속성이 취할 수 있는 모든 값들의 집합을 정의한 것.
e.g. 나이 속성의 집합은 자연수값만을 가져야 한다. - 차수(degree) : 릴레이션을 구성하는 전체 속성의 개수. 각 튜플이 가지는 속성값의 개수는 해당 릴레이션의 차수와 같다.
e.g. Student 릴레이션의 차수는 5
위의 테이블을 SQL 으로 변환하면 다음와 같다.
INT는 숫자, CHAR은 문자를 의미.
CREATE TABLE Student(
학번 INT,
이름 CHAR,
학과 CHAR,
나이 INT,
전화번호 CHAR,
MBTI CHAR
)
💡 키(Key)
: 특정 튜플을 다른 튜플들과 구별할 수 있는 기준이 되는 속성
키(Key)는 조건에 만족하는 튜플을 찾거나, 순서대로 정렬할 때 쓰인다.
그리고 각각의 튜플을 구별하기 위해 유일성과 최소성이라는 개념이 등장한다.
유일성
: Key로 하나의 튜플을 유일하게 식별할 수 있는 성질
e.g. Student의 나이, MBTI, 이름, 학과는 모두 중복 가능.
반면 학번은 모두 다르기 때문에 Student에서 유일성을 갖는 키이다.
최소성
: Key를 구성하고 있는 속성들이 정말 각 튜플을 구분하는 데 꼭 필요한 속성들로만 구성되어 있는지
e.g. (학번,이름)을 키로 지정하면, 튜플을 구별하는데엔 문제 없다.
그러나 이미 학번만으로 튜플을 구분할 수 있기 때문에 최소성을 만족하지 않는다.
슈퍼키(Super Key)
: 유일성 O 최소성 X
투플을 유일하게 식별할 수 있는 속성들의 집합.
꼭 필요한 속성이 아니어도 포함된다.
e.g. (학번,이름,나이,MBTI)는 유일성을 당연히 만족하지만.. TMI 임.
후보키(Candidate Key)
: 유일성 O 최소성 O
PK(Primary Key)로 쓸 수 있는 속성들.
e.g. 학번, 전화번호, 주민번호
기본키(Primary Key)
: 튜플을 대표하도록 선정된 후보키.
다음 조건을 만족해야 한다:
- NULL값을 가질 수 없음(NOT NULL)
- 튜플들간에 중복된 값을 가질 수 없음(UNIQUE)
대체키(Alternate Key)
: 기본키로 선정되지 못한 후보키.
e.g. 전화번호도 PK가 될 수는 있지만, 학번을 이미 PK로 선택했기 때문에 후보키가 됐음
외래키(Foreign Key)
: 외부 릴레이션의 키를 참조하는 키
외래키의 값은 참조될 다른 릴레이션의 기본키(PK) 중에서 하나를 골라 정한다.
💡 제약 조건(Constraint)
데이터 무결성(integrity) 은 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것을 말한다.
개체 무결성(PK constraint)
: 기본키(PK)로 지정한 모든 속성은 NULL값을 가질 수 없고 릴레이션 안에서 중복되지 않는 유일한 값을 가지도록 하는 제약 조건
개체의 유일성을 위해, 왠만하면 릴레이션마다 PK를 정의해야 한다.
보통은 테이블을 생성할 때 PRIMARY KEY(기본키)를 선언함으로써 적용된다.
e.g. 학번 없는 학생, 중복된 학번의 학생은 없다.
CREATE TABLE Student(
학번 INT PRIMARY KEY ,
이름 CHAR,
학과 CHAR,
나이 INT,
전화번호 CHAR,
MBTI CHAR
)
참조 무결성(FK constraint)
: 외래키(FK)로 지정한 속성은 참조하는 릴레이션의 기본키(PK) 값과 일치하거나 아예 NULL값을 가지도록 하는 제약 조건
어떤 개체의 외래키가 NULL 값을 갖는다는건 관련된 개체가 없음을 의미한다.
반면에 어떤 값을 갖는다면, 그 값은 반드시 관련된 개체의 기본키값과 일치해야 한다.
만약 관계된 개체를 삭제하려면, 해당 개체를 참조중인 개체를 먼저 삭제하거나 관계를 끊어야 한다.
전공을 나타낼 Major 테이블을 상상해보자.
CODE전공명
CS | 컴퓨터SW |
IS | 정보보호 |
MS | 미디어SW |
IC | 정보통신 |
CREATE TABLE Major (
CODE INT PRIMARY KEY,
전공명 CHAR
)
Major과 Student를 관계 맺고 싶다면, 아래와 같이 FK를 지정할 수 있다.
이제 Major과 Student는 1:N (일대다) 관계이다.
CREATE TABLE Student (
전공_코드 INT, # 이제 학과명 대신 전공_코드(FK)로 관계가 맺어짐
FOREIGN KEY (`전공_코드`) REFERENCES `Major`(`CODE`)
#...
)
속성 도메인(domain constraint)
: 튜플의 모든 속성 값이 각 속성 도메인에 속한 값만을 취하도록 하는 제약 조건.
SQL에서 테이블 생성시 각 열의 타입을 명시하거나NULL 혹은 NOT NULL, DEFAULT(디폴트 값), CHECK(값 범위 체크 조건) 등의 키워드 설정을 써서 제약을 명시한다.
CREATE TABLE Student(
학번 INT UNSIGNED PRIMARY KEY ,
이름 CHAR NOT NULL ,
전공_코드 INT NOT NULL ,
나이 INT UNSIGNED,
전화번호 CHAR(20),
MBTI CHAR(4)
)
유일성(uniqueness constraint)
: 키 속성 값이 서로 중복되지 않고 유일하도록 하는 제약 조건.
SQL에서 테이블 생성시에 UNIQUE(유일 조건) 키워드 설정을 써서 명시한다.
CREATE TABLE Student(
#...
전화번호 CHAR(20) UNIQUE,
MBTI CHAR(4)
)
참조:
'CS > DB' 카테고리의 다른 글
[DB 기초] 조인(JOIN) (0) | 2023.09.12 |
---|---|
[DB 기초] 정규화(normalization) (0) | 2023.09.10 |
[DB 기초] 트랜잭션 (0) | 2023.03.12 |
[DB 기초] DB 인덱스(index) (0) | 2023.03.03 |
[DB 기초] 데이터베이스와 RDBMS, SQL (1) | 2023.02.08 |