일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음.
해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS라고 하며, 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회 등을 수행하며 데이터베이스는 실시간 접근, 동시 공유가 가능하다.
사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사를 의미한다.
데이터베이스에서 정보를 구분하여 저장하는 기본 단위
테이블과 컬렉션
MySQL의 구조는 레코드-테이블-데이터베이스
NoSQL의 구조는 도큐먼트-컬렉션-데이터베이스 (MongoDB)
릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보
릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합
필드와 레코드 사진
여러 개의 테이블이 있고 이러한 테이블은 서로의 관계가 정의되어 있다.
1:1 관계
1:N 관계
N:M 관계
테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치
기본키는 줄여 PK 또는 프라이머리키라고 부르며, 유일성과 최소성을 만족하는 키
외래키는 FK라고도 하며, 다른 테이블의 기본키를 그대로 참조하는 값으로 개체와의 관계를 식별하는데 사용한다.
외래키는 중복되어도 괜찮다.
기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키
후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키
각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키
릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정
릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값만으로 구성되어야 한다.
릴레이션의 속성 값 중에서 한 개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있어서는 안된다. 반복 집합이 있다면 제거!
릴레이션이 제1정규형이며 부분 함수의 종속성을 제거한 형태를 말한다.
부분 함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것을 말한다.
제2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태
제3정규형이고, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태
데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말하며 데이터베이스에 접근하는 방법은 쿼리이므로, 즉 여러 개의 쿼리들을 하나로 묶는 단위를 말한다.
트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징
예를 들어 트랜잭션을 커밋했는데, 문제가 발생하여 롤백하는 경우 그 이후에 모두 수행되지 않음을 보장하는 것을 말한다.
'허용된 방식'으로만 데이터를 변경해야 하는 것을 의미한다.
트랜잭션 수행 시 서로 끼어들지 못하는 것을 말한다.
복수의 병렬 트랜잭션은 서로 격리되어 마치 순차적으로 실행되는 것처럼 작동되어야 하고, 데이터베이스는 여러 사용자가 같은 데이터에 접근할 수 있어야한다.
성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미한다.
이는 데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 함을 뜻하며, 데이터베이스는 이를 위해 체크섬, 저널링, 롤백 등 기능을 제공한다.
데이터의 정확성, 일관성, 유효성을 유지하는것을 말하며, 무결성이 유지되어야 데이터베이스에 저장된 데이터 값과 그 값에 해당하는 현실 세계의 실제 값이 일치하는지에 대한 신뢰가 생긴다.
개체,참조,고유,NULL 무결성 테이블 사진
관계형 데이터베이스(RDBMS)는 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스를 가리키며 SQL이라는 언어로 조작한다.
MySQL, PostgreSQL, 오라클, SQL Server, MSSQL 등이 있다.
PostgreSQL
MySQL 다음으로 개발자들이 선호하는 데이터베이스
디스크 조각이 차지하는 영역을 회수할 수 있는 장치인 VACUUM이 특징.
최대 테이블의 크기는 32TB이며 SQL뿐만 아니라 JSON을 이용해서 데이터에 접근할 수 있으며 지정 시간에 복구하는 기능, 로깅, 접근 제어, 중첩된 트랜잭션, 백업 등을 할 수 있다.
NoSQL(Not only SQL)이라는 슬로건에서 생겨난 데이터베이스
SQL을 사용하지 않는 데이터베이스를 말하며, 대표적으로 MongoDB, Redis가 있다.
MongoDB
JSON을 통해 데이터에 접긍할 수 있고, 키-값 데이터 모델에서 확장된 도큐먼트 기반의 데이터베이스이다.
확장성이 뛰어나며 빅데이터를 저장할 때 성능이 좋고, 고가용성과 샤딩, 레플리카셋을 지원한다.
스키마를 정해놓지 않고 데이터를 삽입할 수 있어 다양한 도메인의 데이터베이스를 기반으로 분석하거나 로깅 등을 구현할 때 강점을 보인다.
Redis
인메모리 데이터베이스이자 키-값 데이터 모델 기반의 데이터베이스이다.
기본적인 데이터 타입은 문자열(String)이며 최대 512MB까지 저장가능하다.
이외에도 셋(Set), 해시(Hash) 등을 지원한다.
인덱스는 데이터를 빠르게 찾을 수 있는 하나의 장치
인덱스는 보통 B-트리라는 자료 구조로 이루어져 있다.
이는 루트 노드, 리프 노드, 루트 노드와 리프 노드 사이에 있는 브랜치 노드로 나뉜다.
위에 대한 사진으로 설명
MySQL
하나의 인덱스만 생성한다면 클리스터형 인덱스를 만드는 것이 세컨더리 인덱스보다 성능이 좋다!
세컨더리 인덱스는 보조 인덱스로 여러 개의 필드 값을 기반으로 쿼리를 많이 보낼 때 생성해야 하는 인덱스이다.
MongoDB