데이터베이스
- 일정한 규칙, 규약을 통해 구조화되어 저장되는 데이터의 모음
- 해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS
- 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리언어를 통해
삽입,삭제,수정,조회 등을 수행 가능
- 데이터베이스는 실시간 접근과 동시 공유가 가능
데이터베이스 위에 DBMS가 있고 그 위에 응용 프로그램이 있다.
ex) MySQL이라는 DBMS 위에 응용프로그램에 속하는 Node.js에서 해당 데이터베이스 안에 있는 데이터를 끄집어내 해당 데이터 관련 로직을 구축하는 과정
entity
- 사람, 장소, 물건, 사진, 개념 등 여러 개 속성을 지닌 명사를 의미
ex) 회원이라는 엔터티에 이름,아이디,주소,전화번호라는 속성 존재
약한 entity & 강한 entity
약한 entity
- 혼자서 존재하지 못하고 다른 entity의 존재 여부에 따라 종속적인 존재
강한 entity
ex) 건물 안에 종속하는 방 -> 건물 = 강한 entity , 방 = 약한 entity
릴레이션
- 데이터베이스에서 정보를 구분하여 저장하는 기본 단위
- 엔터티에 관한 데이터를 데이터베이스는 릴레이션 하나에 담아서 관리
- 릴레이션은 관계형 데이터베이스에서는 '테이블', NoSQL 데이터베이스에서는 '컬렉션'이라고 한다
ex) 회원이라는 엔터티가 데이터베이스에서 관리될때 릴레이션으로 변화
테이블 & 컬렉션
테이블
- 대표적인 관계형 데이터베이스 = MySQL
- MySQL 구조: 레코드-테이블-데이터베이스
컬렉션
- 대표적인 NoSQL 데이터베이스 = MongoDB
- MongoDB 구조: 도큐먼트-컬랙션-데이터베이스
참고하면 너무 좋은 곳: https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-sql-vs-nosql/
속성
- 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보
- 서비스의 요구사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔터티의 속성이 된다
도메인
- 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합
ex) 회원이라는 릴레이션에 이름, 아이디, 주소, 전화번호, 성별이라는 속성 존재, 성별은 {남,여}라는 도메인을 가지는 것
필드와 레코드
필드
- column에 해당하는 가장 작은 단위의 데이터를 의미
- 필드는 엔티티의 속성을 표현
레코드
- 테이블의 행단위의 데이터를 레코드라고 한다(레코드 = 튜플)
필드 타입
숫자타입
- TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 등 존재
날짜타입
DATE
- 날짜 부분은 있지만 시간 부분은 없는 값에 사용
- 지원 범위 1000-01-01~9999-12-31
- 3바이트 용량 차지
DATTIME
- 날짜 및 시간 부분을 모두 포함하는 값에 사용
- 지원 범위 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바이트 용량 차지
문자타입
- CHAR, VARCHAR, TEXT, BLOB, ENUM, SET
CHAR
- 수를 몇자까지 입력할지 결정
- 테이블 생성 시 선언한 길이 고정
- 0 ~ 255사이의 값을 가진다
- 레코드를 저장할 때 무조건 선언한 길이 값으로 '고정해서 저장'
- 저장된 CHAR의 경우 검색에 유리
VARCHAR
- 수를 몇자까지 입력할지 결정
- 가변 길이 문자열
- 0 ~ 65,535사이의 값을 가진다
- 입력된 데이터에 따라 용량을 가변시켜 저장
- 검색을 별로 하지 않고 유동적인 길이를 가진 데이터를 저장할 때 좋다
TEXT
- 큰 데이터를 저장할 때 쓰는 타입
- 큰 문자열 저장에 쓰며 주로 계시판의 본문을 저장할때 사용
BLOB
- 큰 데이터를 저장할 때 쓰는 타입
- 이미지, 동영상 등 큰 데이터 저장
-> but, 아마존 이미지 호스팅 서비스인 S3와 같은 경우 파일 경로를 VARCHAR에 저장
ENUM
- 문자열을 열거한 타입
- ENUM('x-small','small','medium','large','x-large')형태
- 하나만 선택하는 단일 선택만 가능
- ENUM 리스트에 없는 잘못된 값 입력시 빈문자열이 대신 삽입
- ENUM 사용시 x-small 등이 - 0,1 등으로 매핑되어 메모리를 적게 사용하는 이점
- 최대 65,535개의 요소를 넣은 수 있다
- 공간적인 이점 존재
-> but, 애플리케이션의 수정에 따라 정의한 목록 수정해야하는 단점
SET
- 문자열을 열거한 타입
- ENUM의 단일 선택과 달리 여러개의 데이터 선택 가능
- 비트 단위의 연산이 가능
- 최대 64개 요소를 집어넣을 수 있다
- 공간적인 이점 존재
-> but, 애플리케이션의 수정에 따라 정의한 목록 수정해야하는 단점
관계
- 데이터베이스에는 여러 개의 테이블이 존재
-> 테이블들은 서로의 관계가 정의되어 있다
1:1 관계
- 두 개의 테이블로 나눠 테이블의 구조를 더 이해하기 쉽게 만들어준다
ex) 한명의 유저에 하나의 이메일
1:N 관계
ex) 한 유저당 여러개의 상품 선택 가능
N:M 관계
- 테이블 두 개를 직접적으로 연결해서 구축하지 않고 1:N, 1:M이라는 관계를 갖는 테이블 두개로 나눠서 설정
키
- 테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치
- 기본키, 외래키, 후보키, 슈퍼키, 대체키 존재
기본키(primary key)
- 유일성과 최소성을 만족하는 키
- 테이블의 데이터 중 고유하게 존재하는 속성 (중복 X)
- 자연키, 인조키 중에 골라서 설정
자연키
- 중복된 값들을 제외하며 중복되지않은 것을 '자연스럽게' 뽑다가 나오는 키
- 자연키는 언젠가 변한다는 속성을 가진다
ex) 테이블에 이름,성별,주민등록번호 속성 존재
-> 이름, 성별은 중복되는 값이 들어올 수 있으므로 '주민등록번호'를 기본키로 설정
인조키
- 인위적으로 생성한 키
- 자연키와 대조적으로 변하지 않는다
- 보통 기본키는 인조키로 설정
외래키(foreign key)
- 다른 테이블의 기본키를 그대로 참조하는 값
- 개체와의 관계를 식별하는데 사용
- 중복 가능
후보키(candidate key)
- 기본키가 될 수 있는 후보들
- 유일성과 최소성을 동시에 만족
대체키(alternate key)
- 후보키가 두개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키
슈퍼키(super key)
- 각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키