[DB] 데이터베이스 기본

뚜비·2023년 6월 27일
0

DB

목록 보기
1/6

데이터베이스(DB)

  • 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음

  • DBMS(DataBase Management System)
    : 데이터베이스를 제어, 관리하는 통합 시스템 EX) Oracle, MySQL, MariaDB
    : Node.js나 php와 같은 응용프로그램에서 데이터베이스 안의 데이터에 접근하려면 MySQL과 같은 DBMS를 거쳐야 함
    Architecture of DBMS

  • 데이터베이스 안에 있는 데이터들은 특정 DBMS 마다 정의된 쿼리 언어(query language)를 통해 삽입(INSERT), 삭제(DELETE), 수정(UPDATE), 조회(SELECT) 등을 수행

  • DB는 실시간 접근과 동시 공유가 가능


Entity

  • 여러 개의 속성을 지닌 명사
    EX) 회원 엔티티 ↔ 이름, 아이디, 주소, 전화번호 속성

  • 서비스의 요구사항에 맞춰 속성이 정해짐
    EX) 회원 엔티티에 주소 속성이 서비스 요구사항에 무관한 속성이면 제거해도 가능

  • 약한 엔티티강한 엔티티로 나뉨
    ↔ A가 B에 종속적(B의 존재 여부에 따라 존재)이라면 A는 약한 엔티티, B는 강한 엔티티
    EX) 방은 건물이 있어야 존재하므로 은 약한 엔티티, 건물은 강한 엔티티


Relation(Table or Collection)

  • 데이터베이스에서 정보를 구분하여 저장하는 기본 단위
  • 행과 열로 구성된 table과 같은 의미이다.
  • 관계형 데이터베이스에서는 'table', NoSQL 데이터베이스에서는 'collection'이라고 한다.
    EX) MySQL(관계형 데이터베이스)의 구조 : record(레코드) - table(테이블) - DB
    MongoDB(NoSQL)의 구조 : document - collection - DB

    🤔잠깐 스키마(schema))란
    변수들의 이름+타입+조건
    데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것
    테이블의 형식 혹른 골격구조를 정의


Attribute(속성)

  • 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보
  • 컬럼(column)에 해당
    EX) 'Car' entity -> 바퀴 수, 색깔, 차종 등 서비스의 요구 사항을 기반으로 관리해야 할 필요가 있는 속성들만 가져옴

Domain

  • 릴레이션에 포함된 각 속성들이 가질 수 있는 값의 집합
    EX) 성별 속성이 가질 수 있는 값 = {남, 여}

Field & Record

  • 데이터베이스에서 table은 filed와 record로 구성되어 있음
  • field는 속성(attribute)에 대응
  • Record는 테이블에 쌓이는 행(row) 단위의 데이터를 의미하며 tuple에 대응함

🤔잠깐 속성과 필드의 차이
What is the difference between a field and an attribute
속성은 엔티티의 특징 그 자체를 의미, 필드는 테이블에서 특정 데이터가 저장되는 위치를 믜미
즉 속성은 관계형 데이터베이스의 관계/테이블에 대해 이야기할 때 필드가 된다.
EX) 회원 엔티티 ↔ member 테이블
이름, 아이디 속성 ↔ name, ID, address 필드


table 생성해보기

책 엔티티를 정의하고 table을 만들어보자
1. 책의 속성 및 필드 이름 정의
이름(title), 저자의 아이디(author_id), 출판년도(publishing_year), 장르(genre), 생성일시(created_at), 업데이트 일시(updated_at)

2. 타입 정의(MySQL 기준, 데이터베이스마다 차이가 존재)

속성타입(type)
책의 아이디INT
책의 제목VARCHAR(255)
책의 저자 아이디INT
책의 출판년도VARCHAR(255)
책의 장르VARCHAR(255)
생성 일시DATETIME
업데이트 일시DATETIME

위의 내용을 MySQL로 구현

