Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자공부일기

RDBS, MySQL 본문

TIL(Today I Learned)

RDBS, MySQL

JavaCPP 2024. 11. 22. 20:08

RDBMS (Relational Database Management System)

RDBMS는 데이터를 구조적으로 관리하는 소프트웨어 시스템으로, 데이터를 테이블 기반으로 저장, 조회, 수정, 삭제하는 기능을 제공합니다. 관계형 모델을 기반으로 하며, 데이터를 관리하는 데 있어 SQL(Structured Query Language)을 사용하는 것이 핵심입니다.

1. RDBMS의 핵심 개념

  • 테이블(Table): 데이터를 저장하는 기본 단위로, 행과 열로 구성됩니다.
    • 행(Row): 데이터의 한 레코드. 각 행은 특정 데이터를 나타냅니다.
    • 열(Column): 속성을 나타냅니다. 예를 들어, "이름", "나이", "주소" 같은 필드가 열로 표현됩니다.
  • 기본 키(Primary Key): 각 행을 고유하게 식별하는 열입니다. 중복되지 않는 고유값을 보장합니다.
  • 외래 키(Foreign Key): 다른 테이블과 관계를 맺기 위해 사용하는 키입니다. 특정 테이블의 열이 다른 테이블의 기본 키를 참조합니다.
  • 관계(Relationship): 테이블 간 데이터를 연결하기 위해 설정된 구조입니다.
    • 1:1 관계
    • 1:N 관계
    • N:N 관계 (일반적으로 중간 테이블을 사용)

2. RDBMS의 주요 기능

  1. 데이터 무결성: 데이터를 일관성 있고 정확하게 유지합니다.
    • 참조 무결성(Referential Integrity): 외래 키 관계에서 데이터가 무효가 되지 않도록 보장합니다.
    • 도메인 무결성(Domain Integrity): 각 열에 대해 정의된 데이터 타입과 제약 조건을 따릅니다.
  2. 데이터 보안: 사용자 권한에 따라 데이터를 읽거나 수정할 수 있도록 제한합니다.
  3. 트랜잭션 관리: 데이터 작업이 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)을 만족하도록 관리합니다. 이를 ACID 속성이라 합니다.
  4. SQL 지원: 데이터를 생성, 조회, 수정, 삭제할 때 표준 언어인 SQL을 사용합니다.

MySQL

MySQL은 RDBMS의 한 구현체입니다. 관계형 데이터베이스 관리 시스템의 원칙을 따르며, 웹 애플리케이션과 같은 다양한 소프트웨어에서 데이터를 관리하는 데 사용됩니다.

1. MySQL의 특징

  1. 오픈 소스
    • 누구나 무료로 사용할 수 있으며, 소스 코드를 수정하여 사용할 수도 있습니다.
    • 상업적 라이선스도 제공되므로 대규모 엔터프라이즈 환경에서도 사용 가능합니다.
  2. 빠른 성능
    • 읽기/쓰기 작업에서 높은 성능을 발휘하며, 특히 대규모 데이터 처리가 필요한 웹 애플리케이션에 적합합니다.
  3. SQL 지원
    • 표준 SQL을 대부분 지원하며, MySQL만의 추가 기능도 제공됩니다.
  4. 플랫폼 독립성
    • Windows, macOS, Linux 등 다양한 운영 체제에서 실행됩니다.
  5. 다양한 스토리지 엔진 지원
    • MySQL은 여러 스토리지 엔진을 제공하여 사용 목적에 맞는 엔진을 선택할 수 있습니다.
      • InnoDB: 트랜잭션 지원, 외래 키 지원 등으로 데이터 무결성을 보장.
      • MyISAM: 빠른 읽기 작업에 최적화.
      • MEMORY: 데이터를 메모리에 저장하여 빠른 속도 제공.

2. MySQL의 구조

  1. 클라이언트-서버 아키텍처
    • 클라이언트(사용자)가 SQL 쿼리를 요청하면, MySQL 서버가 이를 처리하고 결과를 반환합니다.
  2. MySQL의 주요 구성 요소
    • SQL Parser: SQL 명령을 해석.
    • Query Optimizer: SQL 쿼리 실행 계획을 최적화.
    • 스토리지 엔진: 데이터를 실제로 저장하고 관리.
  3. 다중 사용자 지원
    • 여러 사용자가 동시에 데이터베이스에 접근하여 데이터를 처리할 수 있습니다.

 

관계형 데이터베이스의 관계(Relationship)

관계두 테이블 간의 논리적 연결을 말합니다. 관계는 데이터베이스 내에서 테이블들이 데이터를 서로 참조하거나 연결하는 방식을 정의합니다. 관계형 데이터베이스의 핵심은 이러한 관계를 통해 데이터를 효율적으로 관리하고 중복을 줄이는 데 있습니다.


1. 관계의 종류

데이터베이스에서 테이블 간의 관계는 아래 세 가지 유형으로 나뉩니다.

