CS 전공지식/데이터 베이스

1. 데이터베이스의 기본

eunjineee 2023. 8. 9. 14:52

데이터베이스(DB, DataBase)란?

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

- 실시간 접근 가능

- 동시 공유가 가능

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

⭐DBMS(DataBase Management System)

: 해당 데이터베이스를 제어, 관리하는 통합 시스템

 

응용 프로그램
Node.js, php

DBMS
MySQL

데이터베이스
 

* 데이터베이스와 DBMS 구조

 

 

1. 엔티(entity)란?

여러개의 속성을 가진 명사

 

✅약한 엔터티와 강한 엔터티

약한 엔터티 : 다른 엔티의 존재 여부에 따라 종속적인 엔터티

강한 엔터티 : 다른 엔터티의 존재 여부에 영향을 받지 않는 엔터티

 

기본 Strong 엔터티에는 기본 키가 있습니다. 약한 엔티에는 부분 식별자 키가 있습니다.
의존 Strong 엔티는 스키마의 다른 엔티와 독립적입니다. 약한 존재는 강한 존재에 의존한다.
표시됨 강력한 엔티는 단일 직사각형으로 표시됩니다. 약한 엔티는 이중 직사각형으로 표시됩니다.
관계 두 개의 강력한 개체 사이의 관계는 단순히 관계라고하는 단일 다이아몬드로 표시됩니다. 약한 존재와 강한 존재 사이의 관계는 이중의 다이아몬드로 표시된 Identification Relationship으로 표시됩니다.
참여 강력한 회사는 그 관계에 총 참여할 수도 있고 그렇지 않을 수도 있습니다. 약한 개체는 항상 이중선으로 표시되는 식별 관계에 총 참여합니다.

참고 : https://ko.gadget-info.com/difference-between-strong

 

 

2. 릴레이션(relation)이란?

데이터베이스에서 정보 구분하여 저장하는 기본단위

티에 대한 데이터를 데이터베이스는 릴레이션 하나에 담아서 관리

테이블 : 관계형 데이터베이스에서의 릴레이션

컬렉션 : NoSQL 데이터베이스에의 릴레이션

 

테이블과 컬렉션

데이터베이스의 종류

- 관계형 데이터베이스 (ex) MySQL : 레코드-테이블-데이터베이스)

- NoSQL 데이터베이스 (ex) MongoDB : 도큐먼트-컬렉션-데이터베이스)

 

면접을 위한 CS전공지식 노트

 

3. 속성(attribute)이란?

가장 첫번째 열이 속성

릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보

서비스의 요구사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔티의 속성이 됨

 

4. 도메인(domain)이란?

가장 왼쪽 열에 첨부한 것이 도메인

릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합

 

5. 필드와 레코드란?

member 테이블

name ID address phonenumber
은진 eunjin 부산 051
... ... ... ...

테이블 구성 요소

엔터티 회원
테이블 member
속성 이름, 아이디
필드 name, ID, address
레코드(튜플) 테이블에 쌓이는 행(row) 단위의 데이터

 

속성의 종류 : 속성에 맞는 타입

 

 책의 아이디: INT

 책의 제목: VARCHAR(255)

 책의 저자 아이디: INT

 책의 출판년도: VARCHAR(255)

 책의 장르: VARCHAR(255)

 생성 일시: DATETIME

 업데이트 일시: DATETIME

 

 

 

 

 

 

 

필드 타입

1️⃣숫자 타입

숫자 타입으로는 TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 등이 있음

 

 MySQL 숫자 타입

타입 용량(바이트) 최솟값(부호 있음) 최솟값(부호 없음) 최댓값(부호 없음) 최댓값(부호 있음)
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

 

2️⃣날짜 타입

날짜 타입으로는 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바이트의 용량

 

3️⃣문자 타입

문자 타입으로는 CHAR, VARCHAR, TEXT, BLOB, ENUM, SET이 있음

 

CHAR와 VARCHAR

CHAR 또는 VARCHAR 모두최대 입력값을 정할 수 있음 ( ex, CHAR(30))

 

