본문 바로가기

개발인생다반사/TIL(Today i learned)

TIL - 211111 [데이터베이스] 관계형 데이터 베이스(RDBMS)

Achievement Goals

  • 3 Tier Architecture 를 이해한다.
  • 영속성의 개념을 이해하고, 데이터베이스의 필요성을 인지한다.
  • 데이터베이스 종류를 이해한다.
    • 관계형 데이터베이스와 NoSQL의 차이를 이해한다.
    • 관계형 데이터베이스 및 NoSQL이 어떤 경우에 적합한지 이해한다.
    Learn SQL
  • SQL 주요 문법을 이해할 수 있다.
    • 조회, 삽입, 갱신, 삭제 구문을 자유자재로 사용할 수 있다.
    • 조회 시 다양한 조건을 걸어 원하는 정보만 조회할 수 있다.
    • 통계를 위한 쿼리를 만들 수 있다.
  • 스키마 디자인을 할 수 있다.
    • 앱에 필요한 테이블과 필드, 그리고 관계를 부여할 수 있다.
  • 1:N, N:N 관계를 이해하고, 데이터베이스에서 테이블을 조작할 수 있다.
    • Foreign Key, Primary Key에 대해 이해할 수 있다.

Chapter 1 - 개요

1.  SQL 소개

(1) 데이터베이스 필요성

1. In-Memory

프로그램이 실행될 때 사용하는 메모리. 프로그램 종료와 함께 메모리의 사용도 종료

 

2. File I/O

파일을 읽고 파일에 쓰는 방식

 

RDBMS(관계형데이터베이스)에는 한 개의 테이블로 데이터를 저장할 수 있다.

한번에 여러 개의 테이블을 가질 수 있기 때문에 SQL을 화용해 데이터를 불러오기 수월하다.

(2) SQL 소개

Structured Query Languange는 DB언어로 주로 RDBMS에서 사용한다.

MySQL, Oracle, SQLite, PostgreSQL

 

SQL : 구조화된 쿼리 언어

쿼리 : 질의문, 저장되어 있는 데이터를 필터하기 위한 질의문

SQL은 DB용 프로그래밍언어. DB에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있음

이에 반해 데이터의 구조가 고정되어 있지 않은 DB를 NoSQL라고 함.

NoSQL은 테이블을 사용하지 않고 데이터를 다른 형태로 저장(MongoDB, 문서지향 DB)

 

2. SQL Basics

(1) 기본 쿼리문

SQL 기본 문법

  • Select
  • Where
  • And, Or, Not
  • Order By
  • Insert Into
  • Null Values
  • Update
  • Delete
  • Count
  • Like
  • Wildcards
  • Aliases
  • Joins
    • Inner Join
    • Left Join
    • Right Join
  • Group By

데이터베이스 용어

  • SQL Create DB
  • SQL Drop DB
  • SQL Create Table
  • SQL Drop Table
  • SQL Alter Table
  • SQL Not Null
  • SQL Unique
  • SQL Primary Key
  • SQL Foreign Key
  • SQL Default
  • SQL Auto Increment
  • SQL Dates

(2) DB 명령어

데이터베이스 생성

데이터베이스 사용

테이블 생성

테이블 정보 확인

(3) SQL 명령어 간략하게 살펴보기

SELECT : 데이터셋에 포함되리 특성을 특정

FROM : 테이블과 관련한 작업을 할 경우 반드시 입력 필요. FROM 뒤에는 결과를 도출할 DB 테이블명 명시

WHERE : 필터 쿼리

ORDER BY : 결과값을 어떤 기준으로 정렬하여 출력할지 결정

LIMIT : 결과로 출력할 데이터의 개수. 쿼리문 사용시 가장 마지막에 추가

DISTINCT : 유니크한 값을 받고 싶을 때 SELECT DISTINCT 

INNER JOIN : 기준 테이블과 조인 테이블 모두 데이터가 존재해야 함

둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결한다.

OUTER JOIN

LEFT : 기준 테이블(테이블_ 1).  조인 테이블(테이블_2)에 데이터가 없어도 기준 테이블의 모든 데이터가 조회.

조인 테이블에 데이터가 존재할 경우 해당 데이터를 참조할 수 있다. 참조할 수 없는 경우에는 NULL로 표시

 

