○ 학사관리 테이블 시나리오 : 잘못 설계된 테이블의 예
- 발견된 문제점
① 학생테이블에서 홍길동의 수강신청과목이 추가될수록 칼럼이 계속 추가되는 현상이 보이고 있음
② Null값이 많이 발생되고 있음 (비효율적)
- 문제 발생 이유 : 서로 다른 주제가 같이 있음 → 수강테이블 분리 필요!
○ 학사관리 업무분석
- 학생과 과목은 다대다(N:N) 관계 : 학생 1명이 N개의 과목을 들을 수 있고,
과목 1개가 N명의 학생을 수용할 수 있으므로 N:N 관계이다
- 다:다 (N:N) → 반드시 교차테이블이 있어야 함
- 학생, 수강, 과목 3개의 테이블 필요 (굉장히 일반적인 테이블 구조)
○ 학사관리 테이블 시나리오 : 재설계
○ 학사관리 테이블 정의서
- 총 3개의 테이블: 학생(student), 과목(subject), 수강(enroll)
○ 학사관리 테이블
- 모델링을 바탕으로 만들어진 테이블
- 행 추가까지 완료 → 다음 포스팅에는 이 테이블들로 join 연습할 예정
○ 정규화(Normalization)
- 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스
- 정규화의 목적
① 데이터베이스의 변경시 이상 현상 제거
② 데이터베이스 구조 확장시 재 디자인 최소화
③ 사용자에게 데이터 모델을 더욱 의미있게
④ 다양한 질의 지원
○ 정규화의 종류
① 제 1 정규형
- 모든 속성은 반드시 하나의 값을 가져야함 (원자값)
- 하나의 셀에 하나의 정보
② 제 2 정규형
- 모든 속성은 반드시 기본키 전부에 종속되어야 한다 (기본키 일부에만 종속되어서는 안됨)
- 참조무결성 : 수강테이블의 학번과 과목코드는 반드시 학생테이블과 과목테이블에 존재해야 한다
③ 제 3 정규형
- 기본키가 아닌 모든 속성 간에는 서로 종속될 수 없다 (속성 간 종속성 배제)
'Backend > Oracle DB' 카테고리의 다른 글
13. 학사관리 DB, 테이블 조인 (0) | 2022.05.19 |
---|---|
12. 학사관리 DB 작업 (무결성) (0) | 2022.05.19 |
10. 관계형 DB 모델링 (데이터 모델링) (0) | 2022.05.18 |
09. Oracle DB, 사원(emp) 테이블 연습문제 (DDL, DML 연습) (0) | 2022.05.18 |
08. Oracle DB, 오라클 함수 (nvl, chr, concat, 날짜, 숫자, 문자) (0) | 2022.05.17 |
댓글