CREATE DATABASE와 CREATE SCHEMA의 차이점은 데이터베이스 시스템에 따라 다르게 적용됩니다.
1️⃣ 일반적인 차이점
구분 CREATE DATABASE vs CREATE SCHEMA
개념 | 물리적인 데이터베이스 생성 | 논리적인 네임스페이스(스키마) 생성 |
사용 목적 | 새로운 데이터베이스를 만들 때 | 기존 데이터베이스 내에서 논리적인 그룹을 만들 때 |
적용 범위 | 독립적인 데이터베이스 단위 | 하나의 데이터베이스 내에서 관리 |
권한 | 새로운 데이터베이스를 만들 수 있는 권한 필요 | 현재 사용 중인 데이터베이스 내에서 사용 가 |
H2 데이터베이스에서는?
H2에서는 CREATE DATABASE 명령을 지원하지 않습니다.
스키마를 생성하여 데이터베이스처럼 사용
CREATE SCHEMA company;
SET SCHEMA company;
CREATE TABLE company.employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
department VARCHAR(100),
salary DECIMAL(10,2)
);
3️⃣ MySQL 에서는?
✅ MySQL(create schema 지원 x,Postgre는 둘다 지원)
- CREATE DATABASE 사용 → CREATE SCHEMA는 CREATE DATABASE와 동일하게 동작
- USE database_name; 으로 데이터베이스 선택 후 테이블 생성
어떤 이점이 있어서 굳이 CREATE SCHEMA를 사용하는 걸까?
결론 : 논리적인 데이터 분리를 통해 관리와 보안성을 높이고, 유지보수를 쉽게 하기 위함
1️⃣ 여러 개의 스키마로 논리적인 데이터 분리
- 하나의 데이터베이스 내에서 여러 개의 스키마를 만들어 서로 다른 데이터 그룹을 분리할 수 있습니다.
- 예를 들어, company 데이터베이스 내에서:
CREATE SCHEMA sales;
CREATE SCHEMA hr;
CREATE TABLE sales.orders (
order_id INT PRIMARY KEY,
customer_name VARCHAR(255),
total_amount DECIMAL(10,2)
);
CREATE TABLE hr.employees (
emp_id INT PRIMARY KEY,
name VARCHAR(255),
department VARCHAR(100)
);
📌 2️⃣ 동일한 테이블명을 사용할 수 있음
- 스키마가 다르면 같은 테이블명을 사용할 수 있습니다.
- sales.employees와 hr.employees는 다른 데이터를 저장하는 테이블이지만, 같은 employees라는 테이블명을 사용할 수 있습니다.
- 스키마를 사용하지 않으면 이런 경우 테이블명이 충돌합니다.
CREATE TABLE sales.employees (
id INT PRIMARY KEY,
name VARCHAR(255),
sales_amount DECIMAL(10,2)
);
CREATE TABLE hr.employees (
id INT PRIMARY KEY,
name VARCHAR(255),
department VARCHAR(100)
);
📌 3️⃣ 보안 및 권한 관리 용이
- 스키마 단위로 권한을 부여할 수 있어서 부서별 또는 사용자별 접근 제한을 걸 수 있습니다.
- hr_user는 hr 스키마의 데이터만 조회할 수 있고, finance 데이터는 변경할 수 없습니다.
GRANT SELECT ON SCHEMA hr TO hr_user;
REVOKE INSERT, UPDATE, DELETE ON SCHEMA finance FROM hr_user;
📌 4️⃣ 유지보수 및 관리 편리
- 여러 팀이 같은 데이터베이스를 사용하더라도, 각 팀별 스키마를 나누면 유지보수가 쉬워집니다.
- 예를 들어, sales 부서의 테이블만 백업하거나 삭제하려면 sales 스키마만 조작하면 됩니다.
- CASCADE 옵션을 사용하면 해당 스키마 내의 모든 테이블과 데이터도 함께 삭제됩니다.
DROP SCHEMA sales CASCADE;
📌 5️⃣ 개발과 테스트 환경 분리 가능
- dev, test, prod 스키마를 따로 두어 개발 환경과 운영 환경을 구분할 수 있습니다.
- dev.users, test.users, prod.users 각각 다른 환경에서 사용할 수 있어 데이터 충돌을 방지할 수 있습니다.
CREATE SCHEMA dev;
CREATE SCHEMA test;
CREATE SCHEMA prod;
✅ 결론
장점설명
논리적 데이터 분리 | 같은 데이터베이스 내에서 데이터를 명확히 분리 가능 |
동일한 테이블명 사용 가능 | 서로 다른 스키마에서 같은 테이블명 사용 가능 |
보안 및 권한 관리 | 특정 사용자에게 특정 스키마 접근 권한만 부여 가능 |
유지보수 편리 | 특정 부서/팀의 데이터만 삭제 또는 백업 가능 |
개발 및 운영 환경 분리 | dev, test, prod 스키마를 활용한 환경 구분 가능 |
💡 즉, CREATE SCHEMA를 사용하면 데이터베이스를 보다 체계적으로 관리할 수 있습니다!
어떤 이점이 있어서 굳이 CREATE database를 사용하는 걸까?
결론 : 서로 다른 애플리케이션/프로젝
📌 CREATE DATABASE 사용이 적합한 경우
1️⃣ 독립적인 데이터베이스 환경을 구성할 때
- 서로 다른 애플리케이션 또는 시스템이 독립적으로 데이터를 저장하고 관리해야 할 때, 각 애플리케이션을 별도의 데이터베이스로 설정합니다.
- 예:
- 애플리케이션 A와 애플리케이션 B가 각각 서로 다른 데이터베이스를 사용해야 할 경우
- **CREATE DATABASE app_a_db;**와 **CREATE DATABASE app_b_db;**로 각각 독립된 데이터베이스를 만들 수 있습니다.
2️⃣ 보안상의 이유로 데이터베이스 분리 필요할 때
- 보안 요구사항에 따라 중요한 데이터와 일반 데이터를 분리해야 할 경우, 데이터를 완전히 다른 데이터베이스에 저장합니다.
- 예를 들어, 금융 시스템과 일반 웹 서비스에서 사용하는 데이터를 각각 다른 데이터베이스로 분리하여 보안 강화를 할 수 있습니다.
- 중요한 데이터는 독립된 데이터베이스에 저장하여 권한 관리가 용이하도록 할 수 있습니다.
3️⃣ 서버 리소스를 분리하고자 할 때
- 한 서버 내에서 여러 데이터베이스를 운영하며 각 데이터베이스가 서로 독립적으로 서버 리소스를 사용하게 하고자 할 때.
- 데이터베이스에 큰 차이가 있다면, 하나의 서버에서 여러 데이터베이스를 독립적으로 관리하면서 각 데이터베이스의 성능을 개별적으로 최적화할 수 있습니다.
4️⃣ 백업, 복원, 유지보수를 독립적으로 진행할 때
- 각 데이터베이스를 독립적으로 백업, 복원, 업데이트 등 유지보수 작업을 해야 할 경우 CREATE DATABASE를 사용하여 데이터베이스를 구분할 수 있습니다.
- 예: 운영 환경과 개발 환경을 별도의 데이터베이스로 설정하여 관리할 때.
5️⃣ 대규모 시스템에서 데이터베이스 분리가 필요한 경우
- 대규모 시스템에서 다양한 모듈별로 데이터베이스를 분리하여 관리하는 경우.
- 예를 들어, 사용자 관리, 결제 시스템, 상품 관리 등 각 기능에 대해 별도의 데이터베이스를 사용할 수 있습니다.
- CREATE DATABASE users_db;, **CREATE DATABASE payments_db;**처럼 데이터를 독립적으로 관리할 수 있습니다.
📌 CREATE DATABASE를 사용하지 않는 경우 (H2 예시)
- 작은 규모의 애플리케이션이나 단일 프로젝트에서 여러 테이블을 하나의 데이터베이스 내에서 관리할 경우 CREATE SCHEMA만으로 충분합니다.
- 예: 한 애플리케이션 내에서 여러 팀(세일즈, 인사 등) 데이터를 관리할 때 CREATE SCHEMA로 구분하면 됩니다.
- H2처럼 작고, 임시적이거나 실험적인 프로젝트에서는 별도의 CREATE DATABASE 명령어가 필요하지 않음.
✅ 결론
CREATE DATABASE는 다음과 같은 경우에 사용하는 것이 적합합니다:
- 독립적인 데이터베이스 환경을 만들고자 할 때
- 보안이나 리소스 분리를 위해 각 데이터베이스를 분리할 때
- 백업, 복원, 유지보수를 독립적으로 관리해야 할 때
- 대규모 시스템에서 데이터베이스를 나누어 관리할 때
따라서 여러 데이터베이스를 독립적으로 운영해야 할 경우에 적합하고, H2와 같은 경우 작은 시스템에서 여러 스키마로 관리할 수 있다는 점을 고려해야 합니다.
트에서 각각 별도의 데이터베이스를 운영해야 할 경우에 사용 적합
'CS 과목(CS科目) > 데이터 베이스(データベース)' 카테고리의 다른 글
key(Feat. superKey, candidate key, foreign key) (0) | 2025.02.05 |
---|---|
RDBMS(Feat. 관계형 데이터베이스, relation, set, list etc) (0) | 2025.02.05 |
database 기본 개념(Feat. data models, conceptual level, logical level, physical level, three schema architecture etc) (0) | 2025.01.31 |
internal schema (0) | 2025.01.31 |
Inner Join과 Cross Join(세타 Join)의 차이 (0) | 2023.04.22 |