RIGHT :  기준 테이블(테이블_2). 조인테이블(테이블_1)이 LEFT와 바뀜.

3. ACID

트랜젝션 : DB 상태를 변환시키는 논리적 기능. 명령(쿼리)을 모아놓은 하나의 작업 단위

여러 작업 중에서 단 하나의 작업이라도 실패하면, 이 트랜잭션에 속한 모든 작업을 실패한 것으로 판단.

테이터베이스 트랜잭션이 발생할 때 안정성을 보장할 수 있는 성질

Atomicity(원자성) : 하나의 트랜잭션 내에서는 모든 연산이 성공하거나 모두 실패해야 한다.

Consistency(일관성) : 하나의 트랜잭션 전후에 데이터베이스의 일관된 상태가 유지되어야 한다.

Isolation(격리성, 고립성) : 각각의 트랜잭션은 독립적이며 서로의 연산을 확인하거나 영향을 줄 수 없다.

Durability(지속성) : 하나의 성공한 트랜잭션에 대한 로그가 기록되고 영구적으로 남는다.

 

4. SQL vs. NoSQL

(1) SQL(구조화 쿼리 언어) vs. NoSQL(비구조화 쿼리 언어)

관계형 데이터베이스: MySQL, Oracle, SQLite, PostgresSQL, MariaDB

NoSQL : 몽고DB, Casandra

 

관계형DB : 테이블 구조, 테이터 타입 사전에 정의. 정의된 내용에 알맞은 형태의 데이터만 삽입 가능.

행과 열로 구성된 테이블에 데이터 저장. SQL을 활용해 원하는 정보를 쿼리할 수 있음.

관계형DB는 스키마 뚜렷함.

 

(2) NoSQL

데이터가 고정되어 있지 않은 데이터베이스. 관계형 데이터베이스는 입력할 때 스키마에 맞게 입력해야 한다.

NoSQL은 데이터를 읽어올 때 스키마에 따라 읽어온다. (schema on read 방식)

  • Key-Value 타입
  • 문서형 데이터베이스
  • Wide-column 데이터베이스
  • 그래프(Graph) 데이터베이스

(3) SQL 기반의 데이터베이스와 NoSQL 데이터베이스의 차이점

데이터 저장(Storage) : 관계형 데이터베이스는 SQL을 이용해서 데이터 테이블에 저장. 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터 저장(스키마: 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세서)

 

스키마(Schema) : SQL사용하면 고정된 형식의 스키마 필요. 데이터 속성별로 열(column) 정보를 미리 정해둠. 스키마는 나중에 변경할 수 있지만 이 경우에는 데이터베이스 전체를 수정하거나 오프라인으로 전환할 필요가 있음

 

쿼리(Querying) : 관계형 데이터베이스에서는 테이블의 형식과 테이블 간의 관계에 맞춰 데이터 요청해야 한다.

 

확장성(Scalability) : SQL기반의 관계형 데이터베이스는 수직적으로 확장. 높은 메모리, CPU를 사용하는 확장. 하드웨어의 성능을 많이 이용하기 때문에 비용이 많이 든다.

 

(4) SQL 기반의 관계형 데이터베이스를 사용하는 케이스

1. 데이터베이스의 ACID 성질을 준수해야 하는 경우

데이터의 무결성을 보호할 수 있음. 전자 상거래를 비롯한 모든 금융 서비스를 위한 소프트웨어 개발에서 반스드 DB의 ACID성질 준수

 

2. 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우

프로젝트 규모가 많은 서버를 필요로 하지 않고 일관된 데이터를 사용하는 관계형 데이터베이스를 사용하는 경우가 많다.

 

(5) NoSQL 기반의 비관계형 데이터베이스를 사용하는 케이스

1. 데이터 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우

2. 클라우드 컴퓨팅 및 저장 공간을 최대한 활용하는 경우

3. 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우

Chapter 2- 설계

1. 데이터베이스 설계

(1) 관계형 데이터베이스

구조화된 데이터는 하나의 테이블로 표현할 수 있다. 테이블을 relation이라고 칭함.

