원래 데이터베이스 설계와 구축 등에 대해 포스팅 하려 했지만 설계 전에 스키마란게 뭔지 알고 싶어서 스키마부터 정리한 후 설계 부분을 요약해서 설명하고, 설계에 대한 자세한 얘기는 다음에 하려고 한다. 기본 개념을 아직 숙지못했다면 아래 블로그를 한번 보고 오는 걸 추천한다.
스키마란
- 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조
- 스키마는 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다.
- 스키마는 사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나눠진다.
(생활코딩 이고잉님의 예시를 빌리자면, 엑셀에서 데이터를 입력할 때 마구잡이로 입력하는게 아닌, 항목을 정하고, 그 안에 해당하는 값을 넣으면서 정리를 한다. 한 열에 들어가야 하는 데이터가 숫자인지, 글자인지, 공란일 수 있는지 등등의 정의를 하는 것을 스키마라고 한다.)
메타데이터: 어떠한 목적을 가지고 만들어진 데이터
Entity: 객체라는 의미로 유용한 정보를 저장하고 관리하기 위한 집합, 명사이며, 저장이 되기 위한 어떤 것을
의미(==table)
Attribute: 테이블을 구성하는 데이터들 중 세로로 묶은 데이터셋을 의미함(개체의 속성)
Relation: 개체 사이에 존재하는 관계에 대한 정의(동일한 구조로 이루어진 튜플의 집합을 말함)
Tuple: 사전적의미로는 유한개의 사물의 순서있는 열거라고 한다.
스키마의 3계층
데이터베이스 관리 시스템(DBMS)은 외부스키마에 따라 명시되고, 사용자의 요구를 개념적 스키마에 적합한 형태로 변경하고, 이를 다시 내부적 스키마에 적합현 형태로 변환한다.
외부스키마
- 사용자나 프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의함
- 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브스키마(subschema)라고도 함
- 하나의 데이터베이스 시스템에는 여러 개의 외부 스키마가 존재할 수 있고, 하나의 외부스키마를 여러개의 프로그램이나 사용자가 공용할 수 있다.
- 같은 데이터베이스에 서로 다른 관점을 정의할 수 있도록 허용한다.
- 사용자는 질의어(SQL)을 사용하여 DB에 접근하여 사용한다.
개념스키마
- 데이터베이스의 전체적인 논리적 구조로서, 모든 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스로 하나만 존재한다.
- 개체간의 관계나 제약조건을 나타내고, 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의
- 데이터베이스 관리자에 의해 구성된다.
내부스키마
- 물리적 저장장치 입장에서 본 데이터베이스의 구조
- 데이터베이스에 저장될 물리적인 구조를 정의하고, 저장 데이터 항목의 표현방법, 물리적 순서 등을 나타냄
- 시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마
- 데이터베이스의 물리적인 구조
인덱스란?
- 색인
- DB에서 가장 빠르게 데이터를 찾아낼 수 있는 검색 방법
- 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다고 함
- 고속의 검색 동작뿐만 아니라 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다.
- 책으로 비유하자면 제일 앞장에 있는 목차가 될 수 있다.
- 유니크한 값이 아닌 여러 중복된 데이터가 있을 경우 두개의 열을 가지고 데이터를 찾을 수 있다. 장고에서 사용하는 문구를 통해 예시를 들자면, 데이터베이스에 저장된 값 중 32살의 이승재를 찾고자 한다면,
Model.objects.filter(name="이승재", age=32)
처럼 2개의 항목이름을 가지고 찾을 수 있음(물론 1개가 아닌 여러개 일수도 있음)
데이터베이스 설계란?
- 데이터베이스 설계의 주요 목적은 데이터의 의미를 정확하게 파악하고, 정보 요구사항에 대한 의사소통을 원할하게 하는 데 있다.
- 설계과정은 다음과 같다.
요구조건 분석
사용자가 무엇의 정보를 필요로 하고 있는지, 문제가 무엇이며 문제를 어떻게 해결할지 등을 분석하여 어떤 데이터베이스를 만들어야 할 지를 결정하는 단계
개념적 설계
데이터베이스의 구성요소(속성)들을 정하고, 다음 단계인 논리적 설계에서 수행할 작업을 설계
논리적 설계
본격적인 스키마 설계로, 이전 개념적 설계에서 만든 설계도를 사용자가 알아볼 수 있는 형태로 작업하는 것(제약조건 등을 해당 단계에서 제작)
물리적 설계
저장장치에 저장되는 형태의 알고리즘을 효율적이게 개선하고 수정하는 단계
자세한 설명은 다음 블로그에 이어서 진행하거나 아래에 추가해서 작성할 예정이다.
참고사이트: