티스토리 뷰
# 데이터베이스: 스키마의 3종류
🔷 스키마란?
🔷 정의
스키마란 데이터베이스가 저장한 데이터의 구조와 규칙을 정의해 둔 설계도입니다.
데이터베이스는 수많은 데이터를 저장하지만, 그 데이터가 어떤 의미를 갖는지 컴퓨터는 알 수 없습니다.
그래서 데이터베이스 내부에는 테이블, 컬럼, 자료형, 제약조건, 관계 등을 기록해 놓은 정의 정보가 반드시 필요하며,
이 정의 정보가 바로 스키마(schema)입니다.
스키마는 데이터베이스 내부의 데이터 사전(data dictionary)에 저장된 메타데이터로, 실제 데이터가 아니라 데이터를 관리하고 해석하기 위한 틀입니다.
🔷 데이터베이스 예시
다음은 한 학교의 데이터베이스에 저장된 실제 데이터입니다.
| 학생 테이블(Student) |
| 과목 테이블(Course) |
| 수강 테이블(Enrollment) |
위 데이터는 사람이 보기에는 직관적입니다.
하지만 컴퓨터는 2023001
이 학번인지, CS101
이 과목코드인지 알지 못합니다.
그래서 이 데이터가 어떤 테이블에 속하고, 각 칼럼이 어떤 자료형과 제약조건을 가지며, 어떤 관계로 연결돼야 하는지를 정의해 두어야 합니다.
이 정의가 바로 스키마입니다.
🔷 스키마가 무엇에 해당하는지 설명
위 데이터를 관리하기 위해 데이터베이스는 다음과 같은 스키마를 저장해 둡니다.
이 스키마는 데이터베이스의 ‘틀’이자 ‘규칙서’로서, 데이터가 정확히 입력되고 관리되도록 보장합니다.
🗂️ 학생 테이블(Student) 스키마
🗂️ 과목 테이블(Course) 스키마
🗂️ 수강 테이블(Enrollment) 스키마
이처럼 스키마는 데이터베이스가 데이터를 올바르게 해석하고 처리하기 위해 반드시 필요한 정의입니다.
스키마가 없다면 데이터는 의미를 잃고 단순한 문자열과 숫자에 불과하게 됩니다.
🔷 외부 스키마
외부 스키마는 데이터베이스를 사용하는 각 사용자나 응용 프로그램이 자신에게 필요한 데이터만 볼 수 있도록 정의한 사용자 관점의 논리적 구조입니다.
📌 외부 스키마가 필요한 이유
데이터베이스에는 학생의 개인 정보, 성적, 진료 기록, 등록금 정보 등 다양한 데이터가 저장되어 있습니다.
하지만 사용자마다 필요한 데이터는 서로 다릅니다.
- 🧑⚕️ 간호사: 병실과 병명만 알아야 합니다.
- 🧑💼 회계팀: 등록금 납부 현황만 알아야 합니다.
- 👨🏫 교수: 학생 성적 정보만 알아야 합니다.
모든 사용자가 데이터베이스 전체를 조회하면 다음과 같은 문제가 발생합니다.
- ✅ 업무와 무관한 데이터가 노출되어 혼란이 발생합니다.
- ✅ 개인정보나 민감한 정보가 유출될 위험이 있습니다.
- ✅ 데이터 처리 속도가 저하되고 업무 효율이 떨어집니다.
이러한 문제를 예방하기 위해 사용자별로 데이터 접근 범위를 제한하고,
사용자가 업무에 꼭 필요한 데이터만 조회할 수 있도록 규칙을 정의합니다.
이 규칙이 외부 스키마입니다.
📌 데이터베이스 예시
학교 데이터베이스에는 다음과 같은 데이터가 저장되어 있습니다.
| 학생 테이블 |
| 진료기록 테이블 |
| 등록금 테이블 |
간호사는 병실과 병명만 알아야 합니다.
하지만 위 데이터베이스에는 전공, 주소, 등록금, 성적까지 모두 저장되어 있어 불필요한 데이터가 노출됩니다.
이를 방지하기 위해 외부 스키마를 정의하여, 간호사가 조회할 수 있는 데이터만 아래처럼 제한합니다.
외부 스키마를 정의하면 간호사는 병실과 병명만 조회할 수 있고, 다른 정보에는 접근할 수 없습니다.
이로써 업무 효율성을 유지하고, 개인정보를 보호할 수 있습니다.
🔷 개념 스키마
개념 스키마는 데이터베이스 전체를 논리적으로 정의한 구조로, 데이터베이스에 존재하는 모든 테이블, 속성(컬럼), 데이터 간의 관계, 무결성 제약조건 등을 통합적으로 설계하고 표현하는 논리적 설계입니다.
📌 개념 스키마가 필요한 이유
데이터베이스는 여러 사용자가 각기 다른 목적으로 접근합니다.
외부 스키마만 정의하고 개념 스키마 없이 운영하면 데이터베이스 전체 구조의 일관성이 무너집니다.
개념 스키마는 모든 외부 스키마가 참조하는 공통의 기준이 되어 데이터베이스 전체가 하나의 일관성을 유지하도록 만듭니다.
📝 예시
❌ 개념 스키마 없이 외부 스키마만 관리하는 경우
학교 데이터베이스에서 설계자가 사용자별 외부 스키마만 정의했다고 가정합니다.
- 간호사 외부 스키마:
학생.학번
,학생.이름
,진료기록.병명
,진료기록.병실
- 회계팀 외부 스키마:
학생.학번
,학생.이름
,등록금.납부금액
,등록금.미납여부
- 교수 외부 스키마:
학생.학번
,학생.이름
,수강.과목코드
,수강.성적
이렇게 외부 스키마만 존재하면, 각 사용자에게 제공되는 데이터의 정의가 서로 다르고 일관성이 깨질 수 있습니다.
예를 들어, 간호사의 외부 스키마에서는 학번
을 INT
로 정의했고, 회계팀에서는 VARCHAR
로 정의했다면
데이터베이스 전체에서 학번
이라는 속성이 의미가 달라지고 오류가 발생합니다.
✅ 개념 스키마를 기준으로 관리하는 경우
개념 스키마에 데이터베이스 전체 구조를 이렇게 정의합니다.
모든 외부 스키마는 이 개념 스키마를 기반으로 정의됩니다.
이렇게 하면 테이블과 속성의 정의가 일관되게 유지되고, 설계 변경이 필요할 때도 개념 스키마만 수정하면 외부 스키마가 함께 반영됩니다.
🔷 핵심
- ✅ 개념 스키마는 데이터베이스의 중심 설계로서, 모든 테이블과 속성의 정의, 데이터 간의 관계, 무결성 제약조건을 통합해 논리적으로 표현합니다.
- ✅ 모든 외부 스키마가 이를 기준으로 작성되기 때문에, 데이터베이스의 일관성과 안정성을 보장할 수 있습니다.
🔷 내부 스키마
내부 스키마는 데이터베이스에 저장된 데이터를 물리적으로 어떻게 표현하고 저장할지를 정의한 구조로, 테이블의 저장 위치, 저장 방식, 인덱스, 파일 구조, 레코드 배치 방법 등 물리적 저장 장치 관점에서 설계한 구조입니다.
📌 내부 스키마가 필요한 이유
데이터베이스는 결국 디스크, SSD 등의 물리적 장치에 데이터를 저장합니다.
이때 아무런 규칙 없이 데이터를 저장하면 저장 공간이 낭비되고, 조회 속도가 느려지며, 데이터가 무질서하게 흩어질 수 있습니다.
또한 물리적 장치의 종류나 특성이 바뀔 때마다 데이터를 다시 설계해야 하는 불편이 생깁니다.
내부 스키마를 정의하면 데이터가 물리적으로 어떻게 저장되고 관리될지를 명확히 규정해, 저장 효율성과 성능을 높일 수 있습니다.
📝 예시
학교 데이터베이스에서 설계자가 내부 스키마를 정의하지 않고 데이터를 저장한다고 가정합니다.
학생 테이블의 데이터가 디스크 여기저기 흩어져 저장되어 조회 속도가 느려지고, 병실 정보가 다른 파일에 중복 저장되거나, 인덱스가 없어 검색 속도가 현저히 떨어집니다.
✅ 설계자는 내부 스키마를 작성하여 다음과 같이 물리적 저장 방식을 정의합니다.
이렇게 하면 디스크 공간을 효율적으로 사용하고, 조회 속도를 최적화할 수 있습니다.
🔷 핵심
- ✅ 내부 스키마는 데이터베이스의 물리적 저장 방식을 설계하여, 저장 위치, 저장 순서, 파일 구조, 인덱스 방식, 파티셔닝 등을 정의합니다.
- ✅ 이를 통해 저장 효율성을 높이고, 성능을 개선하며, 물리적 장치의 변경에도 논리적 구조가 영향을 받지 않도록 보장합니다.
'정보처리기사' 카테고리의 다른 글
서버 접근 통제의 3가지 방법 — MAC, DAC, RBAC 완전 정리 (0) | 2025.07.16 |
---|---|
NAT(Network Address Translation)란 무엇인가 (1) | 2025.07.16 |
클라우드 서비스의 3가지 모델(IaaS, PaaS, SaaS) (1) | 2025.07.15 |
관계형 데이터베이스, 무결성 제약, 개체 무결성, 참조 무결성, 도메인 무결성 (1) | 2025.07.15 |
소프트웨어 테스트 커버리지 쉽게 암기 정리 (2) | 2025.07.14 |
- Total
- Today
- Yesterday
- 백준
- C++ 알고리즘
- 알고리즘
- 코딩 테스트
- 알고리즘문제풀이
- 동적 계획법
- 동적계획법
- 코딩테스트
- 브루트포스
- Python
- 알고리즘 문제풀이
- 코딩
- 파이썬
- dfs
- 문제 풀이
- 그리디알고리즘
- 파이썬코딩
- c++알고리즘
- DP
- C++
- 객체지향
- 문제풀이
- c언어
- 인접 행렬
- python 알고리즘
- 그래프 탐색
- 문자열처리
- 프로그래밍
- 그리디
- 알고리즘기초
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |