리코딩 : 데이터베이스(Database)

데이터베이스(Database) - 관계 데이터 모델 - 공부 내용 정리

BreezeBm 2021. 11. 26. 09:57

Photo by Tobias Fischer on Unsplash

1. 관계 데이터 모델

관계 데이터 모델에서는 하나의 릴레이션(relation)에 개체에 관한 데이터를 넣어서 데이터베이스에 저장한다. 여기서 관계 데이터 모델은 2차원 구조의 테이블 형태를 통해 자료를 표현하는 것이다. 릴레이션은 데이터들을 2차원 테이블의 구조로 저장한 것을 뜻한다. 다음 표는 식당의 메뉴 개체를 표현한 메뉴 릴레이션이다.

식당 메뉴 개체를 표현한 메뉴 릴레이션

릴레이션 용어
: 속성 / 튜플 / 도메인 / 널 값 / 차수 / 카디널리티 

1) 속성

사진속 표에 열을 속성(attribute)이라고 부른다. 위의 예시로 들자면 속성은 메뉴와 관련해서 중요한 데이터를 의미한다. 표에는 카테고리, 메뉴, 칼로리, 가격, 평점이 있고 각 속성은 서로 다른 이름으로 구별한다. 

2) 튜플

사진속 표에 행을 튜플(tuple)이라고 부른다. 각각의 행에는 메뉴에 대한 실제 값을 모아놓았다. 즉 메뉴 개체의 인스턴스이다. 위의 사진속 표를 보면 4개의 튜플 또는 4개의 인스턴스가 존재하고 있다.

3) 도메인

속성이 가질 수 있는 모든 값의 집합을 해당 속성의 도메인이라고 한다. 표를 확인하면 카테고리 속성의 값으로 에피타이저, 메인, 사이드 중 하나만 허용이 된다면 이 3가지의 값을 모아 놓은 것이 카테고리의 도메인이다. 하지만 메뉴, 칼로리, 가격은 도메인을 정확하게 정의하기 힘들다. 세상에는 다양한 이름의 메뉴와 각각의 칼로리는 다르고 가격도 천차만별이다. 도메인은 가능한 값을 다 정의하기가 어렵다. 그래서 속성의 특성을 고려한 데이터 타입으로 정의한다.

 

메뉴는 문자열 20개까지만, 칼로리는 문자열 10개까지만, 가격과 평점은 정수 타입으로만 입력할 수 있게 정의하는 것처럼 데이터 타입을 정하는 것으로 생각하면 된다.

4) 널 값

만약 신메뉴가 나왔다고 생각해보자 이름은 나왔지만 가격이 나오지 않았을 수도 있고 또는 칼로리 계산이 되지 않았을 수도 있다. 즉 튜플의 속성 값을 모르거나 아직 적합한 값이 없을 때에 null을 사용한다. null은 아직 속성에 해당되는 값이 없음을 뜻한다.

5) 차수

릴레이션 하나의 속성 천제 개수를 차수(degree)라고 한다. 모든 릴레이션은 적어도 1개 이상의 차수를 가지고 있어야 한다. 

6) 카디널리티(Cardinality: 집합의 크기)

릴레이션 하나의 튜플의 전체 갯수를 카티널리티(cardinality)라고 한다. 사진속 표에는 총 4개의 튜플이 있기 때문에 집합의 크기는 4이다. 집합의 크기는 튜플이 증가 감소됨에 따라서 변한다.


2. 릴레이션(Relation)

맨 위에서 간략하게 설명했듯이 릴레이션은 데이터들을 2차원 테이블의 구조로 저장한 것을 말한다. 그리고 각 릴레이션에는 용어들이 존재했고 위에서 살펴보았다. 이 릴레이션에는 특성들이 있고 이 것을 만족해야 릴레이션이 된다.

1. 속성의 원자성
2. 속성의 무순서
3. 튜플의 유일성
4. 튜플의 무순서

1) 속성의 원자성

속성은 여러개의 값을 가질 수 없다. 즉 속성 값은 더는 분해할 수 없는 하나의 값만을 가질 수 있다. 누군가에게는 샐러드가 메인음식일 수 있고, 스테이크가 에피타이저일 수 있지만 관계 데이터 모델은 단순한 구조로 정의하는 특징이 있다.

2) 속성의 무순서

현재 표를 보면 음식의 카테고리, 이름, 칼로리, 가격, 평점 순으로 나열되어 있다. 만약에 이 속성의 순서를 뒤죽박죽으로 바꾸어서 새로운 릴레이션을 만들었다 해도 결국 같은 릴레이션이다. 그렇기 때문에 속성의 순서가 뒤바뀌어도 상관이 없고 속성이 하나라도 달라야 다른 릴레이션이 된다.

