티스토리 뷰

반응형
데이터베이스 스키마 3종류 완벽 이해: 개념, 외부, 개념, 내부 스키마 상세 설명

# 데이터베이스: 스키마의 3종류


🔷 스키마란?


🔷 정의

스키마란 데이터베이스가 저장한 데이터의 구조와 규칙을 정의해 둔 설계도입니다.
데이터베이스는 수많은 데이터를 저장하지만, 그 데이터가 어떤 의미를 갖는지 컴퓨터는 알 수 없습니다.
그래서 데이터베이스 내부에는 테이블, 컬럼, 자료형, 제약조건, 관계 등을 기록해 놓은 정의 정보가 반드시 필요하며,
이 정의 정보가 바로 스키마(schema)입니다.
스키마는 데이터베이스 내부의 데이터 사전(data dictionary)에 저장된 메타데이터로, 실제 데이터가 아니라 데이터를 관리하고 해석하기 위한 틀입니다.


🔷 데이터베이스 예시

다음은 한 학교의 데이터베이스에 저장된 실제 데이터입니다.


| 학생 테이블(Student) |

학번 이름 전공
2023001 김민수 컴퓨터공학
2023002 이영희 경영학
2023003 박준호 수학

| 과목 테이블(Course) |

과목코드 과목명 담당교수
CS101 프로그래밍 최강훈
MG201 경영학원론 윤서희
MA301 선형대수 정하늘

| 수강 테이블(Enrollment) |

학번 과목코드 성적
2023001 CS101 A
2023002 MG201 B+
2023003 MA301 A0

위 데이터는 사람이 보기에는 직관적입니다.
하지만 컴퓨터는 2023001이 학번인지, CS101이 과목코드인지 알지 못합니다.
그래서 이 데이터가 어떤 테이블에 속하고, 각 칼럼이 어떤 자료형과 제약조건을 가지며, 어떤 관계로 연결돼야 하는지를 정의해 두어야 합니다.
이 정의가 바로 스키마입니다.


🔷 스키마가 무엇에 해당하는지 설명

위 데이터를 관리하기 위해 데이터베이스는 다음과 같은 스키마를 저장해 둡니다.
이 스키마는 데이터베이스의 ‘틀’이자 ‘규칙서’로서, 데이터가 정확히 입력되고 관리되도록 보장합니다.


🗂️ 학생 테이블(Student) 스키마

칼럼 이름 자료형 제약조건
학번 INT PRIMARY KEY
이름 VARCHAR(20) NOT NULL
전공 VARCHAR(30) NOT NULL

🗂️ 과목 테이블(Course) 스키마

칼럼 이름 자료형 제약조건
과목코드 CHAR(6) PRIMARY KEY
과목명 VARCHAR(30) NOT NULL
담당교수 VARCHAR(20) NULL 가능

🗂️ 수강 테이블(Enrollment) 스키마

칼럼 이름 자료형 제약조건
학번 INT FOREIGN KEY(Student.학번)
과목코드 CHAR(6) FOREIGN KEY(Course.과목코드)
성적 CHAR(2) NULL 가능

이처럼 스키마는 데이터베이스가 데이터를 올바르게 해석하고 처리하기 위해 반드시 필요한 정의입니다.
스키마가 없다면 데이터는 의미를 잃고 단순한 문자열과 숫자에 불과하게 됩니다.


🔷 외부 스키마

외부 스키마는 데이터베이스를 사용하는 각 사용자나 응용 프로그램이 자신에게 필요한 데이터만 볼 수 있도록 정의한 사용자 관점의 논리적 구조입니다.

📌 외부 스키마가 필요한 이유

데이터베이스에는 학생의 개인 정보, 성적, 진료 기록, 등록금 정보 등 다양한 데이터가 저장되어 있습니다.
하지만 사용자마다 필요한 데이터는 서로 다릅니다.

  • 🧑‍⚕️ 간호사: 병실과 병명만 알아야 합니다.
  • 🧑‍💼 회계팀: 등록금 납부 현황만 알아야 합니다.
  • 👨‍🏫 교수: 학생 성적 정보만 알아야 합니다.

모든 사용자가 데이터베이스 전체를 조회하면 다음과 같은 문제가 발생합니다.

  • ✅ 업무와 무관한 데이터가 노출되어 혼란이 발생합니다.
  • ✅ 개인정보나 민감한 정보가 유출될 위험이 있습니다.
  • ✅ 데이터 처리 속도가 저하되고 업무 효율이 떨어집니다.

이러한 문제를 예방하기 위해 사용자별로 데이터 접근 범위를 제한하고,
사용자가 업무에 꼭 필요한 데이터만 조회할 수 있도록 규칙을 정의합니다.
이 규칙이 외부 스키마입니다.


📌 데이터베이스 예시

학교 데이터베이스에는 다음과 같은 데이터가 저장되어 있습니다.


| 학생 테이블 |

학번 이름 전공 주소
2023001 김민수 컴퓨터공학 서울시

| 진료기록 테이블 |

학번 병명 병실
2023001 독감 301호

| 등록금 테이블 |

학번 납부금액 미납여부
2023001 3000000 N

간호사는 병실과 병명만 알아야 합니다.
하지만 위 데이터베이스에는 전공, 주소, 등록금, 성적까지 모두 저장되어 있어 불필요한 데이터가 노출됩니다.
이를 방지하기 위해 외부 스키마를 정의하여, 간호사가 조회할 수 있는 데이터만 아래처럼 제한합니다.

학번 이름 병명 병실
2023001 김민수 독감 301호

