[목차]
01. 데이터베이스 설계
실무 능력, 경험 → 단, 좋은 설계와 나쁜 설계는 분명히 존재한다.
단계
👉🏻요구사항 수집 및 분석개념적 → 논리적 → 물리적
구현
➡️ 개념적
👉🏻ERD, DBMS에 독립적이다.개체와 속성을 추출한다.
업무와 관련이 깊은 명사를 추출한다.
광범위하고 일반적인 의미. 제외 대상
예시) 마트에서 상품을 구입하는 경우
- 상품, 마트, 고객, 직원, 관리자
객체 간의 관계를 추출한다.
관계 : 개체 간 의미있는 연관성
추출 방법 : 요구사항 문장에서 개체 간 연관성을 의미있게 표현한 동사를 추출한다.
관계 추출 예시
- 회원이 상품을 주문한다.
- 제조업체와 제품 → 공급한다.
- 회원이 게시글을 작성한다.
➡️ 논리적
👉🏻DBMS에 적합한 구조 설계릴레이션 스키마로 변환한다.
속성에 대한 세부 내용 결정
- 데이터 타입, 길이, NULL 허용 여부, 기본 값, 제약조건 등등
릴레이션 변환 규칙
- 모든 개체는 릴레이션으로 변환한다.
- 다대다 관계는 릴레이션으로 변환한다.
- 1대다 관계는 외래키로 표현한다.
- 1대1 관계는 외래키로 표현한다.
- 다중 값 속성은 릴레이션으로 변환한다.
1) 다대다 관계
- 개체의 핵심 속성을 추출한다.
고객 → 이름, 주소, 나이 등
도서 → 책이름, 출판사, 단가 등
- 식별관계와 비식별관계
- 식별 : 상품코드 + 회원아이디 (중복 가능)
- 비식별 : 주문코드 + 상품코드 + 회원아이디 (주문코드로 중복 가능)
2) 1대다 관계는 외래키
- 제조 업체 - 상품 : 여러 상품을 공급한다.
- 제조 업체 → 업체명(pk), 연락처, 주소, 담당자
- 상품 → 상품코드, 상품명, 재고량, 단가, 업체명(fk)
- 강한 개체와 약한 개체
- 강한 개체 : 다른 개체의 도움 없이 존재할 수 있다.
- 약한 개체 : 독자적으로 존재할 수 없다. 반드시 상위 개체가 필요함.
약한 개체가 참여하는 1:n 관계는 외래키를 포함하여 기본키로 지정한다.
3) 1대1 관계는 외래키
- 1:1관계는 많이 없다.
- 일반적인 1:1 관계는 외래 키를 서로 주고 받는다.
- 필수적으로 참여하는 개체의 릴레이션에 외래 키를 받는다.
- 모든 개체가 1:1 관계에 필수적으로 참여한다면, 릴레이션을 합칠 수 있다.
- 일반적인 1:1 관계
- 남자(남자번호,이름,연락처,건강상태, 여자번호) 여자(여자번호,이름,연락처,건강상태, 남자번호)
- 필수적으로 참여하는 개체
- 남자(남자번호,이름,연락처,건강상태, 여자번호) 여자(여자번호,이름,연락처,건강상태)
- 모든 개체가 1:1 관계에 필수적으로 참여
- 남자(남자번호,이름,연락처,건강상태) 여자(여자번호,이름,연락처,건강상태) 혼인(남자번호,여자번호,남자이름,남연락처,남건강상태,여이름,여연락처,여건강상태)
➡️ 물리적
👉🏻문서화한 내용을 실제로 만든다.CREATE TABLE 테이블_이름
- 구현
- eXERD - 데이터 모델링 툴
02. 정규화
기본 원칙 : 하나의 테이블에는 중복된 데이터가 없도록 하는 것
이상 현상(Anomaly)
👉🏻데이터를 조작(삽입, 수정, 삭제)하는 경우, 이상 현상이 발생한다.이상 현상이 발생하면 데이터베이스의 일관성이 훼손되고, 무결성이 깨진다.
일관성이 깨져서 데이터의 불일치 현상이 발생한다.
➡️ 삽입 이상
- 릴레이션에 데이터를 삽입 시, 원하지 않는 데이터도 함께 삽입해야하는 현상
➡️ 삭제 이상
- 릴레이션에서 튜플 삭제 시, 원하지 않는 값들도 함께 삭제되는 현상
➡️ 갱신 이상
- 릴레이션의 튜플 속성 값 갱신 시, 일부 튜플의 정보만 갱신되어 정보의 모순이 발생
정규화
👉🏻데이터의 중복과 이상 현상을 최소화하기 위해 Normal Form(NF)에 따라서 관계형 데이터베이스를 구성하는 과정이다.NF는 정규화 되기 위해 지켜야 하는 규칙들
정규화 과정은 순차적으로 진행하며, NF을 만족하지 못하면 만족하도록 테이블의 구조를 조정해야 한다.
튜플을 삭제했을 때, 함께 저장되어 있는 다른 데이터까지 연쇄적으로 삭제되는 현상 발생
이상 현상이 발생하는 릴레이션을 분해하여 이상 현상을 없애는 과정.
함수적 종속성을 판단하여 정규화를 진행한다.
➡️ 함수적 종속성(Functional Dependency, FD)
- 속성들 간 관련성
- 정규화 진행 전, 테이블을 분석하여 기본 키와 함수 종속성을 파악해야 한다.
- FD를 이용해서 릴레이션을 연관성 있는 속성들로만 구성되도록 분해하여 이상 현상이 발생하지 않는 릴레이션으로 만들어야 한다.
- x의 값에 따라서 y의 값이 유일하게 결정되는 것.
→ x가 y를 함수적으로 결정한다.
→ y는 x에 함수적으로 의존한다.
두 집합 사이의 제약 관계를 FD라고 한다.
x : 결정자, y : 종속자
- 완전 함수 종속 : 어떤 속성이 기본 키에 대해 완전히 종속적인 경우.
ex) 성적을 알려면 학번과 과목명을 알아야 한다.
- 부분 함수 종속 : 어떤 속성이 기본 키에 대해 부분적으로 종속
➡️ 제 1 정규형(1NF)
- 릴레이션의 모든 속성의 값이 원자값을 만족하면, 제 1 정규형이라고 한다.
- 1) 컬럼은 하나의 값만 가져야 한다.
- 2) 반복되는 데이터를 제거한다.
- 예시👉🏻컬럼은 하나의 값만 가져야 한다.
학번 과목명 성적 이름 100 {전자계산기, 운영체제} {95, 90} A 200 {DB, 데이터통신} {81, 75} B 300 운영체제 82 C ⬇️
학번 과목명 성적 이름 100 전자계산기 95 임하라 100 운영체제 90 임하라 200 DB 81 이혜영 200 데이터통신 75 이혜영 300 운영체제 82 박규민
➡️ 제 2 정규형(2NF)
- 릴레이션이 제 1 정규형 상태, 기본 키가 아닌 속성들이 기본 키에 완전 함수 종속일 때, 제 2 정규형을 만족하는 릴레이션이라고 말 할 수 있다.
→ 부분 함수 종속 제거.
- 완전 함수 종속인 속성들을 떼서 테이블을 만들어 준다.
- 부분 종속(Partial Dependency) → 2 정규형 완료
- Composite Primary Key(복합 키)
- 기본 키의 역할을 할 수 있는 컬럼이 없다고 가정, PK를 정의할 수 있다.
➡️ 제 3 정규형(3NF)
- 릴레이션이 2 정규형을 만족, 기본 키가 아닌 모든 속성 간에는 서로 종속될 수 있다.
- 이행적 종속 : A→B, B→C, A→C
- 3NF : A→C 관계가 잘못된 관계인지 판단해야 한다.
- PK가 아닌 다른 일반 컬럼에 종속된 컬럼을 다른 테이블로 빼는 작업.
➡️ BCNF(3정규형에서 강화)
- 모든 결정자는 후보 키에 속해야 한다.
➡️ 4, 5 NF → 후보 키에 관련된 내용. 3 정규형까지 진행.
무손실 분해
👉🏻릴레이션을 분해 → 이상 현상을 제거하는 과정.릴레이션의 관계 유지를 위해 분해된 릴레이션에 공통 속성을 한 개 이상 배치해야 한다.
왜 공통 속성을 분해시킨 릴레이션에 배치할까
➡️ 분해된 릴레이션을 다시 원래 릴레이션으로 조인할 때, 데이터 손실 없이 원래 릴레이션으로 합쳐지면, 무손실 분해라고 한다.
반정규화
👉🏻시스템의 성능 향상, 개발 및 운영의 편의성을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위➡️ 방법
- 테이블 통합
- 테이블 분할
- 중복된 테이블 추가
- 중복 속성 추가
과도한 반정규화는 오히려 성능을 저하시킬 수 있다.
tag : #데이터베이스 #DB #설계 #정규화 #이상현상 #무손실 분해 #반정규화
Uploaded by N2T