RDBMS

마자나다·2023년 12월 17일
0

DB

목록 보기
2/4

데이터베이스란?

  • 데이터베이스는 조직 또는 개인의 정보를 구조적으로 저장하는데 사용되는 데이터의 집합이다. 데이터베이스는 테이블, 레코드, 열 등의 데이터 구조로 되어있다.

DBMS

DBMS의 개념

  • DBMS는 DataBase Management System의 약자로 데이터를 저장, 조작, 검색 보호하는 소프트웨어이다.
  • DBMS는 데이터베이스 설계, 데이터 유지보수, 보안, 백업및 복구, 동시성 제어 등의 기능을 제공한다.

#데이터베이스는 저장공간, DBMS는 데이터베이스를 조작하기 위한 시스템

DBMS의 특징

  • 데이터 중앙 저장 : DBMS는 데이터를 중앙 집중식으로 저장. 데이터 중복 최소화, 데이터 일관성 유지
  • 데이터 구조화 : DBMS는 데이터를 구조화된 형식으로 저장. 테이블, 로우, 컬럼과 같은 구조로 관리된다
  • 데이터 무결성 : DBMS는 데이터 무결성을 유지하기 위한 제약 조건을 제공한다.
  • 동시성 제어 : DBMS는 다중 사용자 환경에서 동시에 데이터 접근하는 것을 관리하고 제어한다. 데이터 충돌을 방지, 데이터 일관성을 보장한다.
  • 트랙잭션 관리 : DBMS는 트랙잭션을 지원하여 데이터 작업의 일관성과 원자성을 보장한다. (트랜잭션은 모두 성공하거나 모두 실패하는 원자성을 가지고 있다.)
  • 그 외의 특징으로 보안 및 관리 권한, 백업 및 회복, 확정성, 멀티플랫폼 지원 등 다양한 특징이 있다.

RDBMS

RDB란?

  • RDB란, Relational Database의 약자로, 관계형 데이터 모델에 기초를 둔 데이터 베이스이다.
  • 관계형 데이터 모델이란, 데이터를 구성하는데 사용하는 방법 중 하나로 모든 데이터를 2차원 테이블 형태로 표현한다.
  • 데이터의 독립성이 높고, 고 수준의 데이터 조작언어를 사용하여 결합, 제약, 투영 등의 관계 조작에 의해 비약적으로 표현 능력을 높일 수 있다.

RDBMS란?

  • RDBMS, Relational DataBase Management System의 약자로 RDB를 생성하고 수정하고 관리해주는 소프트웨어이다.

RDBMS의 특징

  • RDBMS는 일반 DBMS보다 효율적으로 데이터를 저장, 구성 및 관리를 할 수 있다. 정규화를 통해 데이터의 중복성을 최소화하여 트랙잭션을 수행하는 것이 더 쉽다.
  • 스키마 : RDBMS는 스키마를 사용하여 데이터의 구조를 정의한다. 스키마는 데이터 베이스에 저장되는 테이블, 열, 데이터유형, 제약조건을 명시한다.
  • SQL을 사용하여 검색, 추가, 수정, 삭제하는데 사용된다.
  • 데이터 간의 관계 : 테이블 간의 관계를 설정할 수 있다. 외래키 (foreign key)를 사용하여 테이블간의 관계를 정의하고 데이터를 연결 할 수 있다.
  • 그 외에도 데이터보안, 트랜잭션 관리, 데이터 무결성 등의 특징이 있다.

RDBMS의 구성

  • 테이블-컬럼 형태로 테이블을 저장한다.
  • 하나의 테이블은 여러개의 컬럼으로 구성되어있다.
  • 테이블(Table) = 관계(Relation)
  • 튜플(Tuple)
    - 튜블 = 행 = 레코드 : 테이블에 있는 속성(Arrtibute)의 집합이다.
    • 튜플의 갯수를 카디널리티라고 부른다.
  • 속성(Attribute)
    - 속성 = 열 = 필드, 테이블을 구성하는 정보들이다. 속성의 수는 차수(Degree)라고 부른다.
  • 도메인(Domain)
    - 각 속성에서 가질 수 있는 값들의 집합이다.