CHAR

  • 테이블을 생성할 때 선언한 길이로 고정
  • 길이는 0에서 255 사이의 값
  • 레코드를 저장할 때 무조건 선언한 길이 값으로 ‘고정’해서 저장
  •  유동적이지 않은 길이를 가진 데이터의 경우에 효율적

VARCHAR

  • 가변 길이 문자열
  • 길이는 0에서 65,535 사이의 값으로 지정할 수 있음
  • 입력된 데이터에 따라 용량을 가변시켜 저장
  • ex, 예를 들어 10글자의 이메일을 저장할 경우 10글자에 해당하는 바이트 + 길이기록용 1바이트로 저장
  • 유동적인 길이를 가진 데이터의 경우에 효율적

 

TEXT와 BLOB

두 개의 타입 모두 큰 데이터를 저장할 때 쓰는 타입

 

TEXT : 큰 문자열 저장에 쓰며 주로 게시판의 본문을 저장할 때 사용

BLOB : 이미지, 동영상 등 큰 데이터 저장에 사용, 보통은 아마존의 이미지 호스팅 서비스인 S3를 이용하는 등 서버에 파일을 올리고 파일에 관한 경로를 VARCHAR로 저장

 

ENUM과 SET

ENUM과 SET 모두 문자열을 열거한 타입

장점 : 공간적으로 이점

단점 : 애플리케이션의 수정에 따라 데이터베이스의 ENUM이나 SET에서 정의한 목록을 수정해야 함

 

ENUM

  • ENUM(‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’) 형태로 사용
  • 이 중에서 단일 선택만 가능
  • ENUM 리스트에 없는 잘못된 값을 삽입하면 빈 문자열이 대신 삽입됨
  • x-small 등이 0, 1 등으로 매핑되어 메모리를 적게 사용하는 이점
  • 최대 65,535개의 요소들을 넣을 수 있음

SET

여러 개의 데이터를 선택할 수 있음

비트 단위의 연산 가능

최대 64개의 요소를 집어넣을 수 있음

 

6. 관계는?

여러 개의 테이블이 있고 이러한 테이블은 서로의 관계가 정의됨

면접을 위한 CS전공지식 노트

1:1 관계

ex ) 유저당 유저 이메일은 한 개

1:1 관계는 테이블을 두 개의 테이블로 나눠 테이블의 구조를 더 이해하기 쉽게 만들어 줌

 

1:N 관계

ex ) 쇼핑몰을 운영. 한 유저당 여러 개의 상품을 장바구니에 넣을 수 있음

물론 하나도 넣지 않는 0개의 경우도 있으니 0도 포함되는 화살표를 통해 표현해야 합니다.

 

한 개체가 다른 많은 개체를 포함하는 관계

 

N:M 관계

ex ) 학생과 강의의 관계, 학생도 강의를 많이 들을 수 있고 강의도 여러 명의 학생을 포함할 수 있음

 

 

7. 키란?

테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치

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

 

기본키(Primary Key)

  • == PK, 프라이머리키
  • 유일성과 최소성을 만족하는 키
  • 기본키는 자연키 또는 인조키 중에 골라 설정
  • 중복되는 데이터는 기본키가 될 수 없음

 

자연키

중복된 값들을 제외하며 중복되지 않는 것을 ‘자연스레’ 뽑다가 나오는 키

자연키는 언젠가는 변하는 속성을 가짐

 

인조키

인위적으로 생성한 키

자연키와는 대조적으로 변하지 않음

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

오라클은 sequence, MySQL은 auto increment 등으로 설정

  • ex ) 
  • 유저 테이블을 만든다고 했을 때 회원 테이블을 생성한다고 가정
  • 주민등록번호, 이름, 성별 등의 속성이 있음
  • 인위적으로 유저 아이디를 부여. 이를 통해 고유 식별자가 생겨남

 

외래키(Foreign Key, FK)

다른 테이블의 기본키를 그대로 참조하는 값

개체와의 관계를 식별하는 데 사용

중복 가능

 

후보키(candidate key)

기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키

 

대체키(alternate key)

후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키들

 

슈퍼키(super key)

각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키