데이터베이스 스키마

IT 위키

데이터베이스 스키마(Database Schema)는 데이터베이스의 구조를 정의하는 청사진 또는 모델이다. 스키마는 데이터베이스 내의 테이블, 열, 데이터 타입, 관계 및 제약조건 등을 포함하여 데이터가 어떻게 조직되고 저장될지를 설명한다.

구성 요소[편집 | 원본 편집]

  1. 테이블 (Tables):
    • 데이터를 저장하는 기본 단위이다. 각각의 테이블은 특정 주제나 개체를 나타낸다.
    • 예: Employees, Departments, Products
  2. 열 (Columns):
    • 각 테이블의 필드를 정의한다. 열은 테이블 내의 개별 데이터 항목을 나타낸다.
    • 예: employee_id, name, department_id, salary
  3. 데이터 타입 (Data Types):
    • 각 열에 저장될 수 있는 데이터의 종류를 정의한다. 데이터 타입은 텍스트, 숫자, 날짜, 불리언 등 다양한 형식이 있다.
    • 예: VARCHAR, INT, DATE, BOOLEAN
  4. 관계 (Relationships):
    • 테이블 간의 연관성을 정의한다. 관계는 주로 **외래 키 (Foreign Key)**를 통해 설정된다.
    • 예: Employees.department_idDepartments.department_id를 참조하는 경우.
  5. 제약조건 (Constraints):
    • 데이터의 무결성을 유지하기 위해 적용되는 규칙이다. 제약조건은 특정 열의 데이터가 특정 조건을 만족해야 함을 보장한다.
    • 예: PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL

스키마의 레벨과 독립성[편집 | 원본 편집]

아래와 같이 스키마를 3단계(level)로 구분하고 각각 독립적으로 동작하는 것을 데이터베이스나 스키마의 독립성이라고 지칭한다.

  1. 물리적 스키마 (Physical Schema / Internal Level):
    • 데이터베이스의 실제 저장 구조와 접근 방법을 정의한다. 물리적 스키마는 데이터가 어떻게 디스크에 저장되는지와 관련이 있다.
  2. 논리적 스키마 (Logical Schema / Conceptual Level):
    • 데이터의 구조를 정의하지만, 실제 저장 방식에 대한 정보는 포함하지 않는다. 논리적 스키마는 테이블, 열, 데이터 타입 및 관계를 설명한다.
  3. 뷰 (Views / External Level):
    • 특정 쿼리의 결과를 저장하는 가상의 테이블이다. 데이터의 특정 하위 집합을 쉽게 접근할 수 있도록 도와준다.

스키마 예시[편집 | 원본 편집]

다음은 간단한 데이터베이스 스키마의 예이다:

Employees 테이블

Column Name Data Type
employee_id INT
name VARCHAR
department_id INT
salary DECIMAL

Departments 테이블

Column Name Data Type
department_id INT
department_name VARCHAR

ER 다이어그램[편집 | 원본 편집]

데이터베이스 스키마를 시각적으로 표현할 때, ER 다이어그램(Entity-Relationship Diagram)을 사용할 수 있다.

  • 이 다이어그램은 엔티티, 속성, 관계를 나타내어 데이터베이스의 구조를 명확하게 보여준다.

실무적으로[편집 | 원본 편집]

이론적인 의미와 조금 다르게, 여러 DBMS에서 "데이터베이스 스키마"라고 하면 하나의 독립된 DB 그 자체를 가리킨다.

  • 즉 스키마를 만들었다, 스키마를 구분했다는 것은 어떤 데이터베이스 시스템을 위해 DB를 구성했다는 것이다.
  • 동일한 스키마 안에서 존재하는 테이블 간엔 Join이 가능하다.
  • 예를들어 MySQL에선 CREATE SCHEMA와 CREATE DATABASE가 동일하게 동작한다.

인스턴스와의 차이[편집 | 원본 편집]

데이터베이스 인스턴스는 스키마와 유사하게 데이터베이스의 현재 상태를 의미하지만,

  • 스키마는 데이터는 포함하지 않고 구조만 지칭하는 것과 달리 인스턴스는 현재 저장된 데이터를 나타낸다.