CREATE TABLE book{
	id INT NOT NULL AUTO_INCREMENT, // null 허용 안 함, 오름차순 
    title VARCHAR(255),
    author_id INT,
    publishing_year VARCHAR(255),
    genre VARCHAR(255),
    created_at DATETIME,
    updated_at DATETIME,
    PRIMARY KeY (id) // 기본키 설정
}

필드 타입

필드는 타입을 갖으며 DMBS마다 다름. 여기서는 MySQL을 기준

1. 숫자 타입

타입용량(바이트)최솟값(부호 있음)최솟값(부호 없음)최댓값(부호 없음)최댓값(부호 있음)
TINYINT1-1280127255
SMALLINT2-3276803276765535
MEDIUMINT3-83886080838860716777215
INT4-2147483648021474836474294967295
BIGINT8-2630263-1264-1

2. 날짜 타입

타입설명범위용량
DATE날짜 부분은 있지만 시간 부분은 없는 값1000-01-01~9999-12-313바이트
DATETIME날짜 및 시간 부분을 모두 포함하는 값1000-01-01 00:00:00~9999-12-31 23:59:598바이트
TIMESTAMP날짜 및 시간 부분을 모두 포함하는 값1970-01-01 00:00:01~2038-01-19 03:14:074바이트

3. 문자 타입

  • CHAR와 VARCHAR
    : 그 안에 수를 입력해서 몇 자까지 입력할지 정함
    EX) CHAR(30) == 최대 30글자까지 입력
타입설명길이특징
CHAR- 테이블을 생성할 때 선언한 길이로 고정
- 레코드를 저장할 때 무조건 선언한 길이 값으로 '고정'해서 저장됨
0 ~ 255 사이의 값검색에 유리
VARCHAR- 가변 길이 문자열
- 입력된 데이터에 따라 용량을 가변시켜 저장
EX) VARCHAR(10000)으로 선언해도 10글자의 이메일을 저장할 경우 10글자에 해당하는 바이트 + 길이기록용 1바이트로 저장
0~65,535 사이의 값검색을 별로 하지 않고 유동적인 길이를 가진 데이터를 저장할 때 좋음

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

  • ENUM과 SET
    : 문자열을 열거한 타입
타입설명특징
ENUM- ENUM(데이터1, 데이터2,...,) 형태
- 단일 선택만 가능
- ENUM 리스트에 없는 잘못된 값을 삽입하면 빈 문자열이 대신 삽입
- 데이터값이 0,1 등으로 매핑되어 메모리 적게 사용 가능
- 최대 65,535개의 요소 넣을 수 있음
SET- ENUM과 비슷하지만 여러 개의 데이터 선택 가능- 비트 단위의 연산 가능
- 최대 64개의 요소를 넣을 수 있음

🤔 잠깐 ENUM에 대해서

CREATE TABLE shirts (
    name VARCHAR(40),
    size ENUM('x-small', 'small', 'medium', 'large', 'x-large') // 이런 식으로 열거 
);
// mysql 적용
  mysql> SELECT column_type FROM information_schema.columns WHERE table_name='shirts' AND column_name='size';
+----------------------------------------------------+
| column_type                                        |
+----------------------------------------------------+
| enum('x-small','small','medium','large','x-large') |
+----------------------------------------------------+
1 row in set (0.00 sec)

관계

  • 실제로 데이터베이스에는 table은 여러 개가 존재하고 table은 서로의 관계가 정의되어 있음
  • 1 : 관계를 맺는 개체와 하나의 관계를 가짐
  • 0 또는 1 : 관계를 맺는 개체와 0이거나 1의 관계를 가짐(하나 이하)
  • 1 이상 : 관계를 맺는 개체와 1이거나 여러 개의 관계를 가짐
  • 0 이상 : 관계를 맺는 개체와 0이거나 여러 개의 관계를 가짐

