Database 기본기

Michael Kim·2022년 7월 24일
0

DataBase

DB(Database)란? 일정한 규칙을 통해 구조화되어 저장되는 데이터 모음이다. 여기서 말하는 구조를 Schema라고 하며, DB를 관리하는 시스템을 DBMS(Database Management System)라고 한다. DBMS 내에서는 정의된 Query를 사용하여 DB를 추가하거나 삭제, 수정, 조회가 가능하다.

DB 내에서 쓰이는 용어가 따로 있다.

  • Entity: 여러 개의 속성을 지닌 명사를 뜻한다. '사람'의 경우, 출신지, 나이, 성별 등의 속성을 지닐 수 있으므로 entity로 삼을 수 있겠다.
  • Relation: entity에 대한 데이터를 구분하는 저장 단위이다. RDB(Relation DB)에서는 Table이라 하고, NoSQL에서는 Collection이라고 한다. '사람'과 '고양이'라는 entity가 있을 경우, 각각의 relation(table)을 갖는다.
  • Attribute(속성): Entity를 이루는 특징들이라고 할 수 있다.
  • Domain: 속성이 가질 수 있는 값들의 집합을 의미한다. '무지개'라는 relation(또는 테이블)이 존재하고, '색깔'이라는 속성이 존재할 때, '색깔' 속성이 가질 수 있는 도메인은 [빨, 주, 노, 초, 파, 남, 보]가 된다.
  • Field: Table(또는 NoSQL의 Document)에서 속성을 표현한다. Table에서 Field는 열(Column)단위의 데이터를 갖는다. 또한 Field에는 저장되는 값들의 타입이 사전에 정의되어 있다.
  • Record: Tuple이라고도 하며, Table에서 행 단위의 데이터를 의미한다. Table 내에서 정의된 속성들을 갖는 객체?라고 해도 될 것 같다.

Relation과 Key

  • 여기에서 말하는 관계(Relation)이란, RDBMS의 특징인 테이블 끼리 갖는 관계를 뜻한다.
  • 테이블 끼리는 여러 형태의 관계를 갖는다. 1:1 또는 1:N, N:M 형태의 관계를 갖는다. 그리고 정의된 관계를 ERD(Entity Relationship Diagram)이라고 한다.
  • 그럼 무엇으로, 어떤 것을 보고 테이블끼리 관계를 갖게 하는 것일까? 키(Key)는 관계를 명확하게 하는 역할을 하며, 어떠한 필드 또는 필드의 조합으로 설정되어 있다.
  • 키의 종류로는 기본키, 외래키, 후보키, 대체키, 슈퍼키가 있다.
    • 슈퍼키(super key): 각 레코드끼리 중복되지 않도록 유일성을 갖춘 키다. 필드의 조합으로도 설정할 수 있다.

    • 후보키(candidate key): 슈퍼키에 속하며, 유일성을 갖는다. 기본키가 될 수 있는 후보들이다. 슈퍼키와 다른 점은 최소의 필드만을 사용한 최소성을 갖는다는 점이다.

    • 기본키(primary key, PK): 테이블 내에서 레코드끼리 구별하는 역할을 한다. 후보키에 속하며, 유일성과 최소성을 만족한다.

      • 인조키: 기본키를 만들기 위해 인위적으로 생성한 키다. 변하지 않는다.
      • 자연키: 인조키가 아닌, 자연스럽게 속성 중 유일성을 갖는 것을 기본키로 삼은 키다. 변할 수 있다는 단점을 갖는다.
        ex. 데이터 생성 시간 필드가 자연키가 됐을 때, 실수로 사람이 데이터 생성 시간을 잘못 기입하였을 경우, 수정을 하면서 변경될 수 있다.
    • 대체키(alternate key): 후보키 중에서 기본키를 고르고 남은 키를 뜻한다. 기본키와 마찬가지로, 유일성과 최소성을 갖고 있으며, 기본키를 대신할 수 있다.

    • 외래키(foreign key): 다른 테이블의 기본키를 그대로 참조하는 값으로 Entity(or 테이블) 간에 관계를 식별할 때 사용한다. 중복되어도 괜찮다.

Transaction

  • 트랜잭션(Transaction)이란, DB에서 수행하는 작업의 단위를 말한다. 여러 쿼리들을 하나로 묶는 단위로 쓰이기도 한다.
  • Commit과 Rollback: Commit이란 트랜잭션 작업이 성공적으로 처리되었으며 변경된 내용을 저장되는 것을 뜻한다. Rollback은 트랜잭션 수행 바로 이전의 상태로 돌아가는 것을 뜻한다.
  • ACID: 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)을 뜻하며, 트랜잭션의 무결성(유효성) 보장하기 위해 필요한 성질이다.
    • 원자성: 트랜잭션이 수행되었거나 또는 수행되지 않았거나, 둘 중 하나의 상태만을 가리키는 성질이다.
    • 일관성: DB의 상태가 항상 일관되어야 한다는 성질이다. 즉, 트랜잭션 이후에도 DB의 제약 및 규칙을 만족해야 한다는 뜻이다.
    • 격리성: 트랜잭션 끼리는 서로 독립되어 있어야 한다.
    • 지속성: 트랜잭션 후에는 항상 같은 상태를 지속해야하며, 트랜잭션에 대한 로그가 남아야한다.

+) 데이터 무결성(or 유효성)이란, 데이터의 정확성(실제 세계의 데이터와 일치하는지)과 일관성(같은 데이터는 똑같은 내용을 갖고 있는지)이 유지되는 것을 말한다.

RDBMS vs NoSQL

RDBMS

  • 스키마(Schema)를 가지고 있으며, 그에 따라 행과 열로 이루어진 테이블(Table) 내에서 정형화된 데이터를 다룬다.
  • SQL 쿼리 언어를 통해 데이터를 삽입하거나 수정, 삭제, 조회가 가능하다.
  • 테이블끼리 관계(Relation)를 갖고 있으며, 테이블끼리 JOIN이 가능하다.
  • Commit, Rollback 기능을 통해 트랜잭션(Transaction) 단위의 작업 관리가 가능하다.
  • 종류로는 MySQL, MariaDB, Oracle, PostgreSQL, AWS AuroraDB 등이 있다.

NoSQL

  • 유연한 스키마를 갖고 있으며, 덕분에 언제든 필요한 필드를 추가할 수 있다.
  • Collection(or Document)끼리 따로 관계를 가지고 있진 않으며 JOIN 기능을 지원하지 않는다.
  • 주로 트랜잭션을 지원하지 않는다.
  • 반정형 또는 비정형 데이터를 다룬다. 다루는 데이터 구조에 따라 Key-Value DB, Document DB, Wide Column DB, Graph DB로 나뉜다.
  • NoSQL은 종류, 툴에 따라 모두 지원하는 기능이 조금씩 다르다. 커스텀을 통해 관계를 가진 형태를 만들 수도 있고, 몇몇 툴은 SQL을 지원하기도 한다. Wide Column 기반의 Google BigTable처럼 트랜잭션을 지원하는 경우도 있다.
profile
정리하고 복습하고 일기도 쓰고

0개의 댓글