(1) 1:1 관계 (One-to-One)

  • 정의: 한 테이블의 한 행이 다른 테이블의 한 행과만 연결됩니다.
  • 사용 사례: 데이터를 분리하여 보안을 강화하거나, 속성별로 데이터를 나눌 때 사용.
    • 예) 사용자 테이블과 사용자 프로필 테이블
      • users 테이블: 사용자 ID, 이름, 이메일 등 기본 정보 저장
      • user_profiles 테이블: 주소, 생일 등 추가 정보 저장
 

users 테이블


user_id name email
1 Alice alice@gmail.com
2 Bob bob@naver.com

user_profiles 테이블


user_id address birth_date
1 123 Main St 1990-01-01
2 456 Elm St 1985-02-02

연결: users.user_id ↔ user_profiles.user_id (1:1 관계)

(2) 1:N 관계 (One-to-Many)

  • 정의: 한 테이블의 한 행이 다른 테이블의 여러 행과 연결됩니다.
  • 사용 사례: 주로 부모-자식 관계를 표현할 때 사용.
    • 예) 고객 테이블과 주문 테이블
      • customers 테이블: 고객 정보 저장
      • orders 테이블: 각 고객이 주문한 상품 기록
 

customers 테이블


customer_id name
1 Alice
2 Bob

orders 테이블


order_id customer_id product_name
101 1 Laptop
102 1 Mouse
103 2 Keyboard

연결: customers.customer_id ↔ orders.customer_id (1:N 관계)

  • Alice는 두 개의 주문(Laptop, Mouse)을 했으므로 하나의 고객이 여러 주문과 연결됩니다.

(3) N:M 관계 (Many-to-Many)

  • 정의: 한 테이블의 여러 행이 다른 테이블의 여러 행과 연결됩니다.
  • 사용 사례: 테이블 간 다대다 관계를 표현하기 위해 **중간 테이블(교차 테이블, Join Table)**을 사용합니다.
    • 예) 학생 테이블과 강좌 테이블
      • students 테이블: 학생 정보 저장
      • courses 테이블: 강좌 정보 저장
      • 중간 테이블 enrollments: 학생과 강좌 간의 등록 정보를 저장
 
  • students 테이블
    student_id name
    1 Alice
    2 Bob
    courses 테이블
    course_id course_name
    101 Math
    102 Science
    enrollments 테이블 (중간 테이블)
    student_id course_id
    1 101
    1 102
    2 101
    연결:
    • students.student_id ↔ enrollments.student_id (1:N 관계)
    • courses.course_id ↔ enrollments.course_id (1:N 관계)
      결과적으로: students ↔ courses (N:M 관계)

2. 관계 설정 방법

관계를 설정하기 위해 **외래 키(Foreign Key)**를 사용합니다.
외래 키는 한 테이블의 열(column)이 다른 테이블의 기본 키(primary key)를 참조하도록 정의합니다.

(1) 외래 키 생성 (MySQL 예제)

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    product_name VARCHAR(50),
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
  • orders.customer_id는 customers.customer_id를 참조하므로 두 테이블이 연결됩니다.

(2) 외래 키로 데이터 삽입 시 제약

외래 키가 설정된 경우, 아래와 같은 제약 조건이 적용됩니다.

  • 부모 테이블에 없는 값을 자식 테이블에 삽입할 수 없음.
  • 부모 테이블의 데이터를 삭제하면 자식 테이블 데이터도 영향을 받을 수 있음(ON DELETE 옵션으로 설정 가능).

예제:

INSERT INTO customers (customer_id, name) VALUES (1, 'Alice');
INSERT INTO orders (order_id, customer_id, product_name) VALUES (101, 1, 'Laptop'); -- 성공

INSERT INTO orders (order_id, customer_id, product_name) VALUES (102, 999, 'Mouse'); -- 오류 발생
-- 오류: customer_id 999는 customers 테이블에 존재하지 않음.

3. 테이블 간 관계를 SQL로 표현하기

(1) 테이블 조인 (Join)

테이블 간 관계를 SQL에서 사용하려면 JOIN 구문을 사용합니다.

  • INNER JOIN: 두 테이블에서 일치하는 행만 반환
  • LEFT JOIN: 왼쪽 테이블의 모든 행과 일치하는 오른쪽 테이블 행 반환
  • RIGHT JOIN: 오른쪽 테이블의 모든 행과 일치하는 왼쪽 테이블 행 반환

예제:
고객과 주문 정보를 연결

SELECT customers.name, orders.product_name
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id;

4. RDBMS에서 관계의 이점

  1. 데이터 중복 최소화
    • 관계를 통해 데이터를 분리 저장하여 중복 데이터를 줄이고 저장 공간을 절약합니다.
  2. 데이터 무결성 유지
    • 외래 키와 제약 조건을 통해 잘못된 데이터 입력을 방지합니다.
  3. 유연한 데이터 조회
    • 관계를 통해 복잡한 데이터 조회가 가능하며, 필요한 데이터를 효율적으로 가져올 수 있습니다.
  4. 확장성
    • 새로운 테이블이나 데이터를 추가하여 시스템을 확장하기 쉽습니다.