데이터베이스
일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음
데이터베이스를 제어, 관리하는 통합 시스템을 DBMS라고 하며
데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다.
또한 데이터베이스는 실시간 접근과 동시 공유가 가능하다.
예를 들어 DBMS에는 MySQL이, 응용 프로그램에는 Node.js나 php가 있다.
1. 엔티티
여러 속성을 지닌 명사
예를 들어 회원이라는 엔티티는 이름, 아이디, 주소, 전화번호, ... 등의 무수히 많은 속성을 갖는다.
이때 어떤 속성들을 정의할 것인가는 서비스 요구 사항에 따라 달라진다.
엔티티는 약한 엔티티와 강한 엔티티로 나뉜다.
예를 들어 A가 혼자서는 존재하지 못하고 B의 존재 여부에 따라 종속적이라면 A는 약한 엔티티이고 B는 강한 엔티티이다.
2. 릴레이션
데이터베이스에서 정보를 구분하여 저장하는 기본 단위
데이터베이스에서는 엔티티에 관한 데이터를 릴레이션 하나에 담아서 관리한다.
릴레이션을 관계형 데이터베이스에서는 '테이블', NoSQL 데이터베이스에서는 '컬렉션'이라고 한다.
데이터베이스의 종류는 크게 관계형 데이터베이스와 NoSQL 데이터베이스로 나눌 수 있다. 이 중 대표적인 관계형 데이터베이스인 MySQL과 대표적인 NoSQL 데이터베이스인 MongoDB를 예로 들자면, MySQL의 구조는 레코드-테이블-데이터베이스로 이루어져 있고NoSQL의 구조는 도큐먼트-컬렉션-데이터베이스로 이루어져 있다. 즉, 레코드가 쌓여 테이블이 되고, 테이블이 쌓여 데이터베이스가 되는 것이다.
3. 속성
릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보
앞서 말했듯이 엔티티가 가질 수 있는 여러 속성 중 서비스의 요구 사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔티티의 속성이 된다.
4. 도메인
릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합
예를 들어 성별 속성의 경우 도메인은 {남, 여}가 될 것이다.
5. 필드와 레코드
여러 엔티티의 속성에 대한 데이터들이 모여 필드와 레코드로 구성된 테이블을 만든다.
엔티티의 속성이 테이블의 필드가 되고,
레코드는 테이블에 쌓이는 행 단위의 데이터를 의미한다. 레코드를 튜플이라고도 한다.
또한 필드는 타입을 갖는다.
숫자 타입
숫자 타입으로는 TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT가 있다.
용량 | 최솟값(부호 있음) | 최솟값(부호 없음) | 최댓값(부호 없음) | 최댓값(부호 있음) | |
TINYINT | 1바이트 | -128 | 0 | 127 | 255 |
SMALLINT | 2바이트 | -32768 | 0 | 32767 | 65535 |
MEDIUMINT | 3바이트 | -8388608 | 0 | 8388607 | 16777215 |
INT | 4바이트 | -2147483648 | 0 | 2147483647 | 4294967295 |
BIGINT | 8바이트 | -263 | 0 | 263-1 | 264-1 |
날짜 타입
날짜 타입으로는 DATE, DATETIME, TIMESTAMP가 있다.
날짜 부분 | 시간 부분 | 범위 | 용량 | |
DATE | O | X | 1000-01-01~9999-12-31 | 3바이트 |
DATETIME | O | O | 1000-01-01 00:00:00~9999-12-31 23:59:59 | 8바이트 |
TIMESTAMP | O | O | 1970-01-01 00:00:00~2038-01-19 03:14:07 | 4바이트 |
문자 타입
문자 타입으로는 CHAR, VARCHAR, TEXT, BLOB, ENUM, SET가 있다.
CHAR와 VARCHAR는 CHAR(30)과 같이 최대 몇 자까지 입력할지 미리 정한다.
- CHAR: 고정 길이 문자열
- 레코드를 저장할 때, 테이블을 생성할 때 선언한 길이 값으로 고정해서 저장한다.
- 0~255의 길이를 가질 수 있다.
- VARCHAR: 가변 길이 문자열
- 입력된 데이터에 따라 용량을 가변시켜 저장한다.
- 0~65,535의 길이를 가질 수 있다.
검색이 필요한 데이터는 CHAR가 유리하고, 검색을 자주 하지 않고 유동적인 길이를 가진 데이터는 VARCHAR가 유리하다.
TEXT, BLOB은 큰 데이터를 저장할 때 사용한다.
- TEXT: 큰 문자열 저장에 사용한다.
- 주로 게시판의 본문을 저장할 때 사용한다.
- BLOB: 이미지, 동영상 등 큰 데이터 저장에 사용한다.
- 그러나 보통은 아마존의 이미지 호스틍 서비스인 S3를 이용하는 등 서버에 파일을 올리고 파일에 관한 경로를 VARCHAR로 저장한다.
ENUM, SET은 문자열을 열거해놓은 타입이다.
- ENUM: 리스트에 여러 문자열을 저장해놓고, 이 중 하나의 문자열만 선택할 수 있다.
- ENUM 리스트에 없는 값을 삽입하면 빈 문자열이 삽입된다.
- ENUM에 저장된 값들이 0, 1 등으로 매핑되어 메모리를 적게 사용하는 이점이 있다.
- 최대 65,535개의 요소를 집어넣을 수 있다.
- SET: 리스트에 여러 문자열을 저장해놓고, 이 중 여러 문자열을 선택할 수 있다.
- 비트 단위의 연산을 할 수 있고 최대 64개의 요소를 집어넣을 수 있다.
ENUM과 SET을 쓸 경우 공간적으로 이점을 볼 수 있지만 애플리케이션의 수정에 따라 데이터베이스의 ENUM이나 SET에서 정의한 목록을 수정해야 한다는 단점이 있다.
6. 관계
하나의 데이터베이스에는 여러 개의 테이블이 존재하고 테이블 간에는 관계가 정의되어 있다.
테이블 간의 관계는 관계화살표를 이용해 나타낸다.
1:1 관계
유저마다 유저 이메일은 한 개씩 있을 것이다. 이 경우 1:1 관계가 된다.
1:1 관계는 두 개의 테이블로 나눠 표현한다.
1:N 관계
한 유저는 장바구니에 0개 이상의 상품을 넣을 수 있다. 이 경우 1:N 관계가 된다.
N:M 관계
한 명의 학생은 여러 강의를 들을 수 있고 하나의 강의는 여러 수강생을 가질 수 있다. 이 경우 N:M 관계가 된다.
N:M은 테이블 두 개를 직접 연결하여 표현하지 않고, 1:N, 1:M이라는 관계를 갖는 두 개의 테이블로 나눠 표현한다.
7. 키
테이블 간의 관계를 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 것
키에는 기본키, 외래키, 후보키, 대체키, 슈퍼키가 있다.
슈퍼키는 유일성을 만족하는 키,
후보키는 유일성과 최소성을 만족하는 키,
후보키 중 하나가 기본키가 되고, 나머지 후보키는 대체키가 된다.
- 유일성: 중복되는 값이 없는 것
- 최소성: 필드를 조합하지 않고 최소 필드만 써서 키를 형성할 수 있는 것
기본키
PK(Primary Key), 유일성과 최소성을 만족하는 키
위 테이블에서는 ID 또는 {ID, name}이라는 복합키로 데이터들을 유일하게 구분할 수 있다.
하지만 {ID, name}은 최소성을 만족하지 못 하므로 기본키로는 ID가 적합하다.
기본키는 자연키 또는 인조키 중에 골라 설정한다. 일반적으로는 인조키를 기본키로 사용한다.
- 자연키: 기존에 존재하는 속성들 중에서 고른 기본키
- ex) 주민등록번호
- 자연키는 언젠가는 변한다.
- 인조키: 인위적으로 생성한 기본키
- ex) 인위적으로 부여한 아이디
- 인조키는 변하지 않는다.
- 오라클은 sequence, MySQL은 auto increment 등으로 설정한다.
외래키
FK(Foreign Key), 다른 테이블의 기본키를 그대로 참조하는 키
외래키는 개체와의 관계를 식별하는 데 사용한다.
client 테이블은 product 테이블의 user_id를 외래키로 하여 ID를 기본키로 갖는다.
외래키로 채택되는 속성은 중복될 수 있다.
후보키
기본키가 될 수 있는 후보들로, 유일성과 최소성을 만족하는 키
대체키
후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키
슈퍼키
유일성을 만족하는 키
이 글은 면접을 위한 CS 전공지식 노트 (주홍철 저)를 바탕으로 공부한 내용을 작성한 글입니다.
'Computer Science > Database' 카테고리의 다른 글
조인의 종류 (0) | 2024.07.26 |
---|---|
인덱스 (0) | 2024.07.24 |
데이터베이스의 종류 (0) | 2024.07.24 |
트랜잭션과 무결성 (0) | 2024.07.24 |
ERD와 정규화 과정 (0) | 2024.07.24 |