예시

  • 1:1 관계
    개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 하나와 관계를 맺을 수 있고,
    개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 하나와 관계를 맺을 수 있음

    EX) User당 User Email은 한 개씩 존재

  • 1:N 관계
    개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 다수와 관계를 맺을 수 있지만,
    개체 B의 각 개체 인스턴스는 개체 A의 개체 인스턴스 하나와 관계를 맺을 수 있음

    EX) 한 User 당 여러 개의 상품을 장바구니에 넣을 경우 (물론 하나도 넣지 않는 0개의 경우)

  • N:M 관계
    개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 다수와 관계를 맺을 수 있고,
    개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 다수와 관계를 맺을 수 있음

    EX) 학생도 강의를 많이 들을 수 있고 강의도 여러 명의 학생을 포함할 수 있음
    이때 N:M은 table 2개를 직접 연결해서 구축하지 않고 1:N, 1:M 관계를 갖는 테이블 2개로 나눠서 설정


Key

  • 릴레이션에서 투플들을 유일하게 구별하는 속성 또는 속성들의 집합(식별자)

🤔 잠깐 유일성과 최소성

  • 유일성(uniqueness)
    : 하나의 릴레이션에서 모든 투플은 서로 다른 키 값을 가져야 함(중복되는 값은 없음)
    : 키를 통해 각각의 투플을 구분 할 수 있어야 함 (identifier, ID)
    최소성(minimality)
    : 꼭 필요한 최소한의 속성들로만 키를 구성
    : 필드를 조합하지 않고 최소 필드만 써서 키를 형성할 수 있는 것

기본키(Primary Key)

  • 후보키 중에서 기본적으로 사용하기 위해 선택한 키
  • PK 또는 프라이머리키라고도 부름
  • 유일성과 최소성을 만족 -> 테이블의 데이터 중 고유하게 존재하는 속성


EX) 고객 아이디는 중복되지 않으므로 고객 아이디 필드는 기본키가 될 수 있다.
{고객 아이디, 고객 이름}이라는 복합키를 기본키로 설정할 수 있지만 최소성을 만족하지 않는다.

  • 기본키는 자연키 또는 인조키 중에 골라 설정
    • 자연키
      : 중복된 값들을 제외하며 중복되지 않는 것을 '자연스레' 뽑다가 나오는 키
      : 언젠가 변할 수 있음
      EX) User 테이블에서 주민등록번호, 이름, 성별 등의 속성이 있는데 이름, 성별은 중복된 값이 들어올 수 있음 따라서 주민등록 번호로 기본키 설정
    • 인조키
      : 인위적으로 생성한 키(고유 식별자)
      : 변하지 않는다. 보통 기본키를 인조키로 설정
      : MySQL은 auto increment 등으로 설정, 오라클은 sequence
      EX) User 테이블에서 주민등록번호, 이름, 성별 등의 속성이 있는데 인위적으로 유저 아이디를 부여함

외래키(Foreign Key)

  • 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
  • FK라고도 함
  • 개체와의 관계를 식별하는 데 사용
  • 외래키는 중복되어도 괜찮음


EX) 고객 table의 기본키인 고객아이디가 주문 table의 주문고객이라는 외래키로 설정

후보키(candidate Key)

  • 기본키가 될 수 있는 후보들
  • 유일성과 최소성을 만족하는 속성 또는 속성들의 합

대체키(alternate Key)

  • 기본키로 선택되지 못한 후보키
  • 후보키가 두 개 이상일 경우 하나를 기본키로 지정하는 남은 후보키

슈퍼키(super Key)

  • 각 레코드를 유일하게 식별할 수 있는 유일성을 만족하는 속성 혹은 속성들의 합

😎 참고자료

면접을 위한 CS 전공지식 노트
데이터 베이스 이해하기
Structure of Database Management System
데이터 모델링에서 Entity, Instance, Attribute의 의미
What is RDBMS
모두의 SQL

profile
SW Engineer 꿈나무 / 자의식이 있는 컴퓨터

0개의 댓글