[cs 스터디] 4-1. 데이터베이스의 기본

YooJeeun·2025년 1월 10일

cs 스터디

목록 보기
41/65

데이터베이스(DB, DataBase): 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음
DBMS(DataBase Management System): 해당 데이터베이스를 제어, 관리하는 통합 시스템

데이터베이스 안에 있는데이터들은 특정 DBMS마다 정의된 쿼리 언어를 통해 삽입, 삭제, 수정, 조회를 수행할 수 있다.
DBMS - MySQL, 응용 프로그램 - Node.js, php

응용 프로그램에서 해당 데이터베이스 안에 있는 데이터를 끄집어내 해당 데이터 관련 로직을 구축할 수 있는 것

엔터티

엔터티(Entity)는 사람, 장소, 물건, 사건, 개념등여러 개의 속성을 지닌 명사를 의미한다.

약한 엔터티와 강한 엔터티

A가 혼자서는 존재하지 못하고 B에 존재 여부에 따라 종속적이다
-> A는 약한 엔터티, B는 강한 엔터티

릴레이션

릴레이션(relation)은 데이터베이스에서 정보를구분하여 저장하는 기본단위이다.
엔터티에 관한 데이터를 데이터베이스는 릴레이션 하나에 담아 관리한다. 릴레이션을 관계형 데이터베이스에서는 '테이블'이라고 하며
NoSQL 데이터베이스에서는 '컬렉션'이라고 한다.

테이블과 컬렉션

데이터베이스의 종류는 크게 관계형 데이터베이스(예-MySQL)와 NoSQL 데이터베이스(예-MongoDB)로 나뉜다.

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

속성

속성(attribute)은 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보이다.
서비스의 요구사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔터티의 속성이 된다.

도메인

도메인(domain)이란 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합을 말한다. (예 - 성별이라는 속성은 {남, 여}만 가질 수 있다.)

필드와 레코드

엔터티, 릴레이션, 속성, 도메인을 기반으로 데이터베이스에서 필드와 레코드로 구성된 테이블을 만들 수 있다.
엔터티: 회원
테이블: member
속성: 이름, 아이디, ...
필드: name, ID, address...

테이블에 쌓이는 행 단위의 데이터 -> 레코드(튜플)

필드 타입

필드는 타입을 갖는다.

대표적으로 숫자, 날짜, 문자 타입이 존재한다.


숫자 타입

  • TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT

날짜 타입

  • DATE, DATETIME, TIMESTAMP
    • 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 00:00:01 ~ 2038-01-19 03:14:07, 4바이트)

문자 타입

  • CHAR, VARCHAR, TEXT, BLOB, ENUM, SET
    • CHAR와 VARCHAR: 수를 입력해서 몇 자까지 입력할지 정한다. 예를 들어 CHAR(30)이라면 최대 30글자까지 입력할 수 있다.
      CHAR - 고정 길이 문자열, 0~255
      VARCHAR - 가변 길이 문자열, 0~65,535
      (예 - 10글자의 이메일을 저장할 경우 10글자에 해당하는 바이트 + 길이기록용 1바이트로 저장)
      유동적이지 않은 길이를 가진 데이터다 -> CHAR 사용
      유동적인 길이를 가진 데이터다 -> VARCHAR 사용

    • TEXT와 BLOB: 큰 데이터를 저장할 때 쓰는 타입
      TEXT - 큰 문자열 저장, 게시판의 본문을 저자할 때 쓰임
      BLOB - 이미지, 동영상 등 큰 데이터 저장, 그러나 보통 아마존의 이미지 호스팅 서비스인 S3를 이용하는 등 서버에 파일을 올리고 파일에 관한 경로를 VARCHAR로 저장한다.

    • ENUM과 SET: 문자열을 열거한 타입
      ENUM - ENUM('x-small', 'small', 'medium', 'large', 'x-large') 형태로 쓰인다. 이 중 하나만 선택하는 단일 선택만 가능
      리스트에 없는 값을 입력하면 빈 문자열이 삽입된다.
      최대 65,535개의 요소들을 넣을 수 있다.
      (이점 - 값이 0, 1 등으로 매피되어 메모리를 적게 사용)
      SET - 여러 개의 데이터 선택 가능, 비트 단위 연산을 할 수 있다.
      최대 64개의 요소를 집어넣을 수 있다.

    ENUM이나 SET을 쓸 경우 공간적으로 이점을 볼 수 있지만 애플리케이션의 수정에 따라 데이터베이스의 ENUM이나 SET에서 정의한 목록을 수정해야한다는 단점이 있다.

관계

데이터베이스에는 여러 개의 테이블이 있고 이들의 관계는 관계 화살표로 나타낼 수 있다.

1:1 관계

  • 유저당 유저 이메일은 한 개씩 존재한다.

1:N 관계

  • 유저는 여러 개의 상품을 장바구니에 담을 수 있다.

N:M 관계

  • 학생도 강의를 많이 들을 수 있고 강의도 여러 명의 학생을 포함할 수 있다.

키: 테이블 자체의 인덱스를 위해 설정된 장치

기본키, 외래키, 후보키, 슈퍼키, 대체키

유일성: 중복되는 값이 없다
최소성: 필드를 조합하지 않고 최소 필드만 써서 키를 형성할 수 있다

기본키

기본키(Primary Key, PK): 유일성과 최소성을 만족한다.
-> 복합키는 기본키가 될 수 없다.
기본키는 자연키 또는 인조키 중에 골라 설정한다.

자연키
: 중복된 값들을 제외하며 중복되지 않은 것을 '자연스레' 뽑다가 나오는 키
자연키는 언젠가는 변하는 속성을 가진다.


인조키
: 오라클의 sequence, MySQL의 auto increment 등 인위적으로 생성한 키
자연키와는 대조적으로 변하지 않는다.

따라서 보통 기본키는 인조키로 설정한다.

외래키

외래키(Foreign Key, FK): 다른 테이블의 기본키를 그대로 참조하는 값
개체와의 관계를 식별하는 데 사용한다.
외래키는 중복이어도 괜찮다.

후보키

후보키(candidate key): 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족한다.

대체키

대체키(alternate key): 후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키를 말한다.

슈퍼키

슈퍼키(super key): 각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키이다.

profile
제니벨로그

0개의 댓글