트랜잭션(Transaction)

트랜잭션 개념

  • 데이터베이스의 상태를 변화시키는 논리적인 작업단위
  • 하나의 작업을 수행하는데 필요한 데이터베이스의 연산들을 모아 놓은 것
  • 데이터베이스는 무결성, 일관성을 보장하기 위해 작업 수행에 필요한 연산들을 하나의 트랜잭션으로 관리한다.

ACID

  • ACID는 RDBMS에서 데이터의 일관성과 안전성을 보장하기 위한 트랜잭션 속성을 나타내는 약어이다.
  • ACID는 다음과 같은 4가지 속성으로 구성된다.
    • Atomicity(원자성) “All or Nothing”
      • 트랜잭션은 원자적이어야 한다. 트랜잭션 내의 모든 작업은 하나의 단위로 간주. 그래서 이 단위 작업중 하나라도 실패하면 전체 트랜잭션이 실패해야 한다. 트랜잭션은 “모두 성공하거나 모두 실패해야한다.”
    • Consistency(일관성) “항상 유효한 데이터만 저장”
      • 트랜잭션은 수행하기 전과 후에 데이터베이스는 일관된 상태를 유지하여야 한다. 트랜잭션 실행 전과 후에 데이터베이스에 정의된 모든 규칙과 제약 조건이 유효해야 한다.
    • Isolation(고립성) “다른 트랜잭션에 영향을 최소화”
      • 다중 사용자 환경에서 동시에 실행중인 여러 트랜잭션이 서로에게 영향이 미치지 않아야 한다. 그리고 각 트랜잭션은 다른 트랜잭션에서 수행하는 작업을 볼수 없어야 한다.
    • Dutability(지속성) “영구적으로 보관”
      • 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 보관 되어야한다. 시스템 장애 또는 중단과 같은 문제가 발생하더라도 트랜잭션 결과는 손실되지 않아야 한다.

정규화 (Normalization)

  • RDBMS에서 정규화는 데이터베이스 설계 과정에서 데이터 중복을 최소화하고 데이터의 일관성과 무결성을 유지하기 위한 중요한 원칙중 하나이다.
  • 정규화의 주요 목표는 다음과 같다.
    1. 데이터 중복의 최소화 : 데이터 중복을 제거하고, 각 데이터는 한번만 저장되어야하낟,
    1. 데이터 일관성 및 무결성 유지 : DB내에서 데이터 일관성과 무결성을 보장한다. 즉 동일한 데이터가 여러 곳에 저장되어 다른값으로 변경되는 문제를 방지한다.
    2. 질의 최적화 : 정규화된 DB는 특정유형의 질의에 대한성능을 최적화 할 수 있다.

