1. 관계형 데이터베이스 개요

const_yang·2022년 1월 9일
0

데이터베이스

목록 보기
1/2
post-thumbnail

SQL

Structured Query Language: 구조화된 쿼리 언어

대표적인 관계형 데이터베이스(RDBMS), MySQL로 Schema를 설계하고,
SQL을 사용하여 데이터를 persistently하게 저장하는 방법을 학습하자

  • 3 Tire Architecture: 클라이언트 - 서버 - 데이터베이스
  • persistently(영속성) 개념
  • 데이터베이스의 종류 (MySQL, NoSQL)
  • SQL : 주요 문법 (조회, 삽입, 갱신, 삭제), 통계를 위한 쿼리, 스키마 디자인 (앱에 필요한 테이블과 필드, 관계), 1:N, N:N 관계를 이해하고 데이터베이스 테이블 조작 (Foreign Key, Primary Key)

SQL은?

하나의 데이터베이스 언어이다. 주로 관계형 데이터베이스에서 사용된다(MySQL, Oracle, PostgreSQL 등).

데이터베이스에 쿼리를 보내, 원하는 데이터를 가져오거나 삽입할 수 있다.
구조화된 테이블을 사용한다는 점이 NoSQL과 같이 문서 지향 데이터베이스와 차이점이다.

ACID

트랜잭션? 여러 개의 작업을 하나로 묶은 실행 유닛.

여러 작업 중 하나라도 실패하면, 모든 작업을 실패한 것으로 판단.

  • Atomicity (원자성)

트랜잭션의 모든 작업이 성공하거나 실패하여 결과를 예측할 수 있다.
여러 작업이 모두 성공한 경우에만 데이터를 활용하고, 하나 작업이 실패하면 묶여 있는 모든 작업을 실패한 것으로 만들어 기존 데이터를 보호한다.

  • Consistency (일관성)

데이터베이스의 상태가 일관되어야 한다.

예를 들어, 계좌를 만들 때 계좌주의 실명 없이는 계좌를 개설할 수 없다. 모든 계좌에는 계좌주의 실명이 존재하기 떄문이다.

  • Isolaction (격리성, 고립성)

모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다.

두 사람에게 동시에 계좌 이체를 할 때, 각 계좌로 이체를 하는 행위가 서로에게 영향을 미쳐서는 안된다.

  • Durability (지속성)

만약 하나의 트랜잭션이 성공적으로 수행되면, 해당 작업의 로그가 영구적 남아있어야 한다.

예를 들어, 계좌 이체를 성공한 후 은행 서버에 오류가 발생하더라도 해당 이체는 내역에 남지만, 계좌 이체 중에 은행 서버에 오류가 발생하면 이체 시도는 실패가 되고 원래 데이터의 상태로 복귀한다.

관계형 데이터베이스 vs 비관계형 데이터베이스

관계형 (SQL)

테이블의 구조와 데이터 타입을 사전에 정의한다.
원하는 정보를 쿼리할 수 있다 ⇒ 스키마가 뚜렷하다.

비관계형 (NoSQL)

데이터가 고정되어 있지 않은 데이터베이스.

관계형 데이터 - 데이터를 입력할 때 스키마에 맞게 입력
비관계형 데이터 - 데이터를 읽어올 때 스키마에 따라 읽어 옮 (schema on read)

차이점

  • 데이터 저장(Storage):

관계형 - SQL을 이용하여 테이블에 데이터 저장
비관계형 - key-value, document, wide-column, graph 등의 방식

  • 스키마(Schema):

관계형 - 고정된 형식의 스키마가 필요
비관계형 - 동적으로 스키마의 형태 관리 가능

  • 쿼리(Querying):

관계형 - SQL과 같이 구조화된 쿼리 언어 사용
비관계형 - 데이트 그룹을 조회하므로, 구조화되지 않은 쿼리 언어로 데이터 요청 가능

  • 확장성(Scalability):

관계형 - 수직적으로 확장 (하드웨어 성능을 많이 사용 → 비용이 높음)
비관계형 - 수평적으로 확장 (저렴한 서버로 증설하거나 클라우드 서비스 이용 가능 → 비용이 저렴)

Schema?

데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명. 즉, “데이터베이스의 청사진”

entities?

고유한 정보의 단위 (테이블);

entities간의 관계?

예) 교수 - 수업 - 학생
한 교수가 여러 수업을 가르친다 ⇒ 교수 - 수업 (1:N)

관계의 종류

  • 1:1

사용자와 전화번호부의 관계

  • 1:N

교수와 수업의 관계. 한 교수가 여러 수업을 진행할 수 있으나, 한 수업을 여러 교수가 진행할 수 없다

  • N:N

고객과 여행 패키지의 관계. 한 고객이 여러 패키지를 예약할 수 있고, 하나의 패키지를 여러 고객이 예약할 수 있다

이런 관계의 경우 Join table을 만들어 관리한다.

  • 자기참조 (self referencing)

같은 테이블 내에서, 예를 들어 추천인이 누구인지 파악하는 경우.

한 명의 유저는 한 명의 추천인을 가질 수도, 여러 명의 유저가 한명의 추천인을 가질 수도 있어서 1:N 관계와 유사하다고 볼 수 있으나, 1:N 관계는 서로 다른 테이블에서 표현하는 방법


Primary key

고유한 값 (id 뿐 아니라 다른 여러 컬럼에도 부여 가능하다)

Foreign key

다른 키를 참조하는 키

0개의 댓글