🗄️ 데이터베이스의 기본

2025. 12. 2. 00:36·Computer Science/Database

데이터베이스(DB, DataBase)는 일정한 규칙이나 규약을 통해 구조화되어 저장된 데이터의 집합입니다. 이 데이터베이스를 제어하고 관리하는 통합 시스템을 DBMS(DataBase Management System)라고 부릅니다.

데이터베이스 내부의 데이터는 각 DBMS마다 정의된 쿼리 언어(query language)를 사용하여 삽입(Insert), 삭제(Delete), 수정(Update), 조회(Select) 등의 작업을 수행할 수 있습니다. 또한, 실시간으로 접근할 수 있고 여러 사용자가 동시에 공유할 수 있다는 특징이 있습니다.

구조는 보통 데이터베이스 -> DBMS -> 응용 프로그램 순서로 연결되어 데이터를 주고받습니다. 예를 들어, MySQL이라는 DBMS가 있고, 그 위에서 작동하는 Node.js나 PHP 같은 응용 프로그램이 데이터베이스에서 필요한 데이터를 꺼내 로직을 처리하는 방식입니다.


👤 엔터티(entity)

사람, 장소, 물건처럼 여러 개의 속성을 가진 명사를 의미합니다. 쉽게 말해 '회원'이라는 엔터티가 있다면, 이 회원은 이름, 아이디, 주소, 전화번호 같은 속성을 갖게 됩니다. 이때 속성은 서비스의 요구 사항에 따라 결정됩니다. 만약 우리 서비스에서 '주소' 정보가 전혀 필요 없다면, 회원 엔터티에서 주소라는 속성은 제외되는 것이죠.

🔗 약한 엔터티와 강한 엔터티

엔터티는 홀로 존재할 수 있는지에 따라 나뉩니다. 예를 들어 A가 혼자서는 존재할 수 없고, B가 있어야만 존재할 수 있다면 A는 약한 엔터티, B는 강한 엔터티가 됩니다. 즉, A는 B에 종속적인 관계입니다.


📑 릴레이션(relation)

데이터베이스에서 정보를 구분하여 저장하는 기본 단위입니다. 데이터베이스는 엔터티에 관한 데이터를 하나의 릴레이션에 담아 관리합니다. 이 릴레이션을 관계형 데이터베이스(RDBMS)에서는 '테이블(Table)'이라고 부르고, NoSQL 데이터베이스에서는 '컬렉션(Collection)'이라고 부릅니다.

🆚 테이블과 컬렉션

데이터베이스는 크게 관계형 데이터베이스와 NoSQL 데이터베이스로 나뉩니다. 대표적인 관계형 DB인 MySQL과 NoSQL DB인 MongoDB를 비교해보면 구조가 다릅니다.

  • MySQL: 레코드 - 테이블 - 데이터베이스
  • MongoDB: 도큐먼트 - 컬렉션 - 데이터베이스

🏷️ 속성(attribute)

릴레이션에서 관리하는 구체적이고 고유한 이름을 가진 정보입니다. '자동차'라는 엔터티가 있다면 차 번호, 바퀴 수, 색상 같은 것들이 속성이 됩니다. 이 중에서도 서비스 운영에 꼭 필요한 정보만 골라내어 엔터티의 속성으로 정의합니다.


🎯 도메인(domain)

릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 범위를 말합니다. 예를 들어 '성별'이라는 속성이 있다면, 이 속성이 가질 수 있는 값은 {남, 여}라는 집합으로 한정되는데, 이것이 바로 도메인입니다.


📝 필드와 레코드

'회원'이라는 엔터티를 member라는 테이블로 만들 때, 이름, 아이디, 주소 같은 속성을 각각 name, ID, address라는 필드(Field)로 정의합니다. 그리고 이 테이블에 실제로 쌓이는 한 줄 한 줄의 데이터를 레코드(Record) 혹은 튜플(Tuple)이라고 부릅니다.

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)
   );

🔢 필드 타입

  • 숫자 타입
타입 용량(바이트) 최솟값(부호 있음) 최솟값(부호 없음) 최댓값(부호 없음) 최댓값(부호 있음)
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
  • 날짜 타입
    • 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 ~ 2038-01-19, 4바이트)
  • 문자 타입
    • CHAR vs VARCHAR: 둘 다 문자를 저장하지만 방식이 다릅니다.
      • CHAR: 고정 길이입니다. 100글자로 선언해두면 10글자만 저장해도 100바이트 공간을 차지합니다. 길이가 일정한 데이터(예: 주민번호)에 유리합니다.
      • VARCHAR: 가변 길이입니다. 10글자를 저장하면 '데이터 10바이트 + 길이 기록용 1바이트'만 사용합니다. 길이가 들쑥날쑥한 데이터(예: 이메일, 제목)에 효율적입니다.
    • TEXT vs BLOB: 큰 데이터를 저장할 때 씁니다.
      • TEXT: 게시판 본문처럼 큰 문자열을 저장합니다.
      • BLOB: 이미지, 동영상 등 바이너리 데이터를 저장합니다. (하지만 보통 파일은 AWS S3 같은 서버에 올리고, DB에는 파일 경로(URL)만 VARCHAR로 저장하는 것이 일반적입니다.)
    • ENUM vs SET: 문자열을 미리 정의해두고 선택하는 타입입니다.
      • ENUM: 단일 선택만 가능합니다. (예: 사이즈 S, M, L 중 택 1). 내부적으로 숫자로 매핑되어 메모리 효율이 좋지만, 목록을 수정하려면 스키마를 변경해야 하는 단점이 있습니다.
      • SET: ENUM과 비슷하지만 여러 개를 중복 선택할 수 있습니다.

