728x90
1. 정규화, 반정규화?
- 정규화의 장점
- 테이터베이스 변경 시 이상 현상을 제거할 수 있다.
- 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
- 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킨다.
- 테이터베이스 변경 시 이상 현상을 제거할 수 있다.
- 정규화의 단점
- 릴레이션의 분해로 인해 릴레이션 간의 JOIN연산이 많아진다.
- 질의에 대한 응답 시간이 느려질 수도 있다. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다.
- 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있다.
- JOIN이 많이 발생하여 성능 저라가 나타나면 반정규화를 적용할 수도 있다.
- 릴레이션의 분해로 인해 릴레이션 간의 JOIN연산이 많아진다.
- 제1 정규형(1NF)
- 각 컬럼이 하나의 속성만을 가져야 한다.
- 하나의 컬럼은 같은 종류나 타입의 값을 가져야 한다.
- 각 컬럼이 유일한 이름을 가져야 한다.
- 컬럼의 순서가 상관없어야 한다.
- 각 컬럼이 하나의 속성만을 가져야 한다.
- 제2 정규형(2NF)
- 제1 정규형을 만족해야 한다.
- 모든 컬럼이 부분적 종속이 없어야 한다.
- 제1 정규형을 만족해야 한다.
- 제3 정규형(3NF)
- 제2 정규형을 만족해야 한다.
- 기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.
- 제2 정규형을 만족해야 한다.
- BCNF(Boyce-Codd Normal Form)
- 제3 정규형을 만족해야 한다.
- 모든 결정자가 후보키 집합에 속해야 한다.
- 제3 정규형을 만족해야 한다.
- 제4 정규형(4NF)
- BCNF를 만족해야 한다.
- 다치 종속이 없어야 한다.
- BCNF를 만족해야 한다.
- 제5 정규형(5NF)
- 제4 정규형을 만족해야 한다.
- 조인 종속이 없어야 한다.
- 조인 연산을 했을 때 손실이 없어야 한다.
- 제4 정규형을 만족해야 한다.
- 반정규화
- 디스크 I/O량이 많아 성능 저하될 때.
- 경로가 너무 멀어 조인으로 성능 저하될 때.
- 컬럼을 계산하여 읽을 때 성능 저하될 것이 예상될 때.
- 디스크 I/O량이 많아 성능 저하될 때.
- 반정규화의 개념과 특징
- 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위 반정규화를 수행하면 시스템의 성능이 향상되고 관리 효율성을 증가시키지만 데이터의 일관성 및 정합성이 저하될 수 있다.
- 과도한 반정규화는 오히려 성능을 저하시킨다.
- 반정규화를 위해서는 사전에 데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능과 단순화를 우선으로 할지를 결정해야 한다.
- 반정규화 방법에는 테이블 통합, 테이블 분할, 중복 테이블 추가, 중복 속성 추가 등이 있다.
- 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위 반정규화를 수행하면 시스템의 성능이 향상되고 관리 효율성을 증가시키지만 데이터의 일관성 및 정합성이 저하될 수 있다.
- 반정규화의 기법
- 테이블 병합 : 1:1관계 테이블 병합, 1:M관계 테이블 병합, 슈퍼/서브타입 테이블 병합
- 데이블 분할 : 수직분할, 수평분할
- 테이블 추가 : 중복테이블 추가, 통계테이블 추가, 이력테이블 추가
- 테이블 병합 : 1:1관계 테이블 병합, 1:M관계 테이블 병합, 슈퍼/서브타입 테이블 병합
2. 분산데이터베이스 설계시
- 분산테이터베이스의 특징
- 분산데이터베이스는 데이터의 무결성을 완전히 보장하는 것이 불가능하다.
- 데이터 조회 성능을 위해서 공통된 속성은 하나의 테이블로 묶을 수 있다.
- 분산데이터베이스는 데이터의 무결성을 완전히 보장하는 것이 불가능하다.
- 분산데이터베이스의 장점
- 지역 자치성, 점증적 시스템 용량 확장
- 신뢰성과 가용성
- 효용성과 융통성
- 빠른 응당속도와 통신비용 절감
- 데이터의 가용성과 신뢰성 증가
- 시스템 규모의 적잘한 조절
- 각 지역 사용자의 요구 수용 증대
- 지역 자치성, 점증적 시스템 용량 확장
- 분산데이터베이스의 단점
- 소프트웨어 개발 비용 증가
- 오류의 잠재성과 처리비용의 증대
- 설계, 관리의 복잡성 증가
- 불규직한 응담 소고
- 통제의 어려움
- 데이터의 무결성에 대한 위협 증가
- 소프트웨어 개발 비용 증가
3. 스키마 구조
- 개념 스키마
- 모든 사용자 관점을 통합한 조직 전체 관점의 통합적 표현이다.
- 모든 응용시스템이나 사용자들이 필요로 하는 데이터를 통합한 조직 전체의 DB를 기술한 것으로 DB에 저장되는 데이터와 그들 간의 관계를 표현하는 스키마이다.
- 모든 사용자 관점을 통합한 조직 전체 관점의 통합적 표현이다.
- 외부 스키마
- 사용자 관점을 통합한 표현이다.
- 사용자 관점을 통합한 표현이다.
- 내부 스키마
- 물리적 관점을 통합한 표현이다.
4. ERD에서 Relationship에 표시 되는 것은?
- 관계명(Membership)
- Entity간 관계에 맺어진 형태이다.
- 관계가 시작되는 쪽을 관계시작점이라 칭하며 받는쪽을 관계끝점 이라고 칭한다.
- 관점에 따라 능동적이거나 수동적으로 명명된다.
- Entity간 관계에 맺어진 형태이다.
- 관계차수(Degree/Cardinality)
- 두 Entity간 관계에서 수행되는 경우의 수(1:1, 1:N, N:1)
- 두 Entity간 관계에서 수행되는 경우의 수(1:1, 1:N, N:1)
- 관계선택사양(Optionality)
- 관계에서 항상 참여하는지 아니면 참여할 수도 있는지를 나타내는 방법따라 필수참여 관계, 선택참여 관계로 나뉜다.
- 선택참여관계일 경우 ERD에서 관계를 나타내는 선에서 선택참여하는 Entity쪽에 원을 표시해야한다.
- 관계에서 항상 참여하는지 아니면 참여할 수도 있는지를 나타내는 방법따라 필수참여 관계, 선택참여 관계로 나뉜다.
5. 인덱스
- 외래키가 설계되어 있지만 인덱스가 없는 상태라면 입력/삭제/수정의 부하가 덜 생긴다.
- 주로 B-Tree 인덱스로 되어 있다.
- 테이블에 만들 수 있는 인덱스의 수는 제한이 없으나, 너무 많이 만들면 성능 부하가 발생한다.
- 조회는 일반적으로 인덱스가 있는 것이 유리하다.
6. Row Chaining과 Row Migration
- Row Chaining
- 정의 : 하나의 Row를 하나의 블록에 저장할 수 없어서 여러 블록에 걸쳐서 저장하는 현상
- 특성 : Initial Row Piece(행 조작)와 Row Pointer로 블록 내에 저장됨
- 문제점 : Row의 정보를 검색하기 위해 하나 이상의 데이터 블록을 Scan해야 하기 때문에 성능이 감소됨
- 해결책 : 블록의 크기를 크게 만든다.
- 정의 : 하나의 Row를 하나의 블록에 저장할 수 없어서 여러 블록에 걸쳐서 저장하는 현상
- Row Migration
- 정의 : Update로 인하여 늘어나는 공간을 저장할 공간이 없어서 다른블록으로 Row를 옮기는 현상
- 특성 : 기존 블록에는 Migration되는 데이터의 Row Header와 블록 주고값을 갖게 되고, 새로운 블록에는 Migration되는 데이터가 저장됨
- 문제점 : Migration된 Row를 읽기 전에 기존 블록에서 헤더를 통해 Migration된 Row를 읽기 때문에 성능이 감소됨
해결책 : PCTFREE를 크게 설정한다, 객체를 Export하고 삭제한 후 Import한다, 객체를 Migrationg하고 Truncate한다.
- 정의 : Update로 인하여 늘어나는 공간을 저장할 공간이 없어서 다른블록으로 Row를 옮기는 현상
7. UNION
- 데이터의 중복된 행을 제거하고 정렬한다.
- 데이터의 중복된 행을 포함하지 않는다.
- UNION ALL은 합집합이다.
8. 트랜젝션
- 원자성(Atomicity)
- 일관성(Consistency)
- 고립성(Isolation)
- 영속성(Durability)
9. SQL문
[⏺️]
✿. ✭. ❤︎
------------------
데이터 ========
- SELECT ✭, ❤︎ FROM (SELECT ✭, ❤︎ FROM ⏺️ ORDER BY ❤︎ DESC) WHERE ROWNUM = 1;
- => 맨 끝에 데이터가 추출된다.
- => 맨 끝에 데이터가 추출된다.
- SELECT ✭, ❤︎ FROM (SELECT ✭, ❤︎ FROM ⏺️ ORDER BY ❤︎ DESC) WHERE ROWNUM > 0;
- => 밑에서부터 위까지 모든 데이터가 추출된다.
- => 밑에서부터 위까지 모든 데이터가 추출된다.
- SELECT ✭, ❤︎ FROM (SELECT ✭, ❤︎ FROM ⏺️ ORDER BY ❤︎ DESC) WHERE ROWNUM <= 3;
- => 끝에서 3건의 데이터가 추출된다.
- => 끝에서 3건의 데이터가 추출된다.
- SELECT ✭, ❤︎ FROM (SELECT ✭, ❤︎ FROM ⏺️ ORDER BY ❤︎ DESC) WHERE ROWNUM = 2;
- => 처음 한 건 추출해서 ROWNUM이 2인지 비교한다.
- => 처음 한 건 추출해서 ROWNUM이 2인지 비교한다.
- NVL(= IS NULL) : A가 NULL이면 B로가고, 아니면 A를 출력
- COALESCE : NULL이 아닌 최초값 출력
- NULLIF : A와 B의 값이 같으면 NULL출력, 아니면 A를 출력
- CASE WHEN A IS NOT NULL THEN A ELSE B END : A가 NOT NULL이면 A출력, 아니면 B를 출력
- SELECT*FROM ⏺️ WHERE NAME LIKE 'A%' : A로 시작하는 모든 ROW
- SELECT*FROM ⏺️ WHERE NAME LIKE '%A' : A로 끝나는 모든 ROW
10. Window Finction
- 행과 행 간의 관계를 정의하기 위해 제공되는 함수
- 순위, 합계, 평균, 행 위치 등을 조작할 수 있다.
- GROUP BY 구문과 병행하여 사용할 수 없다.
- 결과 건수가 줄어들지 않는다.
- PARTITION 구문과 GROUP BY 구문은 둘 다 파티션을 분할한다는 의미에서는 유사하다.
- sum, max, min등과 같은 집계 윈도우 함수를 사용할 때 윈도우 절과 함께 사용하면 집계 대상이 되는 레코드 범위를 지정할 수 있다.
- 윈도우 함수 구조
- ARGUMENT(인수) : 윈도우 함수에 따라서 0~N개의 인수를 설정한다.
- PARTITOIN BY : 전체 집합을 기준에 의해 소그룹으로 나눈다.
- ORDERED BY : 어떤 항목에 대해서 정렬한다.
- WINDOWING : 행 기준 범위를 정한다, ROWS는 물리적 결과의 행 수 이고 RANGE는 논리적인 값에 의한 범위이다.
- WINDOWING
- ROWS : 부분집합인 윈도으 크기를 물리적 단위로 행의 집합을 지정한다.
- RANGE : 논리적 주소에 의해 행 집합을 지정한다.
- BETWEEN ~ AND : 윈도우의 시작과 끝 위치를 지정한다.
- UNBOUNDED PRECEDING : 윈도우 시작 위치가 첫 번째 행임을 의미한다.
- UNBOUNDED FOLLOWING : 윈도우 마지막 위치가 마지막 행임을 의미한다.
- CURRENT ROW : 윈도우 시작 위치가 현재 행임을 의미한다.
'WorkHard > 자격증' 카테고리의 다른 글
[SQLD 개발자] 기출문제 공부(30회) (0) | 2023.03.02 |
---|---|
[SQLD 개발자] 기출문제 공부(21회) (0) | 2023.03.01 |
[SQLD 개발자] 기출문제 공부(21회) (0) | 2023.02.28 |
[SQLD 개발자] 기출문제 공부(21회) (0) | 2023.02.27 |
[SQLD 개발자] 기출문제 공부(21회) (0) | 2023.02.23 |