데이터베이스를 이루고 있는 기본적인 것들에 대해 알아봅니다.
데이터베이스
: 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음DBMS
(DataBase Management System): 데이터베이스를 제어, 관리하는 통합 시스템쿼리 언어
: 특정 DBMS마다 정의된 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있는 언어
-
의미: 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음
-
특징
- 실시간 접근성(Real-Time Accessibility): 사용자의 질의(조회)에 대해 실시간 처리에 의한 응답이 가능해야 한다.
- 지속적인 변화(Continuous Evolution): 데이터의 삽입, 삭제, 갱신으로 항상 최신 데이터를 유지해야 한다.
- 동시 공용(Concurrent Sharing): 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 한다.
- 내용에 의한 참조(Content Reference): 데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 찾는다.
- 의미: 데이터베이스를 정의하고, 만들고, 제어/관리하는 기능을 제공하는 소프트웨어 시스템
- 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다.
- e.g. PostgreSQL, MySQL, ORACLE, SQL Server, …etc
DBMS의 종류에 대한 상세 내용은 4. 데이터베이스의 종류 참고
쿼리(query): DB에 접근해서 원하는 DB를 가져오거나 원하는 형태로 수정하는 요청
쿼리 언어(query language): 쿼리를 만들고 DB에서 정보를 검색하는 데 사용되는 특수 컴퓨터 언어
-
의미: 데이터베이스 + DBMS + 연관된 애플리케이션을 통틀어 일컫는 단어
-
데이터베이스 시스템 동작 과정
- 사용자가 애플리케이션을 통해 쿼리를 보낸다.
- DBMS가 쿼리를 받아서 해당 쿼리가 무엇인지, 어떤 걸 요청하는지 분석한다.
- 분석이 완료되면 해당 요청을 처리하기 위해 요청된 데이터가 어떤 형태로 되어있는지 부가적인 정보를 확인한다.
- 부가적인 정보를 바탕으로 실제 요청받은 데이터를 찾아서 반환한다.
Meta-data: 데이터베이스를 정의하거나 기술하는 데이터. catalog라고도 부르며 DBMS를 통해 저장 및 관리된다. e.g. 데이터 유형, 구조, 제약 조건, 보안, 저장, 인덱스, ...etc
-
의미: 현실 세계의 정보들을 컴퓨터에 표현하기 위해서 단순화, 추상화하여 체계적으로 표현한 개념적 모형
-
데이터 모델 구성 요소
- 개체(entity): 데이터베이스에 표현하려는 것으로, 사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체
- 속성(attribute): 데이터의 가장 작은 논리적 단위로서 파일 구조상의 데이터 항목 또는 데이터 필드
- 관계(relationship): 데이터베이스 안에 있는 여러 테이블(개체) 간의 논리적 관계
-
데이터 모델 종류
- 개념적 데이터 모델: 현실 세계에 대한 인식을 추상적 개념으로 표현한 모델
- 논리적 데이터 모델: 개념적 모델링 과정에서 얻은 개념적 구조를 컴퓨터가 이해하고 처리할 수 있는 구조로 변환한 모델
- 물리적 데이터 모델: 논리적 데이터 모델을 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환한 모델
-
데이터 모델링의 예시
-
데이터 모델에 표시할 요소
- 구조(structure): 논리적으로 표현된 개체 타입들 간의 관계로서 데이터 구조 및 정적 성질을 표현
- 연산(Operation): 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세로서 데이터베이스를 조작하는 기본 도구
- 제약 조건(Constraint): 데이터베이스에 저장될 수 있는 실제 데이터의 논리적인 제약 조건
-
의미: 데이터베이스에 표현하려는 것으로, 사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체
-
약한 엔티티와 강한 엔티티로 나뉜다.
- 약한 엔티티: 다른 엔티티에 종속적인 엔티티
- 강한 엔티티: 다른 엔티티에 의존하지 않고 독립적으로 존재할 수 있는 엔티티
-
의미: 데이터의 가장 작은 논리적 단위로서 파일 구조상의 데이터 항목 또는 데이터 필드에 해당한다.
- ex) 자동차를 예시로 든다면 차 번호, 색, 차종 등이 있다.
-
속성 설정 시 고려사항
- 엔티티에 꼭 필요한 속성만을 구성하도록 한다.
- 하나의 속성은 한 개의 값을 가져야 한다. (= 다중값 속성을 지양해야 한다.)
- 속성은 단 하나의 독립적인 의미만을 가져야 한다.
- 동일한 의미를 가지는 여러 개의 속성이 존재하지 않도록 한다.
-
의미: 데이터베이스 안에 있는 여러 테이블(개체) 간의 논리적 관계
-
관계 화살표
-
관계도
1:1 관계 N:1 관계 N:M 관계 하나의 레코드가 다른 테이블의 레코드 한 개와 연결된 경우 하나의 레코드가 서로 다른 여러 개의 레코드와 연결된 경우 여러 개의 레코드가 다른 테이블의 여러 개의 레코드와 관계가 있는 경우 -
N:M 관계의 테이블을 구축할 땐 테이블 두 개를 직접적으로 연결해서 구축하지 않고, 1:N과 1:M관계를 갖는 테이블로 각각 나눠 구축한다.
-
의미: 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합
-
개체, 속성, 관계 및 제약 조건 등에 관해 전반적으로 정의한다.
-
사용자의 관점에 따라 외부, 개념, 내부 스키마로 나뉜다.
-
의미: 데이터베이스에서 정보를 구분하여 저장하는 기본 단위
-
특징
- 데이터베이스는 엔티티에 관한 데이터를 릴레이션 단위로 저장한다.
- 관계형 데이터베이스에서는 테이블, NoSQL 데이터베이스에서는 컬렉션이라고 한다.
-
테이블과 컬렉션
- 테이블
- 관계형 데이터베이스의 릴레이션
- MySQL의 구조:
레코드
-테이블
-데이터베이스
- 컬렉션
- NoSQL 데이터베이스의 릴레이션
- MongoDB의 구조:
도큐먼트
-컬렉션
-데이터베이스
- 테이블
- 의미: 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값들의 집합
- ex) 성별이라는 속성이 있다면 도메인은 {
남
,여
}가 있을 수 있다.
- ex) 성별이라는 속성이 있다면 도메인은 {
- 필드(= 속성): 데이터를 저장하는 테이블의 열
- 레코드(= 튜플): 테이블에 쌓이는 행 단위의 데이터
차수(degree): 한 릴레이션에서 속성의 개수
기수(cardinality): 한 릴레이션에서 튜플의 개수
MySQL 기준으로 설명
-
숫자 타입
타입 용량(Byte) 최솟값(부호 있음) 최솟값(부호 없음) 최댓값(부호 있음) 최댓값(부호 없음) TINYINY
1 -128 0 127 255 SMALLINT
2 -32768 0 32767 65535 MEDIUNMINT
3 -8388608 0 8388607 16777215 INT
4 -2^31 0 2^31 - 1 2^32 - 1 BIGINT
8 -2^63 0 2^63 - 1 2^64 - 1 -
날짜 타입
타입 특징 지원 범위 용량 DATE
날짜 부분은 있지만 시간 부분은 없는 값에 사용 1000-01-01
~9999-12-31
3 byte DATETIME
날짜 및 시간 부분 모두 포함하는 값에 사용 1000-01-01
00:00:00
~9999-21-31
23:59:59
8 byte TIMESTAMP
날짜 및 시간 부분 모두 포함하는 값에 사용 1970-01-01
00:00:01
~2038-01-19
03:14:07
4 byte -
문자 타입
-
CHAR
과VARCHAR
CHAR
과VARCHAR
모두 숫자를 입력하여 몇 자 까지 입력할지 정한다. ex)CHAR(30)
,VARCHAR(1000)
CHAR
은 고정 길이 문자열,VARCHAR
은 가변 길이 문자열이다.CHAR
은 테이블을 생성할 때 선언할 길이로 고정되며 길이는 0에서 255 사이 값을 가진다.VARCHAR
의 길이는 0에서 65,535 사이 값으로 지정할 수 있으며 입력된 데이터에 따라 용량을 가변시켜 저장한다.CHAR
은 부동의 길이를 가진 데이터인 경우,VARCHAR
은 유동적인 길이를 가진 데이터인 경우에 효율적이다.
-
TEXT
와BLOB
TEXT
와BLOB
모두 큰 데이터를 저장할 때 쓰는 타입이다.TEXT
는 큰 문자열 저장에 쓰인다. ex) 게시판 게시글의 본문 저장BLOB
은 이미지, 동영상 등 큰 데이터 저장에 쓰인다.
-
ENUM
과SET
ENUM
과SET
모두 문자열을 열거한 타입이다.ENUM
은 ENUM('x-small', 'small', 'medium', 'large', 'x-large') 형태로 쓰인다.ENUM
은 단일 선택만 가능하며 ENUM 리스트에 없는 값을 삽입하면 빈 문자열이 삽입된다.ENUM
은 매핑되어 저장되기 때문에 메모리를 적게 사용하는 이점을 얻고 최대 65,535개의 요소들을 넣을 수 있다.SET
은 여러 개의 데이터를 선택할 수 있다.SET
은 비트 단위의 연산을 할 수 있으며 최대 64개의 요소를 집어넣을 수 있다.
-
-
의미: 테이블 간의 관계를 명확하게 하고, 데이터를 식별하고 관리하기 위한 속성
-
특징
- 슈퍼키는 유일성이 있다.
- 후보키는 유일성에 최소성까지 갖춘 키이다.
- 대체키는 후보키 중 기본키가 되지 못한 키들이다.
유일성
: 하나의 키 값으로 튜플을 유일하게 식별할 수 있는 성질
최소성
: 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질
-
기본키(Primary Key)
- 유일성과 최소성을 만족하는 키이다.
- 테이블의 데이터 중 고유하게 존재하는 속성이다.
- 기본키에 해당하는 데이터는 중복되는 값이 있어서는 안된다.
- 기본키는 자연키 또는 인조키 중 골라 설정한다.
자연키
: 중복된 값들을 제외하며 중복되지 않는 것을 자엽스레 뽑다가 나오는 키로 연젠가는 변한 수 있는 속성을 가진다.인조키
: 인위적으로 생성한 키를 의미하며 자연키와는 대조적으로 변하지 않는다. -
외래키(Foreign Key): 다른 테이블의 기본키를 그대로 참조하는 값으로 개체와의 관계를 식별하는 데 사용한다.
-
후보키(candidate key): 기본키가 될 수 있는 후보들이다.
-
대체키(alternate key): 후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하는 남은 후보키들이다.
-
슈퍼키(super key): 각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키이다.
-
관련 서적
-
이미지 출처
- 테이블과 컬렉션
- 필드와 레코드
- https://www.scaler.com/topics/attributes-in-dbms/
- http://wiki.hash.kr/index.php/필드_(데이터베이스)
- https://ddecode.tistory.com/entry/데이터베이스DB-4관계형-데이터베이스의-키key의-종류
- https://ittrue.tistory.com/201
- https://velog.io/@chocaprio/08-데이터베이스-설계
- https://ahnty0122.tistory.com/108
- https://velog.io/@98kimjh/Database-MySQL-Data-Types
- https://www.hedleyonline.com/ko/blog/스키마/
- https://moonibot.tistory.com/37
- https://velog.io/@hansung/데이터와-데이터베이스-DBMS는어떻게-다른가요
- https://www.researchgate.net/figure/Simplified-database-system-Risunok-1-Uprosennaa-sistema-baz-dannyh-Slika_fig1_326006960
- https://www.tcpschool.com/mysql/mysql_intro_relationalDB#google_vignette
- https://ittrue.tistory.com/201
- http://wiki.hash.kr/index.php/파일:키(key)_구조.PNG
-
블로그 & 아티클
- https://coding-factory.tistory.com/871
- https://www.incodom.kr/DB*-*데이터_타입/MYSQL
- https://ittrue.tistory.com/201
- https://kimvampa.tistory.com/72
- https://inpa.tistory.com/entry/DB-📚-데이터-모델링-1N-관계-📈-ERD-다이어그램
- https://dev-coco.tistory.com/158
- https://ittrue.tistory.com/201
- https://hoyeonkim795.github.io/posts/db-용어/
-
강의 & 유튜브