3) 튜플의 유일성

메뉴 릴레이션을 보면 결코 같은 튜플이 없다. 하나의 릴레이션에는 똑같은 튜플이 있으면 안되고 다른 튜플과는 구분되는 유일한 특성이 있어야 한다. 튜플을 구분하기 위해서 사용 되는 속성 또는 속성의 묶음을 키라고 한다.

4) 튜플의 무순서

표에서는 실제 식당에서 음식을 주는 순서대로 나열이 되어있지만 사실 아무렇게나 튜플 순서가 뒤바뀌어져 있어도 상관이 없다. 튜플의 순서가 바뀐다고 해서 다른 릴레이션이 되지 않는다.


3. 키(Key)

키는 튜플의 유일성에서 설명이 잠깐 나왔다. 키는 관계 데이터 모델에서 중요하다. 그리고 는 튜플을 유일하게 구분하기 위해서 모든 속성을 사용하지 않고 일부 속성을 사용하는 것이 효율적이다. 키의 종류는 5가지가 있다.

키의 종류
1. 기본키 (Primary)
2. 슈퍼키 (Super)
3. 후보키 (Candidate)
4. 대체키 (Alternate)
5. 외래키 (Foreign)

1. 기본키 (Primary)

여러개의 후보키들 중에서 기본적으로 사용하는 대표키다. 후보키가 1개라면 그 키를 기본키로 사용하고 여러개면 릴레이션의 특성을 반영해서 하나를 선택한다.

 

기본키를 선택할 때 고려할 사항이 있다. 1. 널(Null) 값을 가질 수 있는 속성이 포함된 후보키는 부적합2. 값이 자주 변경되는 속성이 포함된 후보키는 부적합3. 자릿수가 적은 정수나, 단순 문자열과 같은 단순한 후보키가 적합

2. 슈퍼키 (Super)

슈퍼키는 유일성의 특성을 만족하는 속성 또는 속성의 묶음이다. 유일성은 슈퍼키가 반드시 가져야하는 기본 특성이다. 유일성이란 하나의 릴레이션에서 키로 지정된 속성 값은 튜플마다 달라야 한다는 의미이다(키 값이 같은 튜플은 없음).

3. 후보키 (Candidate)

후보키는 유일성과 최소성을 만족하는 속성 또는 속성의 묶음이다. 최소성은 꼭 필요한 최소한의 속성들로만 키를 구성하는 특성이다. 

4. 대체키 (Alternate)

대체키는 기본키로 선택되지 못한 후보키들이다. 

5. 외래키 (Foreign)

외래키는 어떤 릴레이션에 있는 속성이나 속성의 묶음이 다른 릴레이션의 기본키가 되는 키다. 다시 말해 다른 릴레이션의 기보본키를 그래도 참조하는 속성이 외래키이다.


4. 무결성 제약 조건

무결성은 데이터에 결함이 없는 상태를 말한다. 데이터가 정확하고 유효하게 유지되는 상태를 말한다. 데이터베이스가 삽입, 삭제, 수정 연산으로 상태가 변하더라도 무결성 제약 조건은 반드시 지켜야한다. 

 

데이터베이스를 내부의 데이터를 보호한다는 관점에서 무결성은 보안과 유사하다. 보안은 접근 권한이 없는 나쁜 사용자로 부터 막는 것을 의미한다면 무결성은 권한이 있는 사용자가 잘못이나 실수로 인해서 데이터가 부정확 해지지 않도록 보호하는 것이다. 

 

무결성 제약 조건에는 개체 무결성 제약조건과 참조 무결성 제약조건이 있다.

1) 개체 무결성 제약조건

기본키를 구성하는 모든 속성은 null값을 가져서는 안된다는 규칙이다.릴레이션에이 있는 튜플들을 유일하게 구별해주고 접근할 수 있도록 기본키를 정의하는데, null값으로 지정되면 구별할수도 찾을 수도 없다. 즉 유일성을 판단할 수가 없기 때문에 기본키의 목적을 잃는다.

 

이 조건을 만족 시키려면 데이터베이스 연산이 일어날 때 null 값이 추가되거나 변경되지 않도록 막으면 된다.

2) 참조 무결성 제약조건

외래키는 참조할 수 없는 값을 가질 수 없다는 규칙이다. 외래키는 다른 릴레이션의 기본키를 참조하는 속성이다. 그래서 각기 다른 릴레이션 간의 관계를 표현하는 역할을 한다. 외래키가 자신이 참조하는 릴레이션의 기본키와 상관이 없는 값을 가지면 서로 연관시킬 수 없고 외래키의 의미가 없어지게 된다.

 

마찬가지로 데이터베이스의 연산이나 변화에서 참조되는 관계를 잃지 않도록 막아야한다.