정규형

  • 정규화는 일반적으로 다음과 같은 정규형으로 분류된다

  • 1NF(First Normal Form)

    • 각 열은 원자적인 데이터 값을 갖는다. 즉 각셀에 하나의 값만 들어가야한다.

    • 중복 열을 제거하고 모든 열이 원자적인 값을 가지도록 한다.

    • “한칸엔 하나의 데이터만”

      ex) 고객의 취미 테이블을 정규화에 맞춰 만든다고 가정하여 보자.

      이름취미
      김연아인터넷
      추신수영화, 음악
      박세리음악, 쇼핑
      장미란음악

      이 같이 여러개의 취미를 가지고 있기 댸문에 제 1정규형을 만족하지 못하고 있다 1정규화 하여 분해하게 된다면 아래와 같다.

      이름취미
      김연아인터넷
      추신수영화
      추신수음악
      박세리음악
      박세리쇼핑
      장미란음악
  • 2NF(Second Normal Form)

    • 1NF를 만족하면서 모든 비주요 속성이 주요 속성에 함수적으로 종속되어야 한다.

    • 이것은 테이블에 복합 키(composite key)가 있을 때 발생하는 문제를 해결한다.

    • 현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 작업”

      체육 수강신청을 예시로 알아보자.

      회원번호회원이름프로그램가격납부여부
      101강호동스쿼시50000
      102손흥민헬스60001
      103김민수헬스60001
      103김민수골프초급80000

      만약 헬스라는 프로그램이 7천원으로 올라서 수정해야한다면 모든 헬스를 찾아서 일일이 7천원으로 수정하기엔 힘든 방법이다.
      가격테이블은 수강등록현황과 조금 다른 주제이기 때문에 따로 만들어서 제2정규화를 진행해보자.

      회원번호회원이름프로그램납부여부
      101강호동스쿼시0
      102손흥민헬스1
      103김민수헬스1
      103김민수골프초급0
      • 수강등록현황 table
      프로그램가격
      스쿼시5000
      헬스6000
      골프초급8000
      • 프로그램 table

      대신 단점이 있는데 손흥민이 얼마의 돈을 냈냐 확인하고 싶다면 2개의 테이블을 다 확인해야한다는 단점이 있다. 그러나 DB를 쓴다면 정규화를 하는게 일반적이다.

  • 3NF(Third Normal Form)

    • 2NF를 만족하면서, 모든 속성이 후보 키(candidate key)에 대해 이행적으로 종속되지 않아야 한다.

    • 데이터 중복을 최소화하기 위한 중요한 단계이다.

    • “일반 컬럼에만 종속된 컬럼은 다른 테이블로 빼기”

      체육수업의 소개 테이블로 확인해보자.

      프로그램가격강사출신대학
      스쿼시5000김을용서울대
      헬스6000박덕팔연세대
      골프8000이상구고려대
      골프중급9000이상구고려대

      다음과 같은 테이블에서 출신대학은 프로그램인 primary key와 딱히 관련이 없고, 강사인 후보키에 대해서 종속되어 있다. 따로 테이블만들어 제 3 정규형을 만족해보자.

      프로그램가격강사
      스쿼시5000김을용
      헬스6000박덕팔
      골프8000이상구
      골프중급9000이상구
      • 프로그램 테이블
      강사출신대학
      김을용서울대
      박덕팔연세대
      이상구고려대
      • 강사 테이블

      마찬가지로 강사의 학력사항은 수정하기 쉬워졌지만, 프로그램 테이블을 보고 강사의 학력을 확인하고 싶어질때 2개의 테이블을 일일이 확인해야 한다는 단점이 있다.

정규화 간단요약

1. 1차 정규형는 한칸의 한 데이터만 넣었다.
2. 2차 정규형는 현재 테이블과 다른 주제는 다른테이블로 나눈다.
3. 3차 정규형는 메인컬럼과 엮이지않고 일반컬럼에 종속된 컬럼은 다른 테이블로 나눈다.

트랜잭션 격리 수준 (isolation level)

트랜잭션 격리수준 개념

  • 트랜잭션 isolation level이란, 동시에 여러 트랜잭션이 처리 될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다.
  • 간단히 말해 특정 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 할지 말지 결정한다.