🤝 관계

데이터베이스의 테이블들은 서로 독립적이지 않고 관계를 맺고 있습니다. 이를 관계 화살표로 표현합니다.

  • 1:1 관계: 유저 한 명당 유저 이메일이 하나만 있는 경우입니다. 테이블 구조를 더 명확하게 이해하기 위해 하나의 큰 테이블을 두 개로 나눌 때 주로 사용합니다.
  • 1:N 관계: 유저 한 명이 여러 개의 상품을 장바구니에 담는 경우입니다. 물론 상품을 하나도 담지 않을 수도 있으므로 '0'도 포함하는 화살표로 표현합니다. 하나의 개체가 다른 여러 개체를 포함하는 가장 흔한 관계입니다.
  • N:M 관계: 학생도 여러 강의를 들을 수 있고, 강의도 여러 학생을 받을 수 있는 경우입니다. 이 관계는 테이블 두 개를 직접 연결하기보다, 중간에 매핑 테이블을 두어 1:N, 1:M 관계로 풀어내는 것이 일반적입니다.

🔑 키(Key)

테이블 간의 관계를 명확히 하고, 데이터를 빠르게 찾기 위해(인덱싱) 설정하는 장치입니다. 크게 기본키, 외래키, 후보키, 슈퍼키, 대체키가 있습니다. 키를 이해하려면 유일성(중복된 값이 없음)과 최소성(불필요한 속성 없이 꼭 필요한 속성만으로 키를 구성함)을 알아야 합니다.

🔄 기본키 (Primary Key, PK)

유일성과 최소성을 모두 만족하는 키입니다. 테이블에서 데이터를 구분 짓는 고유한 식별자 역할을 하며, 중복 값이나 NULL 값을 허용하지 않습니다.

  • 자연키(Natural Key): 주민등록번호처럼 데이터 자체에 이미 존재하는 속성 중 고유한 것을 키로 사용하는 경우입니다. 하지만 비즈니스 로직이 바뀌면 변할 위험이 있습니다.
  • 인조키(Artificial Key): 오라클의 Sequence나 MySQL의 Auto Increment처럼 인위적으로 부여한 고유 번호(ID)입니다. 변하지 않기 때문에 보통 기본키로 가장 많이 사용합니다.

🔄 외래키 (Foreign Key, FK)

다른 테이블의 기본키(PK)를 참조하는 값입니다. 테이블 간의 관계를 연결하는 역할을 하며, 데이터의 중복을 허용합니다.

🔄 후보키(Candidate Key)

기본키가 될 자격이 있는(유일성과 최소성을 만족하는) 모든 키들을 말합니다.

🔄 대체키(Alternate Key)

후보키 중에서 기본키로 선택받지 못하고 남은 키들을 말합니다.

🔄 슈퍼키(Super Key)

레코드를 유일하게 식별할 수 있는 유일성은 갖췄지만, 최소성은 갖추지 않아도 되는 키입니다. (예: 아이디+이름을 합쳐서 키로 쓰는 경우)

'Computer Science > Database' 카테고리의 다른 글

🔗조인  (0) 2025.12.03
🔖 인덱스  (0) 2025.12.03
🔍 데이터베이스의 종류  (0) 2025.12.03
🔐 트랜잭션과 무결성  (0) 2025.12.03
📐 ERD와 정규화 과정  (0) 2025.12.02
'Computer Science/Database' 카테고리의 다른 글
  • 🔖 인덱스
  • 🔍 데이터베이스의 종류
  • 🔐 트랜잭션과 무결성
  • 📐 ERD와 정규화 과정
TECHNING
TECHNING
Hi! I'm techning
  • TECHNING
    TECHNING
    TECHNING
    • 분류 전체보기 (54)
      • Computer Science (45)
        • Design Pattern (11)
        • Programming Paradigm (4)
        • Network (15)
        • Operating System (6)
        • Database (6)
        • Data Structure (3)
      • Algorithm (5)
        • Python (3)
        • Java (1)
      • IT Insight (4)
  • hELLO· Designed By정상우.v4.10.4
TECHNING
🗄️ 데이터베이스의 기본
상단으로

티스토리툴바