이미 정리된 내용을 직접 작성하여 옮기면서 공부하기 위해 글 작성함.
데이터베이스 스키마, 테이블 스키마, 데이터베이스 사전
1. 테이블의 스키마와 데이터베이스(디비)의 스키마
1-1. 데이터베이스의 스키마 (Database Schema)
- 데이터베이스 스키마의 예시
- 데이터베이스 shop에 다음과 같은 구조가 있다고 가정:
- 테이블: products, customers, orders
- 관계: orders.customer_id는 customers.id를 참조
- 이 전체 구조가 데이터베이스 스키마입니다.
- 데이터베이스 shop에 다음과 같은 구조가 있다고 가정:
- 데이터베이스 스키마는 데이터베이스 전체의 구조와 조직을 정의한다. 데이터베이스에 저장되는 모든 테이블, 뷰, 인덱스, 프로시저, 관계 등을 포함한 큰 그림이다.
- 데이터베이스 스키마의 주요 요소
- 테이블(Table): 데이터가 저장되는 기본 구조
- 뷰(View): 하나 이상의 테이블에서 데이터를 조회하는 가상 테이블
- 관계(Relationship): 테이블 간의 외래 키 관계
- 인덱스(Index): 데이터 조회를 빠르게 하기 위한 구조
- 트리거(Triger): 특정 이벤트가 발생할 때 실행되는 동작
- 저장 프로시저(Stored Procedure): 사전에 정의된 SQL 작업
1-2. 테이블의 스키마 (Table Schema)
- 테이블 스키마 예시
- CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY, -- Primary Key
name VARCHAR(50) NOT NULL, -- 이름은 NULL 허용하지 않음
email VARCHAR(100) UNIQUE, -- 이메일은 유일해야 함
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 생성 시간
); - 이 예시에서 테이블 users의 스키마는 다음과 같은 정보를 포함한다.
- 컬럼: id, name, email, created_at
- 데이터 타입: INT, VARCHAR, TIMESTAMP
- 제약 조건: Primary Key, NOT NULL, UNIQUE
- 기본값: created_at의 기본값으로 CURRENT_TIMESTAMP
- CREATE TABLE users (
- 테이블 스키마는 데이터베이스 스키마의 한 부분으로 특정 테이블의 구조와 정의를 나타낸다. 즉, 테이블의 열(컬럼), 데이터 타입, 제약 조건 등을 포함한 설계 정보이다.
- 테이블 스키마의 주요 요소
- 컬럼 이름(Column Name): 각 필드의 이름
- 데이터 타입(Data Type): 정수, 문자열, 날짜 등 데이터 형식
- 제약 조건(Constraints):
- Primary Key, Foreign Key, NOT NULL, UNIQUE 등
- 기본값(Default Value): 컬럼에 값이 없을 때 사용되는 기본 값
- 인덱스(Index): 빠른 검색을 위한 데이터 구조
1-3. 테이블 스키마 vs 데이터베이스 스키마
1.4 MySQL에서 테이블 스키마와 데이터베이스 스키마 확인
- 테이블의 스키마 확인
- 테이블 구조는 DESCRIBE 명령어 또는 SHOW COLUMNS 명령어를 사용하여 확인할 수 있습니다.
- DESCRIBE users;
- 데이터베이스의 스키마 확인
- 데이터베이스의 전체 구조는 SHOW TABLES, SHOW SCHEMAS와 같은 명령어로 확인하거나, 정보 스키마(information_schema)를 조회할 수 있습니다.
- SHOW TABLES FROM my_database;
-- 또는
SELECT * FROM information_schema.tables WHERE table_schema = 'my_database';
- 테이블 구조는 DESCRIBE 명령어 또는 SHOW COLUMNS 명령어를 사용하여 확인할 수 있습니다.
1-5. 데이터베이스 스키마와 테이블스키마의 관계
- 데이터베이스 스키마는 데이터베이스 전체의 설계를 나타내며
- 테이블 스키마는 데이터베이스 스키마의 일부로, 테이블 단위의 정의를 포함한다.
- 데이터베이스 스키마 설계 예시
- 데이터베이스 company를 설계한다고 가정
- 테이블 정의(테이블 스키마들)
- 테이블 간의 관계(외래 키)
- 뷰(View)
- 인덱스(Index)
- 인덱스의 주요 개념
- 기본 인덱스 생성
- 저장 프로시저(Stored Procedure)
- CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department_id INT,
hire_date DATE
);
CREATE TABLE departments (
id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE VIEW employee_department AS
SELECT e.id AS employee_id, e.name AS employee_name, d.name AS department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;
- 데이터베이스 company를 설계한다고 가정
- 요약
- 테이블의 스키마는 테이블 단위의 구조(컬럼, 데이터 타입, 제약 조건 등를 정의한다.
- 데이터베이스의 스키마는 데이터베이스 전체의 조직(테이블, 뷰, 관계 등)을 정의한다.
- MySQL에서는 이 두 개념이 독리적으로 존재하며, 각각 다르게 다룰 수 있다.
2. 데이터베이스 스키마와 **데이터베이스 사전(Data Dictionary)**
데이터베이스 스키마와 **데이터베이스 사전(Data Dictionary)**은 데이터베이스 관리와 구조 정의에서 중요한 개념이지만, 그 역할과 의미는 다르다.
2-1. 데이터베이스 스키마(Database Schema)
- 데이터베이스 스키마는 데이터베이스의 구조(설계도)를 정의하는 논리적인 개념이다. 데이터가 어떻게 저장되고, 어떻게 연결되며, 어떤 제약 조건이 있는지에 대한 설계 정보를 제공한다.
- 주요 특징:
- 정의된 설계: 테이블, 뷰, 인덱스 관계 등의 정의.
- 구조 중심: 데이터의 조직과 구조를 기술함.
- 개발자 관점: 데이터베이스를 설계하고 사용하는 논리적 틀.
- 예시:
- 테이블 이름, 컬럼 이름, 데이터 타입, 키(Primary/Foreign), 인덱스 등이 포함됨.
- "데이터베이스의 설계도" 역할을 함.
- 스키마 예시 (SQL 코드로 정의):
- CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department_id INT,
hire_date DATE
); - 이 테이블 정의가 데이터베이스의 스키마 일부이다.
2-2. 데이터베이스 사전(Data Dictionary)
- 데이터베이스 사전은 데이터베이스 시스템 내부에서 유지되는 메타데이터 저장소다. 즉, 데이터베이스에 대한 정보를 실제로 저장하고 관리하는 물리적인 시스템이다.
- 주요 특징:
- 메타데이터 저장소: 데이터베이스 구조와 데이터에 대한 정보를 저장.
- 실제 운영 중심: 데이터베이스의 현재 상태와 정의 정보를 저장하고 관리.
- DBMS 관점: 데이터베이스 시스템이 내부적으로 사용하며, 사용자가 직접 수정하지 않음.
- 사전에 포함된 정보:
- 테이블 정의, 컬럼 속성, 제약 조건.
- 데이터베이스 객체(뷰, 인덱스, 트리거 등)에 대한 정보.
- 사용 권한, 스토리지 세부 정보, 통계 등.
- 데이터 사전 조회 예시 (MySQL의 information_schema):
- SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'my_database';
- SELECT table_name, column_name, data_type
- 차이점 정리
- 요약
- 스키마는 데이터베이스 설계의 논리적인 정의(설계도).
- 사전은 데이터베이스 관리 시스템(DBMS)이 스키마 및 메타데이터를 저장하고 관리하는 실제 데이터 구조.
- 개발자와 사용자는 스키마를 직접 정의하거나 수정하지만, 데이터 사전은 DBMS가 내부적으로 관리하며 읽기 전용으로 조회만 가능.
3. MySQL에서 스키마
MySQL에서 스키마의 정의
- MySQL에서는 **스키마(Schema)**라는 용어를 데이터베이스의 논리적인 이름으로 간주한다.
- CREATE SCHEMA는 CREATE DATABASE와 동일하게 작동한다.
- 즉, MySQL에서는 스키마를 별도로 정의하는 것이 아니라 데이터베이스를 생성하면 그 데이터베이스 자체가 스키마 역할을 한다.
MySQL에서 스키마와 데이터베이스의 관계
- MySQL에서는 데이터베이스와 스키마가 동일하게 작동하므로, 아래 두 명령은 같은 결과를 가져온다:
- CREATE DATABASE my_database;
-- 동일한 명령
CREATE SCHEMA my_database;
왜 스키마가 없는 것처럼 보일까?
- 다른 데이터베이스 시스템에서는 데이터베이스 안에 여러 개의 스키마를 정의하고, 각 스키마 안에 테이블을 배치하는 구조를 지원한다. 예를 들어, PostgreSQL에서는 다음과 같이 하나의 데이터베이스에 여러 스키마를 둘 수 있다:
- 데이터베이스: company
- 스키마 1: sales
- 테이블: orders, customers
- 스키마 2: hr
- 테이블: employees, payroll
- 스키마 1: sales
- 하지만 MySQL에서는 하나의 데이터베이스에 여러 스키마를 정의할 수 없고, 데이터베이스 자체가 스키마와 동일하게 간주된다.
SHOW SCHEMAS와 SHOW DATABASES
- MySQL에서 SHOW SCHEMAS;와 SHOW DATABASES; 명령은 동일한 결과를 반환한다. 예시:
- SHOW SCHEMAS;
-- 또는
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
- SHOW SCHEMAS;
요약
- MySQL은 스키마의 하위 분할 구조(다중 스키마)를 지원하지 않으며, 대신 여러 데이터베이스를 생성하여 사용한다.
- PostgreSQL이나 Oracle처럼 명확히 스키마와 데이터베이스를 구분하는 시스템과는 설계 철학이 다르다.
4. 스키마란?
- MySQL에서는 데이터베이스와 스키마가 동일한 의미로 사용된다.
- **스키마(schema)**는 데이터베이스의 구조와 조직을 정의하는 청사진 또는 설계도이다. 즉, 데이터베이스에서 데이터를 어떻게 저장하고 구성할지를 명시한 것이다.
- 스키마는 다음을 포함할 수 있다:
- 테이블 구조
- 테이블 이름
- 각 테이블의 컬럼(필드) 이름과 데이터 타입
- 제약 조건(Primary Key, Foreign Key, Unique 등)
- 뷰(View)
- 특정 데이터를 간단히 볼 수 있도록 테이블로부터 파생된 가상 테이블 정의
- 인덱스(Index)
- 검색 속도를 높이기 위해 사용하는 데이터 구조
- 저장 프로시저(Stored Procedure)와 트리거(Trigger)
- 데이터 조작을 자동화하거나 특정 이벤트 발생 시 실행되는 코드
- 테이블 구조
- 스키마의 특징
- 물리적 스키마(Physical Schema)
- 실제 데이터가 어떻게 저장되는지에 대한 정의 (하드웨어, 저장 구조 등)
- 논리적 스키마(Logical Schema)
- 데이터베이스의 논리적 설계, 즉 테이블과 관계 구조를 정의
- 사용자 정의 스키마(User Schema)
- 특정 사용자가 접근 가능한 테이블과 뷰에 대한 설정
- 물리적 스키마(Physical Schema)
- 예시
- CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- CREATE TABLE users (
- 위 예는 데이터베이스에서 users라는 테이블의 스키마를 정의한 것입니다.
- id: 정수형 기본 키
- name: 이름 필드 (100자 이하 문자열)
- email: 고유한 이메일 필드
- created_at: 데이터 생성 시간 자동 기록
- 요약
- 스키마는 데이터베이스를 설계하고 관리하는 기본 틀이며, 데이터의 무결성과 효율성을 보장합니다.
오늘은 보충이라서 크게 무언가 할게 없다.
'공부 > 데이터베이스 개론' 카테고리의 다른 글
5. 관계 데이터 모델과 제약 (0) | 2024.12.09 |
---|---|
4. 데이터 모델링과 모델 (0) | 2024.12.09 |
3. 데이터베이스의 구조와 사용자 (1) | 2024.12.04 |
2. 데이터베이스 관리 시스템(DBMS) (0) | 2024.12.03 |
1. 데이터베이스의 기본 개념 (1) | 2024.12.03 |