카테고리 없음

[DB] DBMS (Database Management System)

JABHACK 2024. 12. 22. 17:29

DBMS(Database Management System)

📌 데이터베이스를 생성, 관리, 유지보수, 운영하기 위한 소프트웨어입니다. 사용자는 DBMS를 통해 데이터를 효율적으로 저장, 검색, 수정, 삭제하며, 데이터의 일관성과 무결성을 유지할 수 있습니다.

  • 데이터베이스 구조를 정의할 수 있는 기능을 제공한다.

 

DBMS의 역할

  1. 데이터 관리
    • 데이터를 물리적으로 저장하고, 관리하는 역할을 수행한다.
    • 데이터를 저장하기 위한 최적화된 구조와 파일 시스템을 관리합니다.
    • 사용자가 데이터를 다룰 수 있도록 쿼리 언어(SQL)을 제공한다.
  2. 데이터 보안
    • 사용자 권한 관리, 암호화, 감사 로그 등을 통해 데이터를 보호한다.
  3. 트랜잭션 관리
    • DBMS는 여러 사용자가 동시에 데이터에 접근할 때, 데이터의 일관성을 유지하기 위한 트랜잭션 관리 기능을 제공한다.
    • ACID 속성 보장
      • Atomicity: 트랜잭션의 모든 작업이 성공적으로 완료되거나, 실패 시 모든 작업이 롤백
      • Consistency: 트랜잭션이 데이터베이스를 일관된 상태로 유지
      • Isolation: 동시에 실행되는 트랜잭션 간의 영향을 최소화
      • Durability: 트랜잭션이 완료된 후 데이터의 변경 사항은 영구적으로 저장
  4. 백업 및 복구
    • DBMS는 데이터 손실에 대비해 백업 및 복구 기능을 제공한다.
    • 정기적인 백업을 통해 데이터를 보호하며, 장애 발생 시 데이터 복구가 가능하다.
  5. 동시성 제어
    • 다수의 사용자가 동시에 데이터베이스에 접근하더라도 데이터 일관성이 유지되도록 동시성 제어를 제공한다. 이를 통해 충돌이나 데이터 불일치를 방지할 수 있다.

 

 

DBMS의 주요 기능

데이터 정의 (DDL) 데이터베이스 구조(스키마) 정의. 테이블 생성, 수정, 삭제 등을 처리.
데이터 조작 (DML) 데이터를 추가, 검색, 수정, 삭제.
데이터 제어 (DCL) 데이터 접근 권한 및 제어.
트랜잭션 관리 (TCL) 데이터베이스의 일관성과 무결성을 보장하기 위해 트랜잭션을 관리.

 

DBMS의 구조

a. 사용자:

  • 데이터베이스와 상호작용하는 최종 사용자.
  • 애플리케이션, 관리자, 또는 일반 사용자가 포함.

b. DBMS:

  • 데이터베이스를 관리하고 사용자 요청을 처리하는 소프트웨어.

c. 데이터베이스:

  • 데이터가 실제로 저장되는 영역.

 

DBMS의 종류

a. 관계형 데이터베이스 관리 시스템 (RDBMS)

  • 가장 많이 사용하는 데이터베이스
  • 데이터를 테이블 형태로 저장.
  • 테이블 간 관계를 키(Foreign Key)로 정의.
  • SQL(Structured Query Language)을 사용.
  • 예시: MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server.

b. 비관계형 데이터베이스 관리 시스템 (NoSQL DBMS)

  • 테이블이 아닌 key-value, document, graph 등의 다양한 형태로 데이터를 저장하고 관리한다.
  • 스키마가 고정되지 않고, 대규모 데이터 처리와 높은 확장성을 제공한다.
  • 예시: MongoDB, Cassandra, Redis, Neo4j.

c. 분산 데이터베이스 관리 시스템

  • 데이터가 여러 노드에 분산되어 저장.
  • 대규모 데이터를 처리하기 위한 시스템.
  • 예시: Amazon DynamoDB, Google Bigtable.

d. 클라우드 기반 DBMS

  • 클라우드 환경에서 데이터베이스를 관리.
  • 유연성과 확장성이 높음.
  • 예시: AWS RDS, Google Cloud SQL, Azure SQL Database.

 

DBMS의 구성 요소

