210617_관계형 데이터베이스

Bitnara Lee·2021년 6월 17일
0

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

Database & SQL

  1. In-Memory
    JavaScript에서 데이터를 다룰 때에는 프로그램이 실행될 때에만 존재하는 데이터가 있다(끄면 데이터 사라짐)
    데이터가 프로그램에 의존
  2. File I/O
    엑셀 시트나 CSV 와 같은 파일 형태(항상 모든 데이터를 가져온 뒤 서버에서 필터링 필요)
    파일이 손상되거나 여러 개의 파일들을 동시에 다뤄야 하거나 하는 등 복잡하고 데이터량이 많아질수록 점점 힘들어짐
  3. Database
    필터링 외에도 File I/O 로 구현이 힘든 관리를 위한 여러 기능들을 가지고 있는 데이터에 특화된 서버

SQL(Structured Query Language )

(관계형)데이터베이스 용 프로그래밍 언어

  • 데이터베이스에 쿼리를 보내 원하는 데이터만을 가져올 수 있게 해준다
    structured(relation), 데이터가 구조화된 테이블을 사용하는 데이터베이스에서 활용

  • MySQL, Oracle, SQLite, PostgresSQL, MariaDB - 대표적 관계형 데이터베이스

    NoSQL : 데이터 구조가 고정되어 있지 않은 데이터베이스들(테이블 사용x)
    ex) MongoDB 와 같은 문서 지향 데이터베이스

쿼리 (query)

  • '질의문'

  • 기존에 존재하는 데이터를 검색어로 필터하듯이 쿼리는 저장되어 있는 정보를 필터하기 위한 질문으로도 볼 수 있다

데이터베이스 관련 명령어

ACID

Transaction

데이터베이스의 상태를 변환시키는 논리적 기능- 명령(쿼리)를 모아 놓은 하나의 작업 단위

Atomicity(원자성)

하나의 트랜잭션이 전부 성공하거나 전부 실패해야

Consistency

하나의 트랜잭션 이전과 이후 데이터베이스 상태는 이전과 같이 유효해야 한다

Isolation(고립성)

하나의 트랜잭션이 다른 트랜잭션과 독립되어야 한다

Durability(지속성)

하나의 트랜잭션이 성공적으로 수행되었다면 해당 트랜잭션에 대한 로그가 남고 런타임 오류나 시스템 오류가 발생해도 해당 기록은 영구적이어야 한다

SQL과 NoSQL의 차이점

데이터 저장(Storage)

관계형 데이터베이스: SQL을 이용해서 데이터를 테이블에 저장
NoSQL: 위에서 설명된 것처럼, key-value, document, graph, wide-column 형식등의 방식

스키마(Schema)

SQL: 사용하려면 형식이 고정된 스키마
NoSQL: 스키마의 형태가 보다 동적
행을 추가할 때 즉시 열을 함께 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 된다

쿼리(Querying)

관계형 데이터베이스: 테이블의 형식과 테이블간의 관계에 맞춰서 데이터를 요청합니다. 그래서 SQL과 같은 구조화된 쿼리 언어를 정보 요청에 사용합니다.

데이터 그룹 자체를 조회하는 것에 초점을 두고 있습니다. 그래서 구조화 되지 않은 쿼리 언어로도 데이터 요청이 가능합니다. UnQL(UnStructured Query Language)

확장성(Scalability)

SQL :보통 수직적으로 확장 (높은 메모리, CPU를 사용하는 확장)
소비용, 복잡, 시간 소모
NoSQL: 수평적으로 확장

Schema & Query Design

스키마(schema): "데이터베이스의 청사진"

entity(엔티티) : 고유한 정보의 단위

field(필드): 해당 엔티티의 특성 설명 (행렬의 열(column))

테이블에 저장된 항목: 행렬의 행(row)

데이터베이스 설계

관계형 데이터베이스 - relational database
구조화된 데이터가 하나의 테이블로 표현이 되는데 이처럼 사전에 정의된 테이블 - relation

  • 데이터 : 각 항목에 저장되는 값입니다.
  • 테이블 (혹은 relation) : 사전에 정의된 행과 열로 구성되어 있는 체계화된 데이터입니다.
  • 필드 (혹은 column) : 테이블의 열을 가리킵니다.
  • 레코드 (혹은 tuple) : 테이블의 한 행의 저장된 정보입니다.
  • : 테이블의 각 레코드를 구분할 수 있는 값. 각 레코드마다 고유값이어야 하며 기본키 (primary key)외래키 (foreign key) 등이 있을 수 있습니다.

관계 종류

<테이블 간 관계>

  • 1:1 관계

    • 테이블의 레코드 하나당 다른 테이블의 한 레코드와 연결
  • 1:N 관계

    • 테이블의 레코드 하나당 여러 개의 레코드와 연결
      ex) 한 유저가 한 전화번호를 가질 수 있는 것이 아니라 여러 개의 전화번호를 가짐. 하지만 그 반대는 성립할 수 x. 즉, 한 전화번호는 한 명의 유저만 가질 수 있다.
  • N:N 관계

    • 여러 개의 레코드가 여러 개의 레코드를 가짐. 따로 '조인 테이블'을 만들어 관리
      ex) 여러 개의 여행 상품이 있고 여러 명의 고객들이 있을 때 한 고객은 여러 개의 여행 상품을 사용 가능, 마찬가지로 한 여행 상품은 여러 명의 고객을 가질 수 있다

join table(조인 테이블)-> 동일하게 기본키가 있어야 함

<테이블 자체 관계>

  • 자기참조 관계 (Self Referencing Relationship)
    • 테이블 내에서도 관계가 필요할 때 - 추천인이 누구인지 파악하기 위한 목적, 혹은 조직 내에 상하 관계 등을 표현
    • 각 유저당 한 명만 추천할 수 있지만 추천 받은 사람은 여러 명에서부터 추천을 받을 수 있음 (1:N 관계와 비슷)
profile
Creative Developer

0개의 댓글