외부 스키마를 정의하면 간호사는 병실과 병명만 조회할 수 있고, 다른 정보에는 접근할 수 없습니다.
이로써 업무 효율성을 유지하고, 개인정보를 보호할 수 있습니다.


🔷 개념 스키마

개념 스키마는 데이터베이스 전체를 논리적으로 정의한 구조로, 데이터베이스에 존재하는 모든 테이블, 속성(컬럼), 데이터 간의 관계, 무결성 제약조건 등을 통합적으로 설계하고 표현하는 논리적 설계입니다.

📌 개념 스키마가 필요한 이유

데이터베이스는 여러 사용자가 각기 다른 목적으로 접근합니다.
외부 스키마만 정의하고 개념 스키마 없이 운영하면 데이터베이스 전체 구조의 일관성이 무너집니다.
개념 스키마는 모든 외부 스키마가 참조하는 공통의 기준이 되어 데이터베이스 전체가 하나의 일관성을 유지하도록 만듭니다.


📝 예시

❌ 개념 스키마 없이 외부 스키마만 관리하는 경우

학교 데이터베이스에서 설계자가 사용자별 외부 스키마만 정의했다고 가정합니다.

  • 간호사 외부 스키마: 학생.학번, 학생.이름, 진료기록.병명, 진료기록.병실
  • 회계팀 외부 스키마: 학생.학번, 학생.이름, 등록금.납부금액, 등록금.미납여부
  • 교수 외부 스키마: 학생.학번, 학생.이름, 수강.과목코드, 수강.성적

이렇게 외부 스키마만 존재하면, 각 사용자에게 제공되는 데이터의 정의가 서로 다르고 일관성이 깨질 수 있습니다.
예를 들어, 간호사의 외부 스키마에서는 학번INT로 정의했고, 회계팀에서는 VARCHAR로 정의했다면
데이터베이스 전체에서 학번이라는 속성이 의미가 달라지고 오류가 발생합니다.


✅ 개념 스키마를 기준으로 관리하는 경우

개념 스키마에 데이터베이스 전체 구조를 이렇게 정의합니다.

테이블 속성
학생(Student) 학번 INT PRIMARY KEY, 이름 VARCHAR(20), 전공 VARCHAR(30)
진료기록(Medical) 학번 INT REFERENCES 학생(학번), 병명 VARCHAR(50), 병실 VARCHAR(10)
등록금(Tuition) 학번 INT REFERENCES 학생(학번), 납부금액 INT, 미납여부 CHAR(1)

모든 외부 스키마는 이 개념 스키마를 기반으로 정의됩니다.
이렇게 하면 테이블과 속성의 정의가 일관되게 유지되고, 설계 변경이 필요할 때도 개념 스키마만 수정하면 외부 스키마가 함께 반영됩니다.


🔷 핵심

  • ✅ 개념 스키마는 데이터베이스의 중심 설계로서, 모든 테이블과 속성의 정의, 데이터 간의 관계, 무결성 제약조건을 통합해 논리적으로 표현합니다.
  • ✅ 모든 외부 스키마가 이를 기준으로 작성되기 때문에, 데이터베이스의 일관성과 안정성을 보장할 수 있습니다.

🔷 내부 스키마

내부 스키마는 데이터베이스에 저장된 데이터를 물리적으로 어떻게 표현하고 저장할지를 정의한 구조로, 테이블의 저장 위치, 저장 방식, 인덱스, 파일 구조, 레코드 배치 방법 등 물리적 저장 장치 관점에서 설계한 구조입니다.

📌 내부 스키마가 필요한 이유

데이터베이스는 결국 디스크, SSD 등의 물리적 장치에 데이터를 저장합니다.
이때 아무런 규칙 없이 데이터를 저장하면 저장 공간이 낭비되고, 조회 속도가 느려지며, 데이터가 무질서하게 흩어질 수 있습니다.
또한 물리적 장치의 종류나 특성이 바뀔 때마다 데이터를 다시 설계해야 하는 불편이 생깁니다.
내부 스키마를 정의하면 데이터가 물리적으로 어떻게 저장되고 관리될지를 명확히 규정해, 저장 효율성과 성능을 높일 수 있습니다.


📝 예시

학교 데이터베이스에서 설계자가 내부 스키마를 정의하지 않고 데이터를 저장한다고 가정합니다.
학생 테이블의 데이터가 디스크 여기저기 흩어져 저장되어 조회 속도가 느려지고, 병실 정보가 다른 파일에 중복 저장되거나, 인덱스가 없어 검색 속도가 현저히 떨어집니다.


✅ 설계자는 내부 스키마를 작성하여 다음과 같이 물리적 저장 방식을 정의합니다.

테이블 물리적 저장 정의
학생(Student) 디스크의 특정 블록에 연속 배치, 학번에 B+ 트리 인덱스 생성
진료기록(Medical) 별도 파일에 병동별 파티셔닝
등록금(Tuition) 압축된 형식으로 저장해 공간 절약

이렇게 하면 디스크 공간을 효율적으로 사용하고, 조회 속도를 최적화할 수 있습니다.


🔷 핵심

  • ✅ 내부 스키마는 데이터베이스의 물리적 저장 방식을 설계하여, 저장 위치, 저장 순서, 파일 구조, 인덱스 방식, 파티셔닝 등을 정의합니다.
  • ✅ 이를 통해 저장 효율성을 높이고, 성능을 개선하며, 물리적 장치의 변경에도 논리적 구조가 영향을 받지 않도록 보장합니다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
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
글 보관함
반응형