구성 요소 설명
데이터베이스 엔진 데이터 저장, 검색, 수정, 삭제 등의 핵심 작업 수행.
스키마 데이터베이스 구조 정의.
질의 처리기 SQL 질의를 처리하고 결과 반환.
트랜잭션 관리자 데이터 무결성과 일관성을 유지하며 트랜잭션 관리.
보안 관리자 데이터 접근 제어 및 권한 관리.
백업 및 복구 관리자 데이터 손실 방지 및 복구 작업 수행.

 

DBMS와 파일 시스템의 차이점

  DBMS 파일 시스템
데이터 중복 제거 데이터 중복을 최소화 (정규화). 데이터 중복 가능성이 높음.
데이터 무결성 무결성 제약 조건으로 데이터의 일관성 유지. 무결성 관리가 어렵고 사용자에 의존.
보안성 접근 제어와 인증을 통한 강력한 보안 제공. 파일 수준의 제한적 보안.
트랜잭션 관리 ACID 속성을 통해 트랜잭션 처리. 트랜잭션 관리 기능이 없음.
검색 속도 인덱싱 등으로 고속 데이터 검색 가능. 검색 속도가 느림.

 

 

주요 DBMS 예시

DBMS 설명
MySQL 오픈 소스 관계형 DBMS, 높은 성능과 안정성 제공.
PostgreSQL 고급 기능과 표준 준수를 중시하는 오픈 소스 RDBMS.
Oracle 대기업에서 널리 사용되는 상용 관계형 DBMS.
MongoDB 문서 기반의 NoSQL DBMS.
Redis 키-값 기반의 인메모리 데이터베이스, 빠른 속도를 제공.

 

 

 

트랜잭션(Transaction)

📌 데이터베이스 관리에서 논리적으로 하나의 작업 단위를 의미합니다.

  • 트랜잭션은 여러 작업(쿼리)이 하나의 단위로 묶여 모두 성공하거나, 모두 실패하는 특성을 가집니다.
더보기

 

트랜잭션의 예

a. 은행 계좌 이체 예제

  • A 계좌에서 100원을 출금 → B 계좌에 100원을 입금.
  • 두 작업은 하나의 트랜잭션으로 묶여야 함.

1. 트랜잭션 성공

  1. A 계좌에서 100원 차감.
  2. B 계좌에 100원 추가.
  3. Commit: 두 작업 모두 성공 → 데이터베이스에 반영.

2. 트랜잭션 실패

  1. A 계좌에서 100원 차감.
  2. B 계좌에 입금 실패.
  3. Rollback: 두 작업 모두 취소 → A 계좌의 100원 복원.

트랜잭션의 특징: ACID

트랜잭션은 데이터의 안정성과 무결성을 보장하기 위해 ACID 특성을 만족해야 합니다.

Atomicity (원자성) 트랜잭션의 모든 작업이 모두 성공하거나 모두 실패해야 함.
Consistency (일관성) 트랜잭션 전후 데이터베이스의 상태가 일관성을 유지해야 함.
Isolation (고립성) 동시에 실행되는 트랜잭션이 서로 간섭하지 않도록 독립적으로 실행됨을 보장.
Durability (지속성) 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 반영되어야 함.

 

트랜잭션의 생명주기

  1. Begin:
    • 트랜잭션 시작.
  2. Execute:
    • 트랜잭션 내 작업(쿼리) 실행.
  3. Commit:
    • 트랜잭션 성공 → 작업 내용을 데이터베이스에 반영.
  4. Rollback:
    • 트랜잭션 실패 → 작업 내용을 데이터베이스에서 취소.

 

트랜잭션 격리 수준 (Isolation Level)

트랜잭션 간의 간섭을 최소화하기 위해 격리 수준을 설정합니다.
Spring에서는 @Transactional의 isolation 속성을 사용해 설정합니다.

격리 수준 설명
READ_UNCOMMITTED 다른 트랜잭션의 미완료 데이터를 읽을 수 있음. (Dirty Read 허용)
READ_COMMITTED 다른 트랜잭션이 Commit한 데이터만 읽을 수 있음. (기본값)
REPEATABLE_READ 트랜잭션 내에서 같은 데이터를 여러 번 읽을 때 항상 동일한 값 반환.
SERIALIZABLE 가장 높은 격리 수준. 트랜잭션이 순차적으로 실행되며 교차 작업 불가.

 

 

Spring에서 트랜잭션 관리

더보기

Spring은 트랜잭션 관리를 위한 간단하고 강력한 기능을 제공합니다.
주로 @Transactional 어노테이션을 사용합니다.

 

a. 기본 사용법

@Service
public class BankService {

    private final AccountRepository accountRepository;

    public BankService(AccountRepository accountRepository) {
        this.accountRepository = accountRepository;
    }

    @Transactional
    public void transferMoney(Long fromAccountId, Long toAccountId, int amount) {
        Account fromAccount = accountRepository.findById(fromAccountId).orElseThrow();
        Account toAccount = accountRepository.findById(toAccountId).orElseThrow();

        fromAccount.withdraw(amount);  // 출금
        toAccount.deposit(amount);    // 입금

        accountRepository.save(fromAccount);
        accountRepository.save(toAccount);
    }
}

@Transactional:

  • 메서드 내의 모든 작업이 하나의 트랜잭션으로 처리.
  • 하나라도 실패하면 Rollback.

 

Rollback 처리

Spring에서 특정 예외 발생 시 트랜잭션을 Rollback합니다.

예외 처리 예제

@Transactional(rollbackFor = CustomException.class)
public void processTransaction() throws CustomException {
    // 작업 실행
    if (errorCondition) {
        throw new CustomException("Error occurred");
    }
    // 다른 작업 실행
}
  • rollbackFor: 특정 예외 발생 시 Rollback 설정.
  • 기본적으로 RuntimeException이나 Error가 발생하면 Rollback.

 

관계형 데이터베이스 ( RDB )

📌 데이터를 테이블(Table) 형태로 저장하고, 관계(Relationship)를 통해 데이터를 연결하여 관리하는 데이터베이스입니다. 관계형 모델을 기반으로 설계되었으며, 데이터를 행(Row)과 열(Column)의 구조로 저장합니다.

  • RDB는 주로 **SQL(Structured Query Language)**을 사용하여 데이터를 정의, 관리, 검색합니다.

 

RDB 설계 시 주요 개념

a. 정규화(Normalization)

  • 데이터 중복을 최소화하고 데이터 구조를 최적화.

b. 비정규화(Denormalization)

  • 성능 향상을 위해 일부 데이터 중복 허용.

c. 키(Key)

  • Primary Key: 테이블의 각 행을 고유하게 식별.
  • Foreign Key: 다른 테이블의 Primary Key를 참조.

d. 인덱스(Index)

  • 데이터 검색 속도를 향상시키는 구조.

e. 뷰(View)

  • 실제 데이터 없이 쿼리 결과를 저장하는 가상 테이블.

 

RDBMS와의 관계

**RDB(Relational Database)**는 관계형 데이터 모델을 기반으로 설계된 데이터베이스이며, 이를 관리하는 소프트웨어를 **RDBMS(Relational Database Management System)**라고 합니다.

RDB 관계형 데이터 모델에 따라 설계된 데이터베이스.
RDBMS RDB를 생성, 관리, 유지보수하는 소프트웨어 시스템.
SQL RDB와 RDBMS에서 데이터를 처리하기 위해 사용하는 언어.

 

RDB의 데이터 모델

a. 1:1 관계

  • 한 테이블의 행이 다른 테이블의 행과 1:1로 매핑.
  • 예: 사람(Person) ↔ 여권(Passport)

b. 1:N 관계

  • 한 테이블의 행이 다른 테이블의 여러 행과 매핑.
  • 예: 사용자(User) ↔ 주문(Order)

c. N:M 관계

  • 두 테이블의 여러 행이 서로 다수의 행과 매핑.
  • 예: 학생(Student) ↔ 수업(Class)

 

+ 해결 방법: 중간 테이블(Join Table) 사용.

  • 학생(Student) ↔ 수강 기록(Student_Class) ↔ 수업(Class)

 

 

관계형 데이터베이스 특징

 

테이블 (Table)

 

  • RDBMS에서 데이터는 테이블이라는 구조에 저장되며 행(row)과 열(column)로 구성된다.
  • 열(column)은 데이터의 속성(유일한 이름)을 나타내고 타입(데이터 유형)을 가진다.
  • 행(row)은 관계된 데이터의 묶음을 의미하고 tuple 또는 record라고 한다.
  • 데이터 무결성
    • 테이블은 특정 규칙과 제약 조건(기본 키, 외래 키, 유니크 등)을 통해 데이터를 저장함으로써 데이터의 무결성(정확성, 일관성, 유효성)을 유지한다.

 

관계 (Relationships)

  • 테이블 간의 관계는 외래 키(Foreign Key)를 통해 설정된다.
  • RDBMS는 다양한 유형의 관계를 지원한다.
    • 1:1 관계: 한 테이블의 한 행이 다른 테이블의 한 행과만 연결된다.
    • 1:다 관계: 한 테이블의 한 행이 다른 테이블의 여러 행과 연결된다.(위 예시와 같음)
    • 다:다 관계: 두 테이블의 여러 행이 서로 연결될 수 있다.

 

SQL (Structured Query Language)

  • RDBMS에서 데이터를 정의하고, 관리하기 위한 표준 언어이다.
  • 데이터를 생성(Create), 읽기(Read), 갱신(Update), 삭제(Delete)하는 작업을 수행한다.

 

키 (Keys)

  • 기본 키(Primary Key)
    • 테이블 내에서 각 행을 고유하게 식별하는 열 또는 열의 조합이다.
    • 기본 키는 중복되지 않으며, NULL 값을 가질 수 없다.
  • 외래 키(Foreign Key)
    • 한 테이블의 열이 다른 테이블의 기본 키를 참조하여 두 테이블 간의 관계를 설정하는 데 사용된다.
    • 테이블 간의 데이터 무결성을 유지할 수 있다.
  • 유일 키(Unique Key)
    • 기본 키와 유사하지만, 하나의 테이블에서 여러 개가 존재할 수 있다.
    • 중복된 값을 허용하지 않지만, NULL 값은 허용할 수 있다.

 

트랜잭션(Transaction)

  • RDBMS는 트랜잭션이라는 단위를 통해 데이터베이스 작업을 처리하며, 이를 통해 데이터의 일관성과 무결성을 유지한다.
  • 트랜잭션은 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)이라는 ACID 속성을 따른다.
    • Atomicity: 트랜잭션의 모든 작업이 성공적으로 완료되거나, 실패 시 모든 작업이 롤백
    • Consistency: 트랜잭션이 데이터베이스를 일관된 상태로 유지
    • Isolation: 동시에 실행되는 트랜잭션 간의 영향을 최소화
    • Durability: 트랜잭션이 완료된 후 데이터의 변경 사항은 영구적으로 저장

 

정규화 (Normalization)

  • 데이터의 중복을 줄이고, 일관성과 무결성을 유지하기 위해 데이터를 구조화하는 프로세스이다.
  • 여러가지 정규화 단계가 있으며, 각 단계는 데이터 중복을 줄이고 이상 현상을 방지하는 데 목적이 있다.

 

데이터 무결성 (Data Integrity)

  • 엔터티 무결성
    • 각 테이블의 기본 키(PK)가 중복되지 않고 NULL 값이 아닌 상태를 유지한다.
  • 참조 무결성
    • 외래 키(FK)를 통해 참조되는 데이터가 유효성을 유지하도록 보장한다.
  • 도메인 무결성
    • 각 열이 정의된 데이터 타입과 제약 조건에 따라 유효한 값을 유지하도록 한다.

 

인덱스 (Index)

  • 특정 열의 검색 성능을 향상시키기 위해 사용된다.
  • 인덱스는 테이블의 데이터를 정렬하고, 효율적으로 접근할 수 있도록 지원한다.
  • 인덱스가 많아지면 삽입 및 수정 작업의 성능에 영향을 미칠 수 있다.

 

 

RDBMS

📌 관계형 데이터베이스 RDB(Relational DataBase)를 관리할 수 있는 소프트웨어로 데이터를 테이블 형식으로 관리한다. RDBMS는 데이터 간의 관계를 정의하고, 이러한 관계를 바탕으로 복잡한 Query를 실행할 수 있는 기능을 제공한다.

  • RDBMS는 관계형 모델을 기반으로 데이터의 일관성, 무결성, 동시성을 보장합니다.

 

RDBMS의 특징

  1. 테이블 기반:
    • 데이터를 행(Row)과 열(Column)로 구성된 테이블에 저장.
    • 테이블은 데이터베이스 내에서 독립적으로 관리.
  2. SQL 사용:
    • 데이터를 관리하기 위해 SQL(Structured Query Language) 사용.
  3. 키(Key)와 관계(Relationship):
    • 기본 키(Primary Key)와 외래 키(Foreign Key)를 통해 데이터 무결성 및 테이블 간 관계를 관리.
  4. 데이터 무결성:
    • 데이터가 정확하고 일관되도록 보장.
  5. 트랜잭션 지원:
    • 트랜잭션을 통해 작업의 원자성, 일관성, 고립성, 지속성을 보장 (ACID 특성).

 

 

RDBMS의 구성 요소

a. 테이블 (Table)

  • 데이터 저장 구조.
  • 행(Row)과 열(Column)로 구성.
  • 각 열은 속성(Attribute), 각 행은 레코드(Record).

b. 열(Column)

  • 테이블의 필드(Field).
  • 데이터의 유형과 속성을 정의.

c. 행(Row)

  • 각 행은 데이터의 한 개체(Entity)를 나타냄.

d. 기본 키 (Primary Key)

  • 테이블의 각 행을 고유하게 식별하는 열.

e. 외래 키 (Foreign Key)

  • 다른 테이블의 기본 키를 참조하여 테이블 간 관계를 정의.

f. 인덱스 (Index)

  • 데이터 검색 속도를 높이기 위해 사용하는 구조.

 

주요 RDBMS 예시

RDBMS 특징
MySQL 오픈 소스 RDBMS, 높은 성능과 안정성 제공.
PostgreSQL 오픈 소스 RDBMS, 고급 기능과 확장성 제공.
Oracle Database 상용 RDBMS, 대규모 데이터 처리와 강력한 보안 제공.
Microsoft SQL Server Microsoft에서 제공하는 상용 RDBMS, 윈도우 환경에 최적화.
SQLite 경량형 RDBMS, 모바일 및 임베디드 환경에 적합.

 

 

RDBMS와 NoSQL 비교

  RDBMS NoSQL
데이터 구조 테이블 (행과 열) 문서, 키-값, 컬럼, 그래프 등 다양한 형태.
스키마 고정 스키마 필요 스키마 유연.
데이터 관계 기본 키와 외래 키로 관계 정의 관계를 덜 중요시하거나 애플리케이션에서 관리.
확장성 수직 확장에 적합 수평 확장에 적합.
사용 사례 금융, ERP, CRM 등 일관성과 무결성이 중요한 애플리케이션 소셜 네트워크, IoT, 대규모 데이터 처리.

 

 

 

SQL(Structured Query Language)

📌 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 정의, 조작, 제어, 조회하기 위해 사용되는 표준 프로그래밍 언어이다.

 

SQL 특징

  • 관계형 데이터베이스와의 상호작용을 표준화하고 효율적으로 수행할 수 있게 해준다.
    • 데이터베이스에서 원하는 정보를 추출하고 분석할 수 있게 해준다.
  • 대부분의 RDBMS(MySQL, PostgreSQL, Oracle 등)가 SQL을 지원한다.
  • 주의! 표준 SQL은 존재하지만, 제품마다 조금씩의 차이(함수명)가 존재한다.
  • SQL 명령문은 대소문자를 구분하지 않고, 대문자로 사용하면 가독성이 향상되어 오타를 방지한다.

 

SQL 종류

DDL(Data Definition Language)

  • 데이터베이스 구조를 정의하는 데 사용된다.
  • CREATE
    • 새로운 데이터베이스 및 테이블을 생성한다.
  • ALTER
    • 기존 데이터베이스 및 테이블 구조를 수정한다.
  • DROP
    • 데이터베이스 및 테이블을 삭제한다.

DML(Data Manipulation Language)

  • 데이터베이스의 데이터를 조작하는 데 사용된다.
  • INSERT
    • 데이터를 테이블에 삽입한다.
  • UPDATE
    • 테이블의 기존 데이터를 수정한다.
  • DELETE
    • 테이블의 데이터를 삭제한다.