고립성 수준 4가지

  1. READ UNCOMMITTED
    • 가장 낮은 고립성 수준이다.
    • 다른 트랜잭션에서 변경중인 데이터를 읽을 수 있다.
    • 데이터의 일관성과 무결성을 보장하지 않으며, 다른 트랜잭션에 의해 변경된 데이터를 볼 수 있으므로 사용을 피해야한다.
    • 발생할 수 있는 문제
      - Dirty Read : 한 트랜잭션이 데이터를 변경중이고 다른 트랜잭션이 그 데이터를 읽을 때, 읽은데이터가 나중에 롤백 된 경우 무의미한 데이터를 읽게 될 수 있다.
      • ex) A트랜잭션이 계좌 잔액을 변경중이고, B트랜잭션이 A잔액을 읽었을 떄, A변경 내용이 롤백되면 B는 잘못된 잔액을 읽을 수 있습니다.
  2. READ COMMITTED
    • 대부분의 RDBMS에서 기본적으로 사용되는 고립성 수준이다.
    • 한 트랜잭션에서 변경한 데이터는 다른 트랜잭션에서 읽을 수 없다.
    • 데이터의 일관성을 보장하고, 다른 트랜잭션에 의해 변경된 데이터를 피해 데이터를 읽을 수 있도록 한다.
    • 발생할 수 있는 문제
      - Non-Repeqtable Read : 동일한 쿼리를 두 번 실행할 때, 다른 결과를 얻을 수 있는 경우. 다른 트랜잭션이 데이터를 변경하면 읽은 데이터가 다를 수 있다.
      • ex) A트랜잭션이 상품가격을 조회하고, B트랜잭션이 동일한 상품의 가격을 변경했을 때, A가 다시 조회하면 다른 가격을 얻을 수 있다.
  3. REPEATABLE READ
    • 한 트랜잭션 내에서 쿼리 결과가 항상 동일함을 보장한다.
    • 다른 트랜잭션에서 데이터를 변경하더라도 같은 쿼리를 실행하면 변경내용이 반영되지 않는다.
    • 발생할 수 있는 문제
      - Phantom Read : 동일한 범위의 쿼리를 두번 실행할 떄, 결과 집합에 포함된 행이 다를 수 있는 경우. 다른 트랜잭션이 중간에 행을 추가 또는 삭제하면 발생한다.
      • ex) A트랜잭션이 주문 목록을 조회하고, B트랜잭션이 주문을 추가 했을 때, A가 다시 조회하면 새로운 주문이 나타날 수 있다.
  4. SERIALZABLE
    • 가장 높은 고립성 수준으로, 모든 트랜잭션을 순차적으로 실행하는 것처럼 처리한다.
    • DB 일관성과 무결성을 가장 엄격하게 보장하지만 성능에 영향을 미친다.
    • 발생할 수 있는 문제
      - 위와같은 문제들은 발생하지 않는다. 모든 트랜잭션은 서로에게 영향을 미치지 않으며, 쿼리 결과가 일관적으로 유지된다. 하지만 동시성이 감소되기 떄문에 성능에 영향을 끼칠 수 있다.

INDEX

인덱스 개념

  • RDBMS에서 인덱스란 데이터베이스 테이블의 특정 열에 대한 검색속도를 향상시키기 위한 자료구조이다.
  • 인덱스는 특정 열의 값을 미리 정렬하고, 검색 작업을 빠르게 수행하기 위해 사용된다.
  • DB에서 원하는 데이터를 찾고싶을 떄, 레코드를 전부 하나하나 확인하는 것이 아닌 인덱싱 되어 있는 자료구조를 통해서 검색되기 때문에 검색속도가 빨라지는 것이다.

인덱스 동작과정

  • 일단 인덱스는 효율적인 탐색을 위해 당연하게 데이터 정렬한다.
  • 인덱스는 생성되면 SELECT쿼리문에서 정렬, 조건 등 작업하게되면 옵티마이저의 판단으로 생성된 인덱스를 적용하여 SELECT문이 실행된다.
    - 옵티마이저(Optimizer)
    - 옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 찾아주는 DBMS 핵심 엔진이다.
  • 인덱스는 트리의 형태로 데이터를 보관하고 있다. 인덱스를 정렬해놔도 풀테이블 스캔을 할 필요없이 2번의 질문 만을 원하는 데이터를 찾을 수 있다.
    SS
  • 아보다 더 효율적인 방법으론 B+tree방법을 사용하여 DB의 데이터를 보관한다. 마찬가지로 질문을 통해 데이터를 찾은 뒤, 맨 아래 노드끼리도 화살표를 연결해놓는다. 그러면 범위 검색에 있어 굉장히 효율적이다.

