TIL 29. DB - Database와 RDBMS 기본개념

문승준·2021년 9월 25일
0

Database

목록 보기
1/1
post-thumbnail

1. Database

  • 특정 데이터를 확인하고 싶을때 간단하게 찾아낼 수 있도록 정리된 데이터의 집합

  • 컴퓨터 시스템에 저장된 정보나 데이터를 모두 모아 놓은 집합

  • 웹 시스템 내의 데이터베이스 (웹 구현을 위한 모든 데이터가 저장되어 있다)

    • web client가 상품사진을 누르면 → 상세정보를 web application server로 요청 → 필요한 정보를 database에 요청

    • database에서 필요한 정보를 응답 → web application server에서 상세정보 응답 → web client에서 렌더링

    • 모든 요청과 응답은 http 프로토콜을 통해 이루어지며 인터넷 연결이 필요하다.

  • 왜 굳이 Web application server를 거치는가?

    통신규약으로 인한 제약, 가공을 거치는 과정이 필요


2. DataBase Management System

  • DBMS: DB를 효율적으로 관리하는 소프트웨어

  • 요청을 받고 응답을 한다.

    (위 예시라면 web application server와 DB 사이에서)

  • DB와 DBMS는 왜 사용할까?

    DB

    • 데이터 보존 (비휘발성)
    • 체계적 관리 (찾을때 편하다)

    DBMS

    • 생산성 (검색, 추가, 삭제, 갱신 기능)

    • 기능성 (복수의 유저 요청 대응, 대용량 데이터 저장, 고속 검색, 기능 확장의 유연함)

    • 신뢰성 (확장성 Scalability, 부하 분산 Load balancing, 데이터 추출, 데이터 리스토어)

      → 여러 하드웨어로 분산할 수 있어서 신뢰성과 성능이 향상된다.


3. Relational DBMS

  • 관계 대수에서 착안

  • 행과 열을 가지고 표 형식으로 데이터를 저장 (2차원)

  • 수 많은 표를 저장해두고 각 테이블에 이름을 붙여 관리한다.

  • SQL을 사용할 수 있다.

  • 가장 일반적으로 사용되는 인프라는 인터넷. 웹 시스템과 연동하여 널리 사용된다.

  • RDBMS 소프트웨어 : MySQL, PostgreSQL, Oracle 등

  1. 모든 데이터는 2차원 테이블들로 표현할 수 있다.

    ex) 모든 책 정보로 테이블을 만든다면?

    Column (열) : 테이블의 각 항목 (id, 책 제목, 작가, 출판사, 가격)

    Row (행) : 항목에 해당하는 값

  2. 테이블의 각 Row (행)은 자신만의 고유 키(Primary Key)가 있다.

    다른 행과 겹치지 않는 고유한 번호가 있어야한다.

    특정 로우를 찾거나 인용(reference)할 수 있다.

    → 데이터의 완전성

  3. 각 테이블은 서로 상호 관련성을 가지고 서로 연결될 수 있다.

    각 테이블이 완전히 독립적이지 않고 서로 연관된 사이이다.

3-1. 테이블 관계 유형

  • One to One : 하나의 A 테이블 데이터는 하나의 B 테이블 데이터와 연결된다.

    ex) 이름 테이블 A와 주민번호 테이블 B

    B 테이블의 Foreign Key는 A 테이블의 PK를 참조한다.

  • One to Many : 하나의 A 테이블은 B 테이블의 여러 데이터와 연결된다.

    ex) 이름 테이블 A와 수강 과목 테이블 B

  • Many to Many : 하나의 A 테이블은 B 테이블의 여러 데이터와 연결된다.

    또한, 하나의 B 테이블은 A 테이블의 여러 데이터와 연결된다.

    ex) 한 작가는 여러 권을 책을 쓸 수 있고, 한 책은 여러 작가가 쓸 수 있다.

    → Many to Many 관계는 중간 테이블이 필요하다.

  • 테이블을 나누는 이유는 무엇일까? 하나의 테이블에 모두 저장하면?

    → 더 많은 디스크를 사용하게 되고, 잘못된 데이터가 저장 될 가능성이 높아진다.

  • 여러 테이블에 나누어서 저장한후 필요한 테이블 끼리 연결 시키면?

    → 중복 데이터가 없어서 디스크를 더 효율적으로 쓰고,

    → 같은 데이터안에서 부분 내용이 달라질 수 있는 문제가 없어진다.

    → 따라서 normalization(정규화)이 필요하다.

3-2. Transaction과 ACID

  • 트랜잭션(Transaction) : ACID를 보장하면서

    일련의 작업들이 마치 하나의 작업처럼 취급되어 모두 성공하거나 아니면 모두 다 실패하는 것.

    ex) 은행 계좌 이체 시스템, 쇼핑몰 결제나 장바구니 등

Atomicity (원자성) : 중간에 실패하면 다시 되돌아간다.
Consistency (일관성) : 규칙을 위반하는 트랜잭션은 중단된다.
Isolation (고립성) : 트랜잭션 수행 중 다른 트랜잭션은 끼어들지 못한다.
Durability (지속성) : 성공된 트랜잭션은 영원히 반영되어야한다.


4. ERD 모델링해보기

AQuery Tool로 ERD를 만들어보자.

스타벅스 사이트

  • 필수 구현 사항 - 음료, 카테고리, 영양 정보, 알러지, 음료 이미지, 음료 설명, 신상 여부
  • 구현 제외 사항 - 프로모션, 음료 사이즈
  • 메뉴 카테고리에 있는 “음료” 메인 카테고리만 모델링
  • 필수 구현 사항의 데이터를 모두 저장할 수 있도록 구현

4-1. 상위 항목부터 테이블을 만든다. (부모 테이블부터)

메뉴(음료, 푸드,상품, 카드..) → 카테고리(콜드브루, 에스프레소...) → 음료 (카푸치노, 카페 라떼...)

FK를 가지고 있는 테이블이 자식 테이블이다.

4-2. 엑셀 시트에 표를 작성하며 테이블 관계를 따져본다.

one to many 메뉴-카테고리 / 카테고리-음료 / 음료-이미지

(이미지 테이블 반드시 따로 빼서 관리한다 → 확장성)

one to one 음료-영양정보 (사이즈를 고려X)

(한 테이블에 넣을 수 있지만, 자주 조회되는 데이터 정보가 나오면 별도로 테이블 분리한다 → 성능 향상)

many to many 음료-알러지성분

중간 테이블명 : 복수 이름으로 _ 이용해 두 테이블명 더하기

4-3. ERD를 작성한다.

  • Data type (MySQL 기준)

CHAR : 고정 길이 데이터

VARCHAR : 가변 길이 데이터

TEXT : tiny, medium, long 등 용량별 문자열 데이터

INT : small, medium, big 등 용량별 정수형 데이터

TINYINT : 보통 불리언 타입 데이터 표현에 사용

FLOAT(길이, 소수) : 부동 소수형 데이터 타입 - 고정 소수점 사용

DECIMAL(길이,소수) : 고정 소수형 데이터 타입 - 소수점 사용

→ decimal은 float보다 연산속도는 느릴 수 있지만 정밀도가 더 높다.

DATE : 날짜 형태

TIME : 시분초 형태

DATETIME : 날짜와 시간 형태

TIMESTAMP : 시스템 변경시 날짜와 시간 자동 저장


  • 참조목록

MySQL 데이터 타입

RDBMS vs NoSQL

profile
개발자가 될 팔자

0개의 댓글