릴레이션이란 무엇인가?
관계데이터 모델에서 데이터를 구분하여 저장하는 기본 단위이다.
엑셀에서 정보를 표로 만들어 관리하듯, 데이터도 정보를 표로 만들어 관리하게 된다.
이 표를 데이터 베이스에서는 테이블, 릴레이션이라고 한다.
이는 관계형 데이터베이스에서 정보를 구분하여 저장하는 기본단위가 된다.
하나의 행을 선택했을때 집합 또는 열들에서 선택된 원소들이 서로 관계를 맺고 있다고 볼 수 있다.
릴레이션을 생성한다는 것은 파일생성과 같은 의미를 지니지는 않는다.
사용자가 릴레이션을 생성하면 DBMS는 특별한 형식으로 데이터를 저장하고, 릴레이션의 데이터를 한 화일에 저장하거나, 한 릴레이션의 데이터를 여러 화일에 흩어 저장하기도 한다.
관계란 무엇인가?
relationship은 두가지가 있다.
릴레이션(테이블)내에서 생성되는 관계 → 하나의 행을 선택했을때
릴레이션 간에 생성되는 관계 → 한 릴레이션에서 다른 릴레이션으로 식별 가능 값을 이용하여 연결
릴레이션의 특징
튜플의 유일성 : 하나의 릴레이션에 동일한 튜플이 존재할 수 없다.(접근을 위함)
속성의 원자성: 더는 분해할 수 없는 하나의 값. 원자값만 가질 수 있다. 즉 하나의 속성은 다중값을 가질 수 없다.
튜플의 무순서: 튜플 순서는 무의미하다. DB는 인덱스가 아닌 내용으로 검색되므로 튜플의 순서는 중요하지 않다.
속성의 무순서: 속성의 순서가 다르더라도 속성들이 같다면 두 릴레이션은 같다
릴레이션의 구성요소
릴레이션 스키마
릴레이션이 어떻게 구성되었으며 어떤 정보를 담고 있는지에 대한 기본적 구조를 정의 해준다.
보통 스키마는 릴레이션의 첫행인 헤더에 나타난다.
컴퓨터가 스키마를 분석하기 위해 필요한 스키마 요소
속성:
하나의 릴레이션은 현실세계의 어떤 객체를 표현하고 저장하는데 사용된다. 이때 겍체는 사물이될수도, 추상적 개념이 될 수도 있다. 릴레이션 첫행 헤더에 있으며, 객체안의 어떤 항목에 해당한다.
속성은 고유한 이름을 가지며, 동일 릴레이션 이라면 같은 이름의 속성이 존재할 수 없다.
애트리뷰트의 순서는 중요하지 않다.
column이라고도 불리며, 파일시스템에서는 필드에 해당한다.
차수:
한 릴레이션 안에 들어있는 애트리뷰트의 수를 차수라고 한다. 유효한 릴레이션의 최소차수는 1이다.
튜플:
헤더를 제외한 릴레이션의 각 행을 쇼 튜플이라고 하는데,
릴레이션이 나타내는 객체의 특정 인스턴스에 관한 값의 모임이다.
데이터베이스에서 총 튜플의 수는 유동적이며
애트리뷰트와 마찬가지로 튜플의 순서는 DB에서 의미 없다.
row에 해당하며 파일시스템에서는 레코드라고도 불린다.
카디날리티:
릴레이션 튜플의 개수이다. 차수와는 다르게 유효 릴레이션은 카디날리티 0이 될 수 있다.
아직 인스턴스가 들어오지 않았을뿐, 속성이 구성하고 있는 형식은 유효할 수 있기 때문이다.
카디날리티는 시간이 지남에 따라 계속해 변한다.
도메인
릴레이션에 포함된 각각의 속성들이 가질 수 있는 값이다.
이 개념이 필요한 이유는 저장되는 값들이 본래 의도했던 값들만 저장되도록 관리하기 위해서이다. 예를들어 SEX를 도메인으로 정의하고 ‘남’’녀’를 지정해 성별 속성에서 sex도메인 값만 가질 수 있도록 이외의 값을 입력하는 것을 방지할 수 있다.
릴레이션 스키마 표현
릴레이션 이름(속성1,속성2,속성3) 또는
릴레이션 이름(속성1: 도메인1, 속성2:도메인2,속성3:도메인3) 의형식을 가진다
ex)
User(Email, Password, NickName). 또는 User(Email: String, Password: String, NickName: String)
키란 무엇인가?
키는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할때 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 attribute(속성)이다.
일상생활에서 예를 들자면 학번이라거나 군번 주민번호등이 되겠다
낮은 확률이라도 중복가능성이 있다면 키가 되지 못한다. ex)거주지, 이름
절대로 중복되어서는 안 될 단일 값이라 할 수 있다.
테이블의 각 레코드를 고유하게 식별하게 해주는 역할을 한다.
기본키 특징(primary)
항상 고유한 값을 갖는 속성이다.
널값을 가지고 있지 않다.
예를들어 휴대폰 번호를 생각해보자. 휴대폰이 고유한 번호이기는 하지만, 휴대폰을 보유하지 않는경우 null값이 생길 수 있다.
속성 값이 변경 가능성이 높다면, 기본키로 선정하지 않는 것이 좋다.
작은 정수값이나, 짧은 문자열을 갖는 속성이 기본키가 되는 것이 좋다.( 빠른 데이터 검색을 위함)
가능하면 복합 기본키는 피한다.
각 테이블당 기본키는 하나이다.
기본키가 없다고 규칙에 어긋나지는 않으나 필수적으로 두도록 한다.
기본키가 없다면 반복적이고 일관성없는 데이터들이 쌓일 수 있으며 검색속도(쿼리수행속도)가 느려질 수 있다.
후보키란 무엇인가?(candidate)
테이블에서 기본키가 하나만 될 수 있다고 했다. 하지만 튜플들의 구분을 보장해주는 속성이 딱하나만 있는건 아니다.
예를들어 테이블의 속성으로 학번,사번,군번,주민번호, 핸드폰번호가 있다면, 기본키의 소양을 가지고 있는 속성들이 모두 후보키가 된다. 다만 핸드폰번호가 null보유 가능성으로 기본키로 부적절 했던 것처럼. 후보키로도 부적절하다.
대체키란 무엇일까?(alternate key)
후보키중에 기본키가 정해진다면 그 후보키에서 기본키를 제외한 나머지 키들이 대체키가 된다.
그래서 후보키는 어떻게 사용되는가?
DBMS는 새로운 튜플(레코드)가 릴레이션에 삽입될때, 새로운 튜플의 후보키값들이 기존 튜플의 후보키 값들과 동일하지는 않는지 여부를 비교하여 중복 여부를 확인한다.
복합키란 무엇인가?(composite)
2개이상의 컬럼을 묶어 만든 독립적이라고 인식될 수 있는 후보키이다.
다만 성능상 최대한 적은수의 컬럼을 묶어 만드는 것이 좋다.
만약 테이블을 만들었는데 기본키가 없다면 어떻게하겠는가?
군인이 가진 장구류를 다루는 DB가 있다고 생각해보자
군번
|
장구류
|
이름
|
20110101
|
총
|
김철수
|
20110101
|
배낭
|
김철수
|
20120101
|
총
|
최영구
|
20110606
|
배낭
|
박망치
|
20110606
|
배낭
|
박망치
|
하나의 속성으로 기본키를 만들지 못한다. 하지만 군번과 장구류를 조합한다면?
후보키로 활용할수 있다. 이때의 키를 복합키라 한다.
후보키도 복합키일 수 있고,
대체키도 복합키일 수도 있지만,
기본키가 복합키가 되는 것은 피하는것이 좋다.
슈퍼키
키의 일종으로 역시 다른 키들처럼 튜플을 고유하게 식별하는 기능을 한다.
슈퍼키는 키들의 범위를 모두 아우르는 거대한 개념이다.
여러개의 컬럼을 사용하더라도 튜플을 고유하게 식별할 수 있기만 하면 된다.
여기서 후보키와 슈퍼키의 차이는
최소성이다.
키들의 조건인 유일성(하나의 키값으로 하나의 튜플을 유일하게 식별할 수 있어야 하는 것)은 만족하지 못하나,
최소성(정말 유일한 식별을 위한 최소한의 속성으로 구성되어야 하는 것)을 만족하지 못한다.
외래키(FK)
외래키는 어떤 릴레이션의 기본키를 다른 릴레이션에서 참조하여
관계 데이터 모델의 특징인 릴레이션 간의 관계를 표현하는 것이다.
외래키가 성립하기 위해서는 , 참조하고 참조되는 양쪽 릴레이션의 도메인이 서로 같아야 한다.
참조
'Domain 지식들' 카테고리의 다른 글
dom이란 무엇인가? (0) | 2023.04.03 |
---|---|
SSO란? (0) | 2023.03.15 |
vagrant란 무엇인가? (0) | 2022.12.06 |
locale이란 무엇인가? (0) | 2022.11.19 |
homebrew란 무엇인가? (0) | 2022.11.19 |
댓글