24.12.11 TIL RDBMS

신성훈·2024년 12월 11일

TIL

목록 보기
97/162

1. RDBMS(Relational Database Management System)란?

RDBMS는 데이터를 테이블 형식으로 관리하는 데이터베이스 관리 시스템입니다. 테이블 간의 관계를 정의하고 데이터를 구조적으로 관리할 수 있어 효율적인 데이터 저장과 검색이 가능합니다.

  • 대표적인 RDBMS: MySQL, PostgreSQL, Oracle, Microsoft SQL Server 등

2. 주요 개념

1) 테이블

  • 데이터가 행(row)과 열(column)로 구성된 구조

  • 예: users 테이블

    IDNameAge
    1Alice25
    2Bob30

2) 스키마(Schema)

  • 데이터베이스의 구조와 제약 조건을 정의하는 청사진
  • 테이블, 열의 데이터 타입, 기본 키, 외래 키 등을 포함

3) 키(Key)

  • 기본 키(Primary Key): 각 행을 고유하게 식별하는 열
  • 외래 키(Foreign Key): 다른 테이블과의 관계를 나타내는 키
    • 예: orders 테이블의 user_idusers 테이블의 ID를 참조

4) 관계(Relation)

  • 테이블 간의 연관성을 정의
    • 예: users 테이블과 orders 테이블이 1:N 관계

3. RDBMS의 주요 특징

  1. ACID 특성
    RDBMS는 트랜잭션의 무결성을 보장하기 위해 ACID 특성을 따릅니다

    • Atomicity: 트랜잭션은 모두 성공하거나 모두 실패
    • Consistency: 트랜잭션 전후 데이터 일관성 유지
    • Isolation: 트랜잭션 간 간섭 방지
    • Durability: 트랜잭션이 완료되면 데이터는 영구적으로 저장
  2. SQL 지원
    데이터를 정의하고 조작하기 위해 SQL(Structured Query Language)을 사용

  3. 데이터 무결성
    제약 조건(Constraints)을 통해 데이터의 정확성과 일관성을 유지

    • 예: NOT NULL, UNIQUE, PRIMARY KEY 등
  4. 다중 사용자 지원
    여러 사용자가 동시에 데이터에 접근할 수 있도록 동시성 제어 기능 제공


4. RDBMS 사용의 장점과 단점

장점

  • 데이터 무결성 보장: 키와 제약 조건으로 데이터 일관성 유지
  • 복잡한 쿼리 처리: SQL을 통해 다양한 데이터 검색 가능
  • 관계 관리: 테이블 간 관계를 쉽게 설정

단점

  • 확장성의 한계: 대규모 데이터 처리에서 NoSQL보다 성능이 낮을 수 있음
  • 복잡성 증가: 데이터 모델링이 복잡할 수 있음

5. RDBMS 설계 시 고려사항

  1. 정규화
    데이터를 중복 없이 구조화하여 저장 공간 절약과 무결성 보장

    • 예: 중복 데이터 제거를 위해 테이블을 분리
  2. 인덱스
    검색 성능을 향상시키기 위해 특정 열에 인덱스를 설정

    • 단, 너무 많은 인덱스는 쓰기 성능에 영향을 줄 수 있음
  3. 트랜잭션 관리
    트랜잭션 간 충돌을 방지하기 위해 격리 수준(Isolation Level) 설정

  4. 스키마 설계
    애플리케이션의 요구사항을 기반으로 테이블과 관계를 설계


6. RDBMS 사용 예시 (MySQL 기준)

테이블 생성

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT
);

데이터 삽입

INSERT INTO users (name, age) VALUES ('Alice', 25);

데이터 조회

SELECT * FROM users WHERE age > 20;

데이터 업데이트

UPDATE users SET age = 26 WHERE name = 'Alice';

7. 마무리

RDBMS는 데이터를 구조적으로 관리하고 관계를 통해 효율적으로 활용할 수 있는 강력한 도구입니다. 설계 단계에서 ERD를 활용해 테이블과 관계를 명확히 정의하는 것이 중요하며, 트랜잭션과 인덱스를 적절히 활용하면 성능 최적화도 가능합니다. 이번 학습을 통해 정규화와 SQL 쿼리 작성 능력을 더 향상시킬 수 있었습니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글