테이블을 사용하는 데이터베이스를 관계형 데이터베이스라고 한다.

  • 데이터(data): 각 항목에 저장되는 값입니다.
  • 테이블(table; 또는 relation) : 사전에 정의된 열의 데이터 타입대로 작성된 데이터가 행으로 축적됩니다.
  • 칼럼(column; 또는 field) : 테이블의 한 열을 가리킵니다.
  • 레코드(record; 또는 tuple) : 테이블의 한 행에 저장된 데이터입니다.
  • 키(key) : 테이블의 각 레코드를 구분할 수 있는 값입니다. 각 레코드마다 고유한 값을 가집니다. 기본키(primary key)와 외래키(foreign key) 등이 있습니다.

(2) 관계 종류

  • 1:1 관계 : 하나의 레코드가 다른 테이블의 레코드 한개와 연결된 경우. 1:1로 나타낼 수 있는 관계라면 따로 만들어진 테이블에 놓지 않는다.
  • 1:N 관계 : 하나의 레코드가 서로 다른 여러 개의 레코드와 연결된 경우
  • N:N 관계 : 여러 개의 레코드가 다른 테이블의 여러 개의 레코드와 관계가 있는 경우. 다대다 관계는 두 개의 일대다 관계와 그 모양이 같다. 두 개의 테이블과 1 : N 관계를 형성하는 새로운 테이블로 N :N관계를 나타낼 수 있다.(조인 테이블)
  • self referencing 관계(자기참조 관계) 

2. SQL More

(1) SQL 내장함수

집합 연산 : 레코드를 조회하고 분류한 뒤, 특정 작업을 하는 연산

HAVING은 그룹화한 결과에 대한 필터.

WHERE는 저장된 레코드를 필터링.

SELECT 실행순서

  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • SELECT
  • ORDER BY

1. FROM invoices: invoices 테이블에 접근을 합니다.

2. WHERE CustomerId >= 10: CustomerId 필드가 10 이상인 레코드들을 조회합니다.

3. GROUP BY CustomerId: CustomerId를 기준으로 그룹화합니다.

4. HAVING SUM(Total) >= 30: Total 필드의 총합이 30 이상인 결과들만 필터링합니다.

5. SELECT CustomerId, AVG(Total): 조회된 결과에서 CustomerId 필드와 Total 필드의 평균값을 구합니다.

6. ORDER BY 2: AVG(Total) 필드를 기준으로 오름차순 정렬한 결과를 리턴합니다.

 

Chapter 3 - Self Guided Lessons

1. 데이터베이스 정규화

(1) 데이터베이스 정규화(Normalization)

데이터베이스 정규화는 데이터베이스 설계와 관련이 있다.

데이터베이스 설계에 따라 데이터의 저장 구조가 결정되기 때문이다.

 

Data Redundancy(데이터 중복)

데이터 중복은 데이터의 동일한 복사본이나 부분적인 복사본을 뜻함.

데이터 중복은 몇가지 문제가 있다.

  • 일관된 자료 처리의 어려움
  • 저장 공간 낭비
  • 데이터 효율성 감소

Data Intergrity(데이터 무결성)

데이터 무결성은 데이터의 수명 주기 동안 정확성과 일관성을 유지하는 것을 뜻한다.

 

Anomaly(데이터 이상 현상)

  • 갱신 이상(update anomaly) : 두 개의 레코드가 동일한 사람일 때 어떤 행의 데이터를 갱신해야 하는지의 문제
  • 삽입 이상(insertion anomaly) : 데이터를 삽입하지 못하는 경우
  • 삭제 이상(deletion anomaly) : 데이터의 특정 부분을 지울 때 의도치 않게 다른 부분도 함께 지우는 현상

2. SQL 종류

  • Data Definition Language(DDL) : 데이터를 정의할 때 사용하는 언어. CREATE, DROP(테이블 제거)
  • Data Manipulation Language(DML) : 데이터를 저장할 때 사용하는 언어. INSERT, DELETE, UPDATE
  • Data Control Language(DCL) : 데이터베이스에 대한 접근 권한. GRANT(권한 부여), REVOKE(권한을 가져감)
  • Data Query Language(DQL) : 스키마 내에서 쿼리할 수 있는 언어. SELECT. DML의 일부분으로 취급하기도 함
  • Transaction Control Language(TCL) : DML을 거친 데이터의 변경사항 수정. COMMIT, ROLLBACK.

3. SQL Advanced

CASE

SUBQUERY.. IN, NOT IN, EXISTS, NOT EXISTS, FROM