[mssql] 데이터 베이스 모델링 단계, 정규화, 테이블 관리

TNT·2024년 4월 20일

mssql

목록 보기
3/9

데이터 베이스 이론에 대한 포스트 입니다.

1.DB 모델링 단계

데이터 베이스 모델링 단계에는 3가지로 나눌수 있다.
개념적 모델링 > 논리적 모델링 > 물리적 모델링 이다.

개념적 데이터 모델링

업무를 일반화 시키는 과정이다
실체-관계 모델링을 통한 E-R Diagram을 생성 하게 된다.

논리적 데이터 모델링

개념적 데이터 모델링 단계에서 얻어진 실체-관계 모델을 관계형 데이터 베이스 이론에 맞게 변환 시키는 작업
다음 정규화 과정을 수행하게 된다.

물리적 데이터 모델링

사용할 데이터 베이스 관리 시스템 테이블에 포함될 열의 데이터 형식과 크기를 정의 하게된다.
데이터 베이스가 보다 효율적으로 동작하도록 하기 위해 논리적 모델링 단계에서 진행 했던 정규화 결과에 대한 역정규화 과정을
성능 향상을 위해서 진행한다.
이를 위해 정규화 과정을 일부로 위배하는 것을 말한다.
이후 인덱스, 뷰, 저장 프로시저, 함수 , 트리거, 제약조건 등
데이터 베이스 내의 개체들을 정의 하여 결과적으로 물리적인 데이터 베이스를 생성하게된다.

2.정규화

정규화의 목적은 데이터를 보다 효율적으로 저장하고 데이터의 중복을 방지 하기 위해서
저장 공간이 낭비 되는 테이블 설계를 제거하는것이다.
정규화가 진행되면 테이블이 가장 작은 논리적인 단위로 나누어지기 때문에 당연히 테이블의 개수가 많아진다.
이에 따라 쿼리문 작성할때 join 해야하는 테이블이 많아진다.

여러 테이블로 분리된 데이터를 같이 조회하기위한 join문은 관계형 데이터 베이스에서 필수 구문이다.
일반적으로 정규화를 거치지 않고 디자인된 테이블들에 대한 join문 없는 쿼리 보다
정규화를 통해서 여러 개로 나누어진 테이블들에 대한 join문이 있는 쿼리문이 빠르고 효율적이다.
저장소 낭비도 줄이게 되며 테이블들이 여럿으로 나뉘어져 데이터에 대한 경합이 줄어 잠금 문제도 해결되는 이점이 있다.

제1 정규형

반복되는 속성이나 그룹의 속성을 제거하고 새로운 테이블 추가한 후에 기존의 테이블과 일대다의 관계를 형성해야함을 의미

제2 정규형

기본 키가 복합 키로 구성 된경우 복합 키 전체에 의존하지 않고 복합키 일부에 의존적인 열이 존재한다면, 이를 제거해야한다.

제3 정규형

기본 키에 의종 하지 않고 일반 열에 의존하는 열이 존재한다면 이를 제거해야함을 의미 한다.

역정규화

성능 향상을 위해서 정규화의 위배되는 행위를 일부로 하는 것을 역 정규화 라고 하며, 물리적 데이터 모델링 단계에서 가장 중요하다.

열 역정규화

다른 테이블에서 열을 물리적으로 저장해서 조인을 수행하지 않고도 해당 데이터를 볼수있게 하는것을 의미
이럴 경우 여러 테이블에서 join으로 확인해야만하는 데이터들이 join을 하지 않고 볼수있음
단점이 존재하는데 만약 다른 테이블에서 데이터 변경이 일어난다면 갱신이 필요함
트리거 기능을 이용하면 해결할 수 있지만 트리거에 대한 관리가 필요해짐
또는 열 역정규화에 대한 열의 크기가 너무 크다면 역효과가 발생할수도있음

파생 열의 생성

물리적으로 데이터가 존재하는 것이 아니라 조회할 때마다 계산 공식을 적용하여 얻어지는 값을 말함
이러한 파생 열을 물리적으로 만들어 놓고 실제 데이터를 저장 함으로써
데이터를 조회 때 연산 없이 바로 데이터를 조회할 수있도록 하기 위한 설정을 말함
단 이경우 계산의 대상이 되는 열의 값이 변경이 되면 계산 값을 미리 저장된 파생 열의 값도 변경해 주어야하는 부담이 생김
PERSISTED 키워드 사용으로 파생열 생성 없이 결과 얻을 수도있음

테이블 분리

