데이터베이스(DB, DataBase) : 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음
DBMS(DataBase Management System) : 데이터베이스를 제어, 관리하는 통합 시스템
- 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된
쿼리 언어(query language)
를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다.
- 데이터베이스는 실시간 접근과 동시 공유가 가능하다.
그림처럼 데이터베이스 위에 DBMS가 있고, 그 위에 응용 프로그램이 있으며 이러한 구조를 기반으로 데이터를 주고 받는다.
4.1.1 엔티티
엔티티(entity) : 사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사.
ex) 회원이라는 엔티티
가 이름, 아이디, 주소, 전화번호의 속성
을 갖는다.
서비스의 요구 사항에 맞춰 속성이 정해진다.
약한 엔티티와 강한 엔티티
A가 혼자서 존재하지 못하고 B의 존재 여부에 따라 종속적이라면, A는 약한 엔티티고 B는 강한 엔티티이다.
ex) 방은 건물 안에만 존재. 방 : 약한 엔티티, 건물 : 강한 엔티티
4.1.2 릴레이션
- 릴레이션(relation) : 데이터베이스에서 정보를 구분하여 저장하는 기본 단위.
- 데이터베이스는 엔티티에 관한 데이터를 릴레이션 하나에 담아 관리한다.
- 그림처럼, 회원이라는 엔티티가 데이터베이스에서 관리될 때 릴레이션으로 변화된 것을 볼 수 있다.
- 릴레이션 관계형 데이터베이스에서는
테이블
, NoSQL 데이터베이스에서는 컬렉션
이라고 한다.
테이블과 컬렉션
- 데이터베이스의 종류
- 관계형 데이터베이스 ex) MySQL 구조: 레코드-테이블-데이터베이스
- NoSQL 데이터베이스 ex) MongoDB 구조 : 도큐먼트-컬렉션-데이터베이스
- 레코드가 쌓여 테이블이 되고, 테이블이 쌓여 데이터베이스가 된다.
4.1.3 속성
- 속성(attribute) : 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보
- 서비스의 요구 사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔티티의 속성이 된다.
4.1.4 도메인
- 도메인(domain) : 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합.
- 회원이라는 릴레이션에 이름, 아이디, 주소, 번호, 성별이라는 속성이 있고 성별은 {남, 여}라는 도메인을 가진다.
4.1.5 필드와 레코드
- 회원이란
엔티티
는 member라는 테이블
로 속성
인 이름, 아이디 등을 가지고 있으며 name, ID, address 등의 필드
를 가진다.
- 이 테이블에 쌓이는 행(row) 단위의 데이터를
레코드
라고 한다.
레코드
를 튜플
이라고도 한다.
필드
- 필드는
타입
을 갖는다. ex) 이름은 문자열이고 전화번호는 숫자
- 이러한 타입들은 DBMS마다 다르며 이 책에서는 MySQL 기준으로 설명!
숫자 타입
날짜 타입
- DATE : 날짜는 있지만 시간은 없는 값에 사용.
- DATETIME : 날짜 및 시간 부분을 모두 포함,
- TIMESTAMP : 날짜 및 시간 부분을 모두 포함
문자 타입
- CHAR와 VARCHAR
- CHAR : 고정 길이 문자열. 길이는 0에서 255까지. 레코드를 저장할 때 무조건 선언한 길이 앖으로 '고정'해서 저장된다.
- VARCHAR : 가변 길이 문자열. 0에서 65,535 사이 값 지정 가능. 입력된 데이터에 따라 용량을 가변시켜 저장.
- TEXT와 BLOB : 큰 데이터를 저장할 때 쓰는 타입
- TEXT : 큰 문자열 저장에 쓰임. 주로 게시판의 본문을 저장할 때 쓴다
- BLOB : 이미지, 동영상 등 큰 데이터 저장에 쓰임.
- ENUM과 SET : 문자열을 열거한 타입
- ENUM : ENUM(x-small, small, medium, large, x-large) 형태로 쓰이며 단일 선택만 가능. 잘못된 값을 삽입하면 빈 문자열이 대신 삽입. x-small 등이 0, 1 등으로 매핑되어 메모리를 적게 사용하는 이점을 얻음
- SET : ENUM과 비슷하지만, 여러 개의 데이터를 선택할 수 있고 비트 단위의 연산을 할 수 있음
4.1.6 관계
1:1 관계
ex) 유저당 유저 이메일 한 개씩
두 개의 테이블로 나눠 테이블의 구조를 더 이해하기 쉽게 만들어줌
1:N 관계
ex) 한 유저당 여러 개의 상품을 장바구니에 넣음
N:M 관계
ex) 학생과 강의의 관계. 학생이 여러 강의를 들을 수 있고 강의도 여러 학생을 포함
N:M은 테이블 두 개를 직접적으로 연결해 구축하지 않고 1:N, 1:M이라는 관계를 갖는 두 개의 테이블로 나눠 설정한다. 중간에 학생_강의 테이블이 끼어 있다.
4.1.7 키
- 유일성 : 중복되는 값이 없음
- 최소성 : 필드를 조합하지 않고 최소 필드만 써서 키를 형성할 수 있는 것
기본키(Primary Key)
유일성
과 최소성
을 만족
- {ID, name}이라는 복합키를 기본키로 설정할 수 있지만 그렇게 되면 최소성을 만족하지 않음
자연키
또는 인조키
중에 골라서 설정
자연키
- 유저 테이블을 만들 때, 주민등록번호, 이름, 성별 등의 속성이 있다. 이 중 이름, 성별 등은 중복된 값이 들어올 수 있으므로 부적절하고 남는 것은 주민등록번호이다. 이런 식으로 중복된 값들을 제외하며 중복되지 않는 것을 '자연스레' 뽑다가 나오는 키를
자연키
라고 한다.
자연키
는 언젠가 변하는 속성을 가진다.
인조키
- 회원 테이블에 주민번호, 이름, 성별 등의 속성이 있다. 여기에 인위적으로 유저 아이디를 부여한다. 이를 통해 고유 식별자가 생겨난다. 이렇게 인위적으로 생성한 키가
인조키
이다
자연키
와 달리 변하지 않는다.
- 따라서 보통 기본키는 인조키로 설정한다.
외래키(Foreign Key)
- 다른 테이블의 기본키를 그대로 참조하는 값
- 개체와의 관계를 식별하는 데 사용
- 외래키는 중복되어도 괜찮다.
후보키(candidate key)
- 기본키가 될 수 있는 후보들
유일성
과 최소성
을 동시에 만족하는 키
대체키(alternate key)
- 후보키가 두 개 이상일 경우 어느 하나로 기본키로 지정하고 남은 후보키들
슈퍼키(super key)
= 각 레코드를 유일하게 식별할 수 있는 유일성
을 갖춘 키
Reference
주홍철 작가님의 '면접을 위한 CS 전공지식 노트'를 기반으로 작성되었습니다.