인덱스의 단점

  • 컬럼을 복사해서 정렬해놓는 개념이기 떄문에 정렬할 떄마다 새로운 컬럼이 만들어져 하드 용량이 늘어난다.
  • 기존의 데이터가 삽입 수정 삭제가 일어난다면 인덱스에도 똑같이 반영되어 성능 하락이 발생할 수 있다.
  • 즉, 데이터 갱신보다는 조회에 주로 사용되는 컬럼에 index를 생성하는 것이 유리하다.

KEY

  • RDBMS에서 Key는 데이터베이스 테이블에서 레코드(행)을 식별하고 검색하는데 사용되는 열(속성)또는 열의 조합을 나타낸다. Key는 테이블내의 각 레코드를 고유하게 식별하며 데이터의 일관성을 유지하고 관계를 설정하는데 중요한 역할을 한다.
  • 쉽게말해 인스턴스는 RDBMS에서 튜플(행)을 의미한다. 이러한 행들을 서로 구분 할 수 있게 해주는 속성(열),하나 혹은 그 이상의 집합을 키라고 한다.

최소성과 유일성

최소성

  • 키의 최소성은 해당 키가 레코드를 식별하는데 꼭 필요한 최소한의 열로 구성되어야 함을 의미한다.
  • 불필요한 열을 포함하지 않고 가장 적은 수의 열로 레코드를 고유하게 식별할 수 있어야 한다.
  • 최소성을 만족하지 않을 경우, 키가 불필요하게 복잡해질 수 있고 성능에 영향을 미칠수 있다.

유일성

  • 키의 유일성은 해당 키값이 테이블 내에서 고유하다는 속성을 나타낸다.
  • 즉, 같은 키값을 가지는 레코드가 테이블 내에서 중복되지 않아야 한다.
  • 기본키는 모든 레코드를 고유하게 식별해야 하므로 유일성을 가진다.

Key의 종류

  • key에는 대표적으로 5가지 종류가있다 아래 예시를 보자
ID주민등록번호이름성별
abc123853501-1234568김철수남자
bcc345901012-1124564안상수남자
vdf567870415-2547891김영희여자
asdf1234990213-2589153안태희여자
  1. 기본키(Primary Key)
  • 테이블 내의 각 레코드를 고유하게 식별하는 주요 키이다.
  • 기본 키 열의 값은 NULL이 어니어야 하며 중복될 수 없다.
  • 유일성과 최소성을 만족시키는 키이다.
  • 이 표에선 없지만 보통 유일성과 최소성을 만족시키기 위해 DB자체에서 겹치지않는 새로운 id를 발급한다.
  1. 후보키(Candidate Key)
  • 후보키는 쉽게 말해 기본키가 될 수 있는 키이다.
  • 후보키 또한 유일성과 최소성을 만족시켜야한다.
  1. 대체키(Alternate Key)
  • 기본키로 선택되지 않은 다른 후보키를 말한다.
  • 테이블 내에서 레코드를 고유하게 식별하는 역할을 한다.
  1. 복합키(Composite Key)
  • 복합 키는 여러 열의 조합으로 구성되며 이 열들의 조합이 유일성과 최소성이 만족되는 키이다.
  1. 외래키(Foreign Key)
  • 다른 테이블의 기본키와 관계를 설정하는 키이다.
  • 외래키는 데이터 무결성을 우지하고 데이터베이스 간의 관계를 구축하는데 사용된다.
  • 주문 테이블에서 사용자 ID가 다른 사용자 테이블의 기본키를 참조하는 외래키 일 수 있다.
  1. 슈퍼키(Super Key)
  • 테이블 내의 레코드를 식별할 수 잇는 하나 이상의 열의 조합을 의미한다.
  • 슈퍼 키는 기본키, 대체키 및 일반 키 포함을 할 수 있다.
  • 슈퍼키는 유일성은 만족시키지만 최소성은 만족시키지 못하는 키이다.
profile
우왕좌왕 개발

0개의 댓글