자주 사용하지 않은 데이터를 자주 액세스 되는 테이블이 저장 하는건 성능상 좋지 못하다.
자주 사용하지 않은 행 또는 열을 해당하는 테이블에서 제외 시키고 따로 저장하는것이 성능 향상에 도움이 될수있다.

행분리

오래동안 사용 하지 않은 행은 따로 빼면 좋다 예시로 다들 휴면 계정이라고 봤을꺼다.
회원 테이블에서 휴면 테이블로 행 이동 시킨후 다시 접속 한다면 회원 테이블로 이동 시켜주는것이다.

열분리

게시판에서 글 목록을 볼때 제목과 작성자 작성일 등등만 보이고 글내용이라던지 이런건 안보이고 들어가야 보인다.
이경우 게시판 내용과 게시 내용을 열분리 해서 따로 테이블 만들어 주면 좋은것이다.
그러면 게시판 제목 로딩도 빨라지는 효과가 있다.

3. 테이블 관리 및 종류

통계 테이블 생성

GROUP BY 절을 이용한 통계정보를 확인하는 쿼리 문장은 매우 많은 부하를 유발하기 때문에 이러한 결과를 미리 특정 테이블에 저장해 둠으로써
나중에 정보를 얻기 위해 간단히 조회할 수 있도록 하는 것

대리키 생성 (Surrogate Key)

키로 선택 될 열의 크기가 크거나 여러 개이기 때문에 발생하는 저장 공간의 문제와 성능상의 문제를 해결하기 위해 작은 키기의 열을 생성하여 대신하게 한다.
이때 만들어진 키를 대리키 라고 한다.

테이블 통합

데이터 사용량이 많지 않거나 굳이 테이블을 분리해서 얻는 효과가 별로 없을 때는 원래대로, 즉 정규화 이전의 형태로 테이블을 합칠수 있다.

코드 테이블 관리

데이터 베이스를 디자인 하다 보면. 여러 가지 코드 테이블이 만들어지는 경우가 있다.
코드 테이블의 유형이 비슷할경우 하나로 묶어서 관리하는 것이 관리의 효율을 가져올 수 있다.

시스템 데이터베이스

SQL server 를 설치 하고 보면 기본적으로 만들어지는 시스템 데이터 베이스 가있음
master, model, msdb, tempdb 등등 관리 시스템으로서의 고유기능 등 여러가지용도로 사용된다.

master 데이터베이스

sql server 에서는 데이터 베이스들이 만들어지고 이러한 데이터 베이스의 정보를 가지는 데이터베이스가 필요하다
파일위치 데이터 파일 로그파일 위치 데이터베이스 접근하기 위한 계정 정보 등등 이런 정보들이 모아두는곳이 master 데이터 베이스 이다.

model 데이터베이스

모든 데이터 베이스들의 원형으로 사용된다.
새로운 데이터 베이스가 만들어질때 model 데이터베이스에 기본적으로 복사되어 만들어진다.
즉 model 데이터베이스는 새로운 데이터베이스를 위한 템플릿 데이터베이스 역활을 담당 한다.
model 데이터베이스의 설정을 바꾸면 이후에 만들어지는 새로운 데이터베이스에는 그 변경 사항이 반영된다.
앞으로 만들어질 새로운 데이터베이스에 특정 사용자 계정을 만들고 싶을때 이 계정을 model 데이터베이스에 만들어두면 별도 작업없이 계정이 포함된다.

temp 데이터베이스

임시 테이블이나 작업의 중간 결과 등 만들어지는 곳이다.
이 db는 sql server 이 재시작 할때마다 초기화가 된다.
model 데이터베이스는 새로운 데이터베이스가 만들 때 사용되는 템플릿 데이터베이스 라고했는데
temp 데이터베이스 도 재시작 할때 새롭게 만들어지기 때문에 복사되면서 만들어진다.
즉 보관해야할 데이터는 여기에 저장하면 안된다.

ms 데이터 베이스

주로 자동화에 관련도니 정보를 관리하는데 사용된다.
작업, 경고, 운영자와 관련된 내용이 기록된다.
또한 SSIS 패키지를 저장하면 이정보도 저장된다. 이 외에도 백업 및 복원 내역을 포함한 각종 정보가 이 데이터 베이스에 기록되어 관리된다.

데이터 베이스 파일

데이터베이스는 최소한 하나 이상의 데이터 파일과 최소한 하나이상의 로그 파일로 구성되는데 확장자가 mdf or ndf 와 ldf인 파일로 존재한다.

profile
개발

0개의 댓글