데이터베이스(DB, DataBase): 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음
DBMS(DataBase Management System): 데이터베이스를 제어, 관리하는 통합 시스템
엔티티 vs 엔터티
엔티티는 관용적으로 자주 쓰이지만 틀린 표기로 엔터티가 맞는 표현
약한 엔터티 (Weak Entity)
강한 엔터티 (Strong Entity)
강한 엔터티: 건물
약한 엔터티: 방 (건물이 있어야 방도 존재할 수 있음)
| 항목 | 관계형 DB (예: MySQL) | NoSQL DB (예: MongoDB) |
|---|---|---|
| 단일 데이터 | 레코드 (Row) | 도큐먼트 (Document) |
| 데이터 묶음 | 테이블 (Table) | 컬렉션 (Collection) |
| 전체 저장소 | 데이터베이스 | 데이터베이스 |
id title author_id genre 1 "운영체제란?" 7 "기술"
| 타입 | 크기(바이트) | 범위(부호 있음) |
|---|---|---|
| TINYINT | 1 | -128 ~ 127 |
| SMALLINT | 2 | -32,768 ~ 32,767 |
| MEDIUMINT | 3 | -8,388,608 ~ 8,388,607 |
| INT | 4 | -2^31 ~ 2^31 - 1 |
| BIGINT | 8 | -2^63 ~ 2^63 - 1 |
| 타입 | 설명 |
|---|---|
| DATE | 날짜만 포함 (예: 2024-05-19) |
| DATETIME | 날짜 + 시간 (예: 2024-05-19 12:00:00) |
| TIMESTAMP | UNIX 타임스탬프 (2038년까지만 가능) |
| 타입 | 특징 |
|---|---|
| CHAR(n) | 고정 길이 문자열. 항상 n바이트 저장 |
| VARCHAR(n) | 가변 길이 문자열. 실제 길이 + 1~2바이트 저장 |
| TEXT | 긴 문자열 저장 (게시판 본문 등) |
| BLOB | 이진 데이터 저장 (이미지, 영상 등) |
| 타입 | 설명 |
|---|---|
| ENUM | 단일 선택. 정해진 문자열 중 하나만 가능 |
| SET | 다중 선택. 여러 문자열 선택 가능. 내부적으로 비트 연산 사용 |
CREATE TABLE book (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255),
author_id INT,
publishing_year VARCHAR(255),
genre VARCHAR(255),
created_at DATETIME,
updated_at DATETIME,
PRIMARY KEY (id)
);
관계형 데이터베이스에서는 두 개 이상의 테이블이 서로 연결되어 있어야 실용적인 데이터 처리가 가능함. 이때 각 테이블 간의 관계는 다음 세 가지로 나뉨
-- user table
id | name
---|------
1 | 사용자이름1
-- user_profile table
user_id | bio
--------|----------------
1 | 회원
-- user table
id | name
---|------
1 | 사용자이름1
-- cart_item table
id | user_id | product_name
---|---------|--------------
1 | 1 | 무선마우스
2 | 1 | 키보드
-- student table
id | name
---|------
1 | 사용자이름1
-- lecture table
id | title
---|---------
101 | 운영체제
-- student_lecture table (조인 테이블)
student_id | lecture_id
-----------|------------
1 | 101
{주민등록번호}, {이름, 전화번호}, {이메일}, {이름, 이메일} 등{주민등록번호}, {이메일} ← 둘 다 중복 안 되고 최소 필드만 사용회원 테이블의 user_id (AUTO_INCREMENT 인조키 등)참고: 북스터디 - 면접을 위한 CS 전공지식 노트 (Chapter 4-1)