1. 데이터베이스의 기본
⭐데이터베이스(DB, DataBase)란?
: 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음
- 실시간 접근 가능
- 동시 공유가 가능
- 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어(query language)를 통해 삽입, 삭제, 수정, 조회 등을 수행
⭐DBMS(DataBase Management System)
: 해당 데이터베이스를 제어, 관리하는 통합 시스템
응용 프로그램 ↑ |
Node.js, php |
↓ DBMS ↑ |
MySQL |
↓ 데이터베이스 |
* 데이터베이스와 DBMS 구조
1. 엔티(entity)란?
여러개의 속성을 가진 명사
✅약한 엔터티와 강한 엔터티
약한 엔터티 : 다른 엔터티의 존재 여부에 따라 종속적인 엔터티
강한 엔터티 : 다른 엔터티의 존재 여부에 영향을 받지 않는 엔터티
기본 | Strong 엔터티에는 기본 키가 있습니다. | 약한 엔터티에는 부분 식별자 키가 있습니다. |
의존 | Strong 엔터티는 스키마의 다른 엔터티와 독립적입니다. | 약한 존재는 강한 존재에 의존한다. |
표시됨 | 강력한 엔터티는 단일 직사각형으로 표시됩니다. | 약한 엔터티는 이중 직사각형으로 표시됩니다. |
관계 | 두 개의 강력한 개체 사이의 관계는 단순히 관계라고하는 단일 다이아몬드로 표시됩니다. | 약한 존재와 강한 존재 사이의 관계는 이중의 다이아몬드로 표시된 Identification Relationship으로 표시됩니다. |
참여 | 강력한 회사는 그 관계에 총 참여할 수도 있고 그렇지 않을 수도 있습니다. | 약한 개체는 항상 이중선으로 표시되는 식별 관계에 총 참여합니다. |
참고 : https://ko.gadget-info.com/difference-between-strong
2. 릴레이션(relation)이란?
데이터베이스에서 정보 구분하여 저장하는 기본단위
엔터티에 대한 데이터를 데이터베이스는 릴레이션 하나에 담아서 관리
테이블 : 관계형 데이터베이스에서의 릴레이션
컬렉션 : NoSQL 데이터베이스에의 릴레이션
테이블과 컬렉션
데이터베이스의 종류
- 관계형 데이터베이스 (ex) MySQL : 레코드-테이블-데이터베이스)
- NoSQL 데이터베이스 (ex) MongoDB : 도큐먼트-컬렉션-데이터베이스)
3. 속성(attribute)이란?
릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보
서비스의 요구사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔터티의 속성이 됨
4. 도메인(domain)이란?
릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합
5. 필드와 레코드란?
member 테이블
name | ID | address | phonenumber |
은진 | eunjin | 부산 | 051 |
... | ... | ... | ... |
테이블 구성 요소
엔터티 | 회원 |
테이블 | member |
속성 | 이름, 아이디 |
필드 | name, ID, address |
레코드(튜플) | 테이블에 쌓이는 행(row) 단위의 데이터 |
속성의 종류 : 속성에 맞는 타입
• 책의 아이디: INT
• 책의 제목: VARCHAR(255)
• 책의 저자 아이디: INT
• 책의 출판년도: VARCHAR(255)
• 책의 장르: VARCHAR(255)
• 생성 일시: DATETIME
• 업데이트 일시: DATETIME
필드 타입
1️⃣숫자 타입
숫자 타입으로는 TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 등이 있음
MySQL 숫자 타입
타입 | 용량(바이트) | 최솟값(부호 있음) | 최솟값(부호 없음) | 최댓값(부호 없음) | 최댓값(부호 있음) |
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 |
2️⃣날짜 타입
날짜 타입으로는 DATE, DATETIME, TIMESTAMP 등이 있음
DATE
- 날짜 부분은 있지만 시간 부분은 없는 값에 사용
- 지원되는 범위 : 1000-01-01~9999-12-31
- 3바이트의 용량
DATETIME
- 날짜 및 시간 부분을 모두 포함하는 값에 사용
- 지원되는 범위 : 1000-01-01 00:00:00에서 9999-12-31 23:59:59
- 8바이트의 용량
TIMESTAMP
- 날짜 및 시간 부분을 모두 포함하는 값에 사용
- 지원되는 범위 : 1970-01-01 00:00:01에서 2038-01-19 03:14:07
- 4바이트의 용량
3️⃣문자 타입
문자 타입으로는 CHAR, VARCHAR, TEXT, BLOB, ENUM, SET이 있음
CHAR와 VARCHAR
CHAR 또는 VARCHAR 모두최대 입력값을 정할 수 있음 ( ex, CHAR(30))
CHAR
- 테이블을 생성할 때 선언한 길이로 고정
- 길이는 0에서 255 사이의 값
- 레코드를 저장할 때 무조건 선언한 길이 값으로 ‘고정’해서 저장
- 유동적이지 않은 길이를 가진 데이터의 경우에 효율적
VARCHAR
- 가변 길이 문자열
- 길이는 0에서 65,535 사이의 값으로 지정할 수 있음
- 입력된 데이터에 따라 용량을 가변시켜 저장
- ex, 예를 들어 10글자의 이메일을 저장할 경우 10글자에 해당하는 바이트 + 길이기록용 1바이트로 저장
- 유동적인 길이를 가진 데이터의 경우에 효율적
TEXT와 BLOB
두 개의 타입 모두 큰 데이터를 저장할 때 쓰는 타입
TEXT : 큰 문자열 저장에 쓰며 주로 게시판의 본문을 저장할 때 사용
BLOB : 이미지, 동영상 등 큰 데이터 저장에 사용, 보통은 아마존의 이미지 호스팅 서비스인 S3를 이용하는 등 서버에 파일을 올리고 파일에 관한 경로를 VARCHAR로 저장
ENUM과 SET
ENUM과 SET 모두 문자열을 열거한 타입
장점 : 공간적으로 이점
단점 : 애플리케이션의 수정에 따라 데이터베이스의 ENUM이나 SET에서 정의한 목록을 수정해야 함
ENUM
- ENUM(‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’) 형태로 사용
- 이 중에서 단일 선택만 가능
- ENUM 리스트에 없는 잘못된 값을 삽입하면 빈 문자열이 대신 삽입됨
- x-small 등이 0, 1 등으로 매핑되어 메모리를 적게 사용하는 이점
- 최대 65,535개의 요소들을 넣을 수 있음
SET
여러 개의 데이터를 선택할 수 있음
비트 단위의 연산 가능
최대 64개의 요소를 집어넣을 수 있음
6. 관계는?
여러 개의 테이블이 있고 이러한 테이블은 서로의 관계가 정의됨
1:1 관계
ex ) 유저당 유저 이메일은 한 개
1:1 관계는 테이블을 두 개의 테이블로 나눠 테이블의 구조를 더 이해하기 쉽게 만들어 줌
1:N 관계
ex ) 쇼핑몰을 운영. 한 유저당 여러 개의 상품을 장바구니에 넣을 수 있음
물론 하나도 넣지 않는 0개의 경우도 있으니 0도 포함되는 화살표를 통해 표현해야 합니다.
한 개체가 다른 많은 개체를 포함하는 관계
N:M 관계
ex ) 학생과 강의의 관계, 학생도 강의를 많이 들을 수 있고 강의도 여러 명의 학생을 포함할 수 있음
7. 키란?
테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치
종류 : 기본키, 외래키, 후보키, 슈퍼키, 대체키
기본키(Primary Key)
- == PK, 프라이머리키
- 유일성과 최소성을 만족하는 키
- 기본키는 자연키 또는 인조키 중에 골라 설정
- 중복되는 데이터는 기본키가 될 수 없음
자연키
중복된 값들을 제외하며 중복되지 않는 것을 ‘자연스레’ 뽑다가 나오는 키
자연키는 언젠가는 변하는 속성을 가짐
인조키
인위적으로 생성한 키
자연키와는 대조적으로 변하지 않음
따라서 보통 기본키는 인조키로 설정
오라클은 sequence, MySQL은 auto increment 등으로 설정
- ex )
- 유저 테이블을 만든다고 했을 때 회원 테이블을 생성한다고 가정
- 주민등록번호, 이름, 성별 등의 속성이 있음
- 인위적으로 유저 아이디를 부여. 이를 통해 고유 식별자가 생겨남
외래키(Foreign Key, FK)
다른 테이블의 기본키를 그대로 참조하는 값
개체와의 관계를 식별하는 데 사용
중복 가능
후보키(candidate key)
기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키
대체키(alternate key)
후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키들
슈퍼키(super key)
각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키