DQL(Data Query Language)

  • 데이터베이스에서 데이터를 검색하는 데 사용된다.
  • SELECT
    • 데이터를 조회한다. 특정 조건을 추가할 수 있다.

DCL(Data Control Language)

  • 데이터베이스의 권한을 관리하는 데 사용된다.
  • GRANT
    • 사용자에게 권한을 부여한다.
  • REVOKE
    • 사용자의 권한을 회수한다.

TCL(Transaction Control Language)

  • 여러 DML 작업을 하나의 논리적 단위로 묶어 트랜잭션으로 처리하는 데 사용된다.
  • COMMIT
    • 트랜잭션이 성공한 것을 데이터베이스에 알리고 모든 변경 사항을 영구적으로 저장한다.
  • ROLLBACK
    • 트랜잭션 중 발생한 모든 변경 사항을 취소하고, 데이터베이스를 트랜잭션 시작 시점의 상태로 되돌린다.

 

SQL의 주요 개념

a. 키(Key)

  • Primary Key (기본 키):
    • 테이블에서 각 행(row)을 고유하게 식별하는 하나 이상의 열(column)에 설정되는 제약조건
      • 중복된 데이터가 테이블에 삽입되는 것을 방지한다.
  • NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가진다.
    • INDEX로 설정되어 테이블의 데이터를 쉽고 빠르게 찾도록 도와주는 역할을 한다.
      • 추가적인 쓰기 작업과 저장 공간을 활용하여 검색 속도를 향상시키기 위한 자료구조
CREATE TABLE students (
    id BIGINT PRIMARY KEY,               -- 학생 고유 번호 (자동 증가)
    name VARCHAR(50) NOT NULL,           -- 이름
    email VARCHAR(100) NOT NULL UNIQUE,  -- 이메일
    PRIMARY KEY (id)                     -- PRIMARY KEY 설정
);
    •  
  • Foreign Key (외래 키):
    • 한 테이블의 열이 다른 테이블의 PRIMARY KEY(또는 UNIQUE 제약 조건이 적용된 열)를 참조하도록 설정한다.
      • 참조된 테이블의 데이터가 변경되거나 삭제될 때 참조 무결성을 강제할 수 있다.
        • 외래 키 값은 반드시 참조하는 테이블의 기본 키로 존재해야 한다.
        • 부모 테이블의 데이터가 변경되거나 삭제될 때 자식 테이블에 있는 데이터도 자동으로 업데이트되거나 삭제되도록 보장한다.(CASCADE)
    • 다른 테이블의 Primary Key를 참조.
    • 테이블 간 관계를 정의.
CREATE TABLE 테이블이름
(
    필드이름 필드타입,
    ...
		FOREIGN KEY(필드이름)
    REFERENCES 테이블이름(필드이름)
);

 

  • CASCADE
    • 참조 무결성을 유지하기 위한 동작을 정의하는 규칙
    • 외래 키(Foreign Key) 제약 조건과 관련된 변경 사항이 발생할 때 참조하는 레코드에 대한 동작을 자동으로 처리하는 기능
      • FOREIGN KEY 로 연관된 데이터를 삭제,변경할 수 있다.
CREATE TABLE 테이블이름
(
    필드이름 필드타입,
    ...
		FOREIGN KEY(필드이름)
    REFERENCES 테이블이름(필드이름) ON DELETE CASCADE 
														 //ON UPDATE CASCADE
);


1. `ON DELETE CASCADE`
    - 부모 테이블의 행이 삭제되면, 참조하는 자식 테이블의 관련 행들도 자동으로 삭제한다.
    
2. `ON UPDATE CASCADE`
    - 부모 테이블의 기본 키가 업데이트되면, 참조하는 자식 테이블의 외래 키 값도 자동으로 수정된다.
  • DEFAULT
    • 해당 필드의 기본 값을 설정한다.
    • 필드 값이 전달되지 않으면, 자동으로 기본 값을 저장한다.
CREATE TABLE 테이블이름
(
    필드이름 필드타입 DEFAULT 값
);
  • Unique Key:
    • 중복되지 않는 고유한 값을 유지.

 

