IT STUDY LOG
[데이터베이스] 조사 및 발표 준비 본문
# 발표 주제1
RDBMS에서 스키마 디자인 중 필드값으로 배열을 넣어야 하는 경우가 발생했습니다. 선배 개발자에게 물어보니, 이 경우에는 정규화가 필요하다고 조언해줍니다. 다음은 사용자 정보가 담긴 user 테이블입니다. 사례를 통해 어떻게 테이블을 정규화할 지 고민해보세요.
[정규화되지 않은 릴레이션]
id | name | age | hobby | ||
1 | 김코딩 | 19 | kimcoding@aaa.com | 코딩 | |
2 | 박해커 | 28 | hackerpark@bbb.com | 해킹 | |
3 | 최고수 | 18 | choigosu@ccc.com | [코딩, 해킹] | <--- 이 문제를 어떻게 해결할까요? |
현재 user 릴레이션의 3번 튜플을 보면 hobby라는 애트리뷰트에 [코딩, 해킹]이라는 두가지 값이 들어가 있으므로 "모든 도메인이 원자값으로만 구성"되어야 하는 제1정규형을 만족하지 못한다. 이를 해결하기 위해서는 아래와 같이 애트리뷰트에 입력된 값을 분리해주어야 한다.
[제1정규형(1NF)]
id | name | age | hobby | |
1 | 김코딩 | 19 | 코딩 | kimcoding@aaa.com |
2 | 박해커 | 28 | 해킹 | hackerpark@bbb.com |
3 | 최고수 | 18 | 코딩 | choigosu@ccc.com |
3 | 최고수 | 18 | 해킹 | choigosu@ccc.com |
이 경우 기본키에 해당하는 것으로 추정되는 id가 중복되어 개체 무결성을 해치게 된다. 이 경우 id + hobby와 같이 유일성과 최소성을 만족하는 복합키 조합을 통해 해결할 수 있다.
또한 id + hobby를 기본키로 한 릴레이션의 경우 id가 name, age, eamil을 결정하는 부분 함수 종속이 존재한다. 이는 "1NF이고 키(기본)에 속하지 않은 애트리뷰트 모두가 기본키에 완전 함수 종속"이라는 2NF의 조건을 만족하지 못한다. 이 경우 user_info (id, name, age, email)이라는 릴레이션과 user_hobby (id, hobby)라는 릴레이션으로 분해하여 완전 함수 종속으로 만들 수 있다.
[제2정규형(2NF)]
릴레이션명 : user_info
기본키 : id
id | name | age | |
1 | 김코딩 | 19 | kimcoding@aaa.com |
2 | 박해커 | 28 | hackerpark@bbb.com |
3 | 최고수 | 18 | choigosu@ccc.com |
릴레이션명 : user_hobby
기본키: id + hobby
id | hobby |
1 | 코딩 |
2 | 해킹 |
3 | 코딩 |
3 | 해킹 |
관련 개념 정리
이상 현상
개념
관계 스키마 설계가 잘못되어 데이터의 불필요한 중복이 발생하는 것
데이터 중복은 릴레이션 처리 시 곤란한 현상을 일으키는데 이를 이상 현상이라고 함
종류
삭제 이상
튜플을 삭제할 때 유지되어야하는 정보까지 연쇄 삭제되는 정보 손실 현상
삽입 이상
어떤 데이터를 삽입하려고 할 때 불필요하고 원하지 않는 데이터도 함께 삽입해야만 삽입되는 현상
갱신 이상
중복된 튜플 중 일부 튜플의 애트리뷰트 값만이 갱신되어 데이터의 모순성이 발생하는 현상
이상현상의 원인과 해결 방법
원인
애트리뷰트 간의 종속성을 고려하지 않고 무리하게 하나의 릴레이션에 표현하고자 해서 발생
해결 방법
정규화
정규화
개념
애트리뷰트들 간의 종속성을 분석해 하나의 릴레이션에는 기본적으로 하나의 종속성이 표현되도록 무손실 분해
릴레이션의 애트리뷰트, 엔티티, 관계성을 파악해 데이터 중복성을 최소화 (종속성 제거가 아님)
정규화는 논리적 설계 단계에서 수행하며 역정규화는 물리적 설계 단계에서 수행
정규화를 통해 릴레이션을 분해하면 연산시간이 증가할 수 있음(∵조인이 필요하므로)
데이터 일관성, 최소한의 데이터 중복, 최대한의 데이터 안정성, 최소한의 이상현상을 위해 작은 릴레이션으로 분해하는 방법
목적
데이터베이스 연산의 여러가지 이상을 없애기 위함
개체 간의 관계를 쉽게 파악
일반적으로 업무 적용에서 일반적인 정규화는 3NF나 BCNF를 목표로 함
중복 제거로 저장 공간 효율 확보
데이터 불일치를 최소화하여 안정성 향상
새로운 데이터를 삽입할 때 릴레이션 재구성의 필요성을 축소
정규화의 장단점
장점 : 데이터 중복 최소화, 이상현상 제거, 저장 공간 효율적 사용
단점 : 처리 명령이 복잡해짐, 실행 속도가 저하됨, 릴레이션간 참조 무결성을 유지하기 위한 노력 필요, 관련있는 릴레이션을 분해하므로 필요한 정보를 취합하기 위한 조인 비용이 증가
정규화 과정
정규화 종류
제1정규형(First Normal Form) : 모든 속성의 도메인이 원자값(쪼갤 수 없는 값)으로만 되어있는 릴레이션
제2정규형(Second Normal Form) : 1NF를 만족하며 키(기본)가 아닌 모든 속성이 기본키에 완전 함수 종속(부분 함수 종속 제거)
제3정규형(Third Normal Form) : 2NF를 만족하며 키(기본)에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닌 릴레이션
BCNF(Boyce Codd Normal Form), Strong 3NF : 3NF를 만족하며 릴레이션의 모든 결정자가 후보키로 지정된 릴레이션
제4정규형(Fourth Normal Form) : BCNF를 만족하며 다치 종속이 제거된 릴레이션
제5정규형(Fifth Normal Form) : 4NF를 만족하며 릴레이션에 존재하는 모든 조인 종속성이 릴레이션의 후보키를 통해서만 성립
#발표 주제 2
배치 작업의 예로는 어떤 것들이 있나요? 거래(트랜잭션), 리포트, 요금 계산은 배치 작업의 대표적인 예입니다. 이 키워드를 사용해 배치 작업을 설명해보세요.
1) 트랜잭션의 경우 데이터베이스 시스템에서 수행되는 작업의 논리적인 단위로 데이터베이스에서는 수많은 트랜잭션 작업이 이루어진다. 만약 모든 트랜잭션을 일일이 처리하는 경우 리소스가 많이 소요되기 때문에 여러 트랜잭션을 한 번에 처리하는 방식으로 처리 속도를 향상한다. 대규모 업무를 처리해야하는 은행에서 계좌이체와 같은 작업을 처리할 때 수천 건 이상의 작업을 개별적으로 처리하기보다 묶어 일괄 처리하는 편이 처리 시간을 단축하고, 오류가 발생해도 전체 작업을 롤백해 일관성 유지에도 유리하다.
2) 리포트의 경우 업무 환경에서 일정한 주기로 자동 생성되는 보고를 일괄적으로 실행하는 작업으로 수동으로 일일이 보고하지 않아도 일정한 주기로 자동으로 리포트를 생성한다. 주기적으로 생성하는 리포트의 경우 실시간으로 처리하지 않아도 되는 작업이므로 배치를 활용하면 효율적이다.
3) 수도세나 전기세와 같은 요금 계산은 월별 혹은 일정 기간 사용량을 집계하여 금액을 정산하므로 사용자에게 즉답이 필요하지 않으므로 배치 작업에 적합하다.
관련 개념 정리
배치
개념
초기의 컴퓨터 시스템에서 사용된 형태로 일괄 처리 작업이라고도
유사한 일들을 모아 일정 시간 한꺼번에 처리하는 것으로 컴퓨터의 활용률이 좋음
반환 시간이 늦지만 하나의 작업이 모든 자원을 독점하므로 CPU 유휴 시간을 줄임
사용자와 상호작용 없이 여러 작업을 미리 정해진 일련의 순서에 따라 일괄적으로 처리
대표적인 배치 작업의 예로 급여 계산, 수도/전기요금과 같은 공과금 계산 연말 결산, 고지서 등
자동으로 수행되는 주기에 따른 구분
정기 배치
일, 주, 월과 같이 정해진 기간에 정기적으로 수행
이벤트성 배치
특정 조건을 설정해두고 조건이 충족될 때만 수행
On-demand 배치
사용자 요청 시 수행
배치 프로그램이 갖추어야할 필수 요소
대용량 데이터
대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리가 가능해야 함
자동화
심각한 오류가 발생하는 상황을 제외하고는 사용자 개입 없이 수행되어야 함
견고성
잘못된 데이터나 데이터 중복 등의 상황으로 중단되는 일 없이 수행되어야 함
안정성/신뢰성
오류가 발생하면 오류의 발생 위치, 시간 등을 추적할 수 있어야 함
성능
다른 응용 프로그램의 수행을 방해하지 않아야 하고, 지정 시간 내에 처리가 완료되어야 함
# References
- 데이터베이스론, 탑스팟, 오재우 편저
- 유상통 컴퓨터일반, 에듀온, 유수 지음
- 정보처리기사 필기 2권, 길벗, 시나공
- 챗 GPT
'devops bootcamp 4 > assignment log' 카테고리의 다른 글
[Infrastructure as Code] IaC 조사 및 발표 준비 (0) | 2023.05.12 |
---|---|
[네트워크 기초] HTTP 헤더 분석, ifconfig 명령어 조사 및 발표 준비 (0) | 2023.04.07 |
[네트워크 기초] 소켓, 포트, HTTP 버전 조사 및 발표 준비 (0) | 2023.04.06 |
[HTTP] REST API 모범 사례 조사 및 발표 준비 (0) | 2023.03.23 |
[HTTP] HTTP 구조 조사 및 발표 준비 (0) | 2023.03.22 |