1. 정규화, Normalization
2. PL/SQL
1. 정규화, Normalization
[ 정의 ]
- 모델링 작업 > ERD > 정규화 > 안정성 높고, 작업하기 편한 ERD
- 자료의 손실이나 불필요한 정보를 없애고, 데이터의 일관성을 유지하고, 데이터 종속을 최소화하기 위해 자료구조(ERD)를 수정하는 작업
[ 목적 ]
1) NULL 제거
2) 중복값 제거
3) 삽입, 갱신, 제거에 따른 이상 현상 제거 > 데이터 무결성 보장
[ 함수 종족(Functional Dependency) ]
- 하나의 테이블내의 컬럼끼리의 관계 표현
- 정규화는 '부분 함수 종속' or '이행 함수 종속'을 모두 없애고, 모든 컬럼의 관계를 '완전 함수 종속'으로 만드는 작업
[ 종류 ]
- 형태: 1개 테이블 --> (정규화) --> 2개 이상의 테이블
1) 제 1 정규화, 1NF
- 모든 컬럼(속성)은 원자값을 가진다.
- 여러개로 분리 가능한 값을 1개의 컬럼안에 넣지 말 것
2) 제 2 정규화, 2NF
- 기본 키가 아닌 모든 컬럼은 기본키에 완전 함수 종속이어야 한다.
- 부분 함수 종속 컬럼 발견시, 부분 함수 종속 제거
- 일부 컬럼이 복합키 모두에게 종속이 아니라, 복합키 일부에만 종속되는 현상
3) 제 3 정규화, 3NF
- 기본 키가 아닌 모든 컬럼은, 기본키가 아닌 다른 컬럼에 종속되면 안된다.
- 이행 함수 종속 컬럼 발견시, 이행 함수 종속 제거
[ 관계형 데이터 베이스 시스템(Oracle)이 지향하는 데이터베이스 상태 ]
1) 되도록 셀이 NULL 상태를 가지지 않는다. (NULL 상태의 셀이 많으면 좋지 않다.)
2) 중복값을 저장하지 않는다.
--> 동일한 성격의 데이터 1개 이상의 테이블에 저장하지 않는다.
--> 같은 데이터를 여기저기 동시에 저장하지 않는다.
--> 공간 낭비, 관리 불편
3) 하나의 셀 > 반드시 원자값 저장(단일값, 분리될 수 없는 값(Scaler))
[ 역 정규화 ]
- 정규화된 결과를 다시 원래대로 되돌리는 작업
- 형태: 2개의 테이블 --> 1개 테이블
2. PL/SQL
[ 정의 ]
- Procedural Language Extensions to SQL
- 절차성 언어
- 흐름과 제어를 추가한다.
- ANSI-SQL 모두 지원
[ 프로시저, Procedure ]
- 메소드, 함수, 서브루린 등..
- 순서가 있는 코드의 집합
1) 익명 프로시저
- 1회용
- 오라클에 저장 X
2) 실명 프로시저
- 반복용
- 저장 프로시저
- DB Object
[ 프로시저 블럭 구조(골격) ]
1) DECLARE
- 선언부
- 프로시저에 사용할 변수, 객체 등을 선언하는 영역
- 생략 가능
2) BEGIN
- 실행부(구현부)
- BEGIN ~ END : 블럭 역할
- 프로시저 구현 코드를 작성하는 영역(메소드의 BODY 역할)
- 생략 불가능
- 업무 관련 코드 작성: ANSI-SQL + 연산, 제어 추가(PL/SQL 구문)
- JAVA의 try절 역할
3) EXCEPTION
- 예외 처리부
- 예외 처리 코드를 작성하는 영역
- 생략 가능
- JAVA의 catch절 역할
4) END
- 실행부(구현부)
- 생략 불가능
[ PL/SQL 기본 작성법 ]
1) 자료형
- ANSI-SQL과 동일(확장)
2) 변수 선언하기
- 변수명 자료형 [NOT NULL] [DEFAULT 값];
- NAME VARCHAR2(100) NOT NULL
- ANSI-SQL에서 테이블의 컬럼을 선언하는 방식과 유사
- 변수는 주로 질의의 결과(***)나 인자값을 저장하는 용도로 사용
3) 대입 연산자
- 컬럼명 = 값 ----> ANSI: UPDATE
- 변수명 := 값 ----> PL/SQL 방식
[ SELECT INTO ]
- PL/SQL에서 많이 사용하는 SELECT의 결과값을 변수에 저장하는 구문이다.
- 사용법: SELECT 컬럼명 INTO 변수명 FROM 테이블명 ~
- 사용조건(한가지라도 만족못하면 ERROR발생)
1) 컬럼의 개수 = 변수의 개수
2) 자료형 일치
3) 순서 일치
MEMO>
# 정규형에서 역 정규형은 되돌리는 작업이므로, 위험요소가 크기때문에 되도록 쓰지 않도록 하자
# ANSI-SQL과 PL/SQL의 차이점을 솔직히 잘 구분 못했는데, 비절차성, 절차성 차이를 깨달았다.
# SQL을 배우면 배울수록 프로그램에서 데이터베이스는 엄청나게 중요한 역할을 하고 있다는것을 알게 되고, 이 데이터베이스를 만들 때, 구현 하는것보다 설계 단계에서의 작업이 가장 중요하다는것을 깨닫는거같다.
# PL/SQL에서의 SELECT절 이용시 꼭 변수명을 지정해주고 SELECT INTO절을 이용하자
'인천일보아카데미 > - 학습일지' 카테고리의 다른 글
[학습일지]JAVA교육일지 54일차 (0) | 2022.06.25 |
---|---|
[학습일지]JAVA교육일지 53일차 (0) | 2022.06.24 |
[학습일지]JAVA교육일지 51일차 (0) | 2022.06.24 |
[학습일지]JAVA교육일지 50일차 (0) | 2022.06.24 |
[학습일지]JAVA교육일지 49일차 (0) | 2022.06.21 |