b. 제약 조건(Constraints)

  • 데이터 무결성을 유지하기 위한 규칙.
    • AUTO_INCREMENT : 고유번호 자동생성(컬럼의 값이 중복되지 않게 1씩 자동으로 증가)
    • NOT NULL: NULL 값 불가.
    • UNIQUE: 중복 값 불가.
    • CHECK: 특정 조건 만족.
    • DEFAULT: 기본값 설정.
    • FOREIGN KEY: 테이블 간 관계 설정.
-- users 테이블 생성
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,       -- 고유번호 자동생성 (Primary Key 포함)
    name VARCHAR(100) NOT NULL,              -- 이름은 NULL 값 불가
    email VARCHAR(100) UNIQUE NOT NULL,      -- 이메일은 중복 불가 및 NULL 값 불가
    age INT CHECK (age >= 18),               -- 나이는 18세 이상이어야 함
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 기본값으로 현재 시간 설정
);

-- orders 테이블 생성
CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,       -- 고유번호 자동생성 (Primary Key 포함)
    user_id INT NOT NULL,                    -- 사용자 ID (외래 키)
    amount DECIMAL(10, 2) CHECK (amount > 0),-- 금액은 0보다 커야 함
    order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 주문 날짜 기본값
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE -- users 테이블과 관계 설정, 사용자 삭제 시 주문도 삭제
);
  • 데이터 무결성
    • 데이터의 정확성, 일관성, 완전성을 유지하는 것
      1. 정확성: 데이터가 올바르고 오류 없이 저장되는 것을 의미한다.
      ex) 숫자로 저장되어야 하는 값이 문자로 저장되지 않도록 하는 것.
      1. 일관성: 데이터가 서로 모순되지 않고 조화를 이루는 상태를 유지하는 것을 의미한다.
      ex) 외래 키 제약 조건을 통해 두 테이블 간의 관계가 일치하는 것을 보장하는 것.
      1. 완전성: 필요한 모든 데이터가 빠짐없이 저장되고 관리되는 것을 의미한다.
      ex) 필수 입력 항목이 비어 있지 않도록 하는 것.
    • 즉, 데이터가 입력, 저장, 전송, 처리되는 동안 변경되거나 손상되지 않도록 보장하는 개념

 

c. JOIN

  • 두개 이상의 테이블을 연결하여 데이터를 검색하는 방법
  • 테이블을 분리하여 데이터 중복을 최소화하고 데이터의 일관성을 유지하기 위해 사용된다.
  • JOIN 종류
  • 여러 테이블의 데이터를 결합하여 조회.

  1. INNER JOIN
    • 두 테이블에서 공통된 값을 가지고 있는 행만 반환한다.
      • ON 절의 조건이 일치하는 결과
    • MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미이다.
    • 교집합
  2. LEFT JOIN
    • 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환한다.
      • ON 절의 조건 중 첫번째 테이블인 왼쪽(기준)의 데이터를 모두 가져온다.
    • 오른쪽 테이블에 일치하는 데이터가 없으면 NULL로 반환한다.
    • JOIN을 여러번 사용하는 경우 LEFT JOIN으로 시작했다면 이후 JOIN도 LEFT JOIN으로 해야한다.
    • 부분 집합(왼쪽 테이블)
  3. RIGHT JOIN
    • 오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환한다.
      • ON 절의 조건 중 두번째 테이블인 오른쪽(기준)의 데이터를 모두 가져온다.
    • 왼쪽 테이블에 일치하는 데이터가 없으면 NULL로 반환한다.
    • 부분 집합(오른쪽 테이블)
  4. OUTER JOIN
    • 두 테이블에서 공통된 값을 가지지 않는 행도 포함해서 반환한다.
    • 합집합
    • LEFT OUTTER JOIN, RIGHT OUTTER JOIN, FULL OUTTER JOIN(잘 사용하지 않음) 이 있다.
    • 대부분의 DB는 FULL OUTTER JOIN을 지원하지 않고 UNION을 사용하도록 한다.
      • UNION을 사용하면 자동으로 중복을 제거(DISTICT)해준다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 

 

📌 

  •  

 

 


 

 

 🐳 

  •  

 

 

 

 🐳 

  •  

 

 

 

 🐳 

  •  

 

 


 

소제목 

🧩 부모 타입 변수 = 자식 타입 객체; 는 자동으로 부모 타입으로 변환이 일어납니다.

 


 

소제목 

🎵 클래스가 설계도라면 추상 클래스는 미완성된 설계도입니다.