728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=xkWzMYAqbqU&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=11

 

01. CUBE 의미

CUBE를 사용하면 결합 가능한 모든 집계를 계산한다.

예를 들어, GROUP BY CUBE(DEPTNO, JOB); 이면

부서별 합계, 직업별 합계, 부서별 직업별 합계, 전체합계가 조회되는 것이다.

 

02. CROSS JOIN 문제

CROSS JOIN은 ON 절을 사용할 수 없다.

사용하면 에러가 발생한다.

모든 경우의 수를 조회하는 조인이다.

 

03. ANSI JOIN

ORACLE의 OUTER JOIN을 ANSI JOIN으로 바꾼 결과이다.

정답은 (2)이다.

04. 키의 종류

 

정답은 (3)이다.

키는 식별자를 이야기 한다.

유일한 인스턴스를 구분할 수 있는 것이 무엇이냐

수퍼키는 유일하게 식별할 수 있는 모든 조합이다.

대신 최소성을 만족하지는 않는다.

후보키는 유일성 + 최소성을 만족한다.

후보키에는 예를 들어 CUST_ID, 주민등록번호 등이 있다.

그러면 CUST_ID를 기본키로 설정을 하면

주민등록번호 등은 대체키가 되는 것이다.

05. ROUND() 함수

반올림하는 함수이다.

ROUND(숫자, 반올림 소수 자리)는 반올림하는 함수이다.

06. 윈도우 함수

(3)은 문법에러이다.

07. 내부 식별자와 외부 식별자

정답은 (3)이다.

08. 서브쿼리 문제

상관 서브쿼리

비상관 서브쿼리

A.COL1이 1이면서 B.COL1이 1이고

동시에 A.COL2이 200이고 B.COL2이고

B.COL3 > 1400인 행을 조회한다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=aAYU18AGyDg&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=11

 

01. 파티션 문제

MANAGER_ID를 파티션으로 나누어서 연봉으로 오름차순을 하고 처음 값 부터 누적계산을 하여

SUM(SALARY)를 도출해낸다.

이로써 또 다른 의미있는 데이터를 만들어낸다.

AND CURRENT ROW와 같은 결과가 나온다.

RANGE BETWEEN 10 PRECEDING AND 150 FOLLOWING을 하면

예를 들어 SALARY가 2500인 열은 SALARY가 2490부터 2650까지의 범위를 만들어내고

이를 파티션으로 COUNT(*)을 한 결과가 컬럼 TTT에 나오는 것이다.

ROWS BETWEEN  1 PRECEDING AND 1 FOLLOWING의 경우 

예를 들어 SALARY가 6500인 경우

그 위의 행인 SALARY가 5800인 행과

바로 그 아래 행인 SALARY가 7900인 행 이렇게 3개의 행의 연봉의 평균값을 계산해서 

결과를 도출하는 것이다.

02. 인라인 뷰 및 UNION 

(1)이 정답이다.

(2)의 경우 문법적으로 오류가 난 경우이다.

group by salary로 하고 select 절에서 job_id를 조회를 하면

예를 들어 1500인 salary를 갖는 컬럼이 job_id를 2개 갖게 된다.

그래서 group by를 사용을 하면 사용할 수 있는 컬럼이 한정이 된다.

그래서 (2)은 정답이 아니다.

union all은 중복도 되지 않고 정렬도 되지 않는다.

union 기능이 sort unique였지만

오라클이 업그레이드 되면서 hash unique(중복제거+정렬 안할 수 있음)

으로 변경되었다.

03. CASE 문법의 종류와 CASE 문법의 NULL 연산

SIMPLE CASE 문법과 

SEARCHED CASE 문법 이렇게 2개의 문법이 있다.

(1)의 경우

SIMPLE CASE 문이다.

WHEN NULL의 경우 '='의 연산을 하므로 NULL은 연산이 불가능하다. 그래서 함수를 사용해야 한다.

그래서 NULL인 컬럼은 else문인 0으로 출력된다.

NULL은 IS NULL 연산으로 연산할 수 있다.

DECODE() 함수는 NULL인 경우 -1. 아니면 있는 값 그대로를 배출하도록 만들어졌다.

예를들어 a.COL1이 NULL이면 -1 아니면 a.coll을 배출한다.

04. WHERE절 사용 방법

정답은 (4)이다.

(2)과 (4)의 다른 점은

정렬이 다르다는 것이다.

05. 데이터 입력 문제

숫자를 VARCHAR2(10) 데이터를 입력하려고 하면

형이 달라서 자기 형으로 바꿔본다. 그래서 TO_CHAR(002)를 한다.

그러면 '002'가 된다.

정답은 (4)이다.

숫자값을 DATE에 넣으려고 한다.

그러면 TO_DATE(20220420)을 하면 날짜 값으로 들어갈 수도 있다.

하지만 에러가 날 확률이 높다.

06. 여러 열 ORDER BY 문제

먼저 ORDER BY COL1 DESC를 한다.

그리고 COL2에서 같은 값들 중 COL3를 기준으로 정렬을 한다.

NULL은 제일 아래로 내려간다.

그래서 정답은

(3)이다.

07. 집계 함수

각 열을 집계해서 조회한다.

이렇게 다양한 컬럼들을 집계해서 조회할 수 있다.

정답은 (2)이다.

08. GROUP BY 활용

정답은 (3)이다.

각 계층별 결과를 정확히 알아야 한다.

GROUP BY DEPTNO, JOB: 이 경우는 전체를 GROUP BY한 결과가 나와선 안 된다.

GROUP BY GROUPING SETS(DEPTNO, JOB): JOB으로도 전체를 GROUP BY한 결과가 나와야 한다.

GROUP BY ROLLUP(DEPTNO, JOB): ROLLUP은 계층적으로 GROUP BY를 하여서 조회한다.

GROUP BY CUBE(DEPTNO, JOB): 모든 경우의 수를 GROUP BY하여 조회한다.

09. ORACLE을 ANSI 표준 SQL문으로 변환하는 문제

정답은 (4)이다.

10. 조인 문제

모든 경우의 수를 구하고

조인 조건에 맞는 결과만 조회한다.

카티션 조인이 된 순간 모든 경우의 수가 처리된 것을 볼 수 있다.

정답은 (1)번이다.

INNER JOIN은 키 값이 같은 결과만 조회한다.

LEFT OUTTER JOIN과 RIGHT OUTTER JOIN은 각각 키 값이 같지 않은 결과도 조회한다.

FULL OUTTER JOIN은 양 측의 테이블에서 키 값이 같지 않은 결과도 조회한다.

CROSS JOIN은 카티션 조인을 하여서 모든 경우의 수를 구한다. 예를 들어 4개 행과 3개 행을 곱해서 12개의 모든 경우의 수를 조인해서 조회한다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=rDBZ6q0QqBU&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=9

 

01. SQL 조회 순서

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY 의 순서로 조회가 된다.

HAVING의 경우 GROUP BY를 통해서 집계가 완료된 상태를 토대로 추가적인 필터링을 하는 것이다.

그리고 SELECT를 통해서 해당하는 데이터가 출력이 된다.

ORDER BY를 통해서 출력하는 대상을 특정 컬럼을 기준으로 정렬을 한다.

그래서 순서를 잘 암기해야 한다.

 

02. 다중 컬럼 연산

예를 들어 컬럼 IN (1,2,3); 이면

컬럼 = 1 OR 컬럼 = 2 OR 컬럼 = 3이 됩니다.

다중 컬럼 연산의 경우

WHERE (COL1, COL2) IN ('x', 'y'), ('KK', 'BB')); 이면

COL1 = 'x' 이고 COL2 = 'y' 이거나 COL1 = 'KK' 이고 COL2 = 'BB'인 경우이다.

각각 AND 그리고 OR 별로 처리가 된다.

여기서 NOT 연산은 TRUE -> FALSE로 그리고 FALSE -> TRUE로 변환하는 것이다.

그러면 해당 컬럼들을 제외한 값을 조회하는 결과가 되므로

같은 결과가 나온다.

이외 2~4번까지를 보면

가로 안에 OR 또는 = 연산자가 들어가는 것을 볼 수 있다.

이러한 방식으로도 연산이 가능하다.

다중 연산을 풀어서 설명한 그림이다.

정답은 (3)이다.

AND와 OR에는 우선순위가 있다.

AND -> OR 순서로 처리가 된다. 마치 수학에서 곱하기와 더하기와 같다.

03. WITH GRANT OPTION 과 권한 회수

예를 들어

REVOKE 권한 FROM B CASCADE 라고 작성을 하시면

WITH GRANT OPTOIN으로 권한을 주었던 그 대상도 연쇄적으로 뺏어버린다.

CASCADE 를 작성을 안 하면 B만 뺏기고 C는 그대로 권한을 갖고 있는 것이다.

CASCADE를 사용을 한 다는 가정하에 정답은 (4)이다.

그러나 CASCADE를 사용을 안 한다면 정답은 (3)이다.

04. CASCADE CONSTRAINT

만일 DROP TABLE [테이블명] CASCADE CONSTRAINTS; 를 하면

테이블과 그에 연관된 제약조건들이 전부 다 삭제가 된다.

예를 들어 STUDENT 테이블을 삭제를 하면 STUDENT_TEL과 STUDENT_ADDR과의 관계가 제거됩니다.

즉 STUDENT_TEL과 STUDENT_ADDR의 FK였던 데이터들은 그대로 남아 있지만 FK였던 제약조건은 의미가 없어지므로 제거가 됩니다.

그 반대로 CASCADE CONSTRAINTS를 붙이지 않는다면 STUDENT_TEL, STUDENT_ADDR은 제약조건에 의해서 제거가 되지 않습니다.

* CASCADE는 SQL-SERVER에서는 지원하지 않는다. SQL-SERVER는 MS사이다. ORACLE사가 아니다.

정답은 (4)이다.

05. DDL/DML/DCL/TCL

정답은 (2) DML에 대한 설명이다.

DCL은 데이터 컨트롤 언어이다.

06. NVL() 함수 사용

GROUP BY가 없으므로 전체를 대상으로 집계를 한다.

NVL() 함수를 사용하므로 만일 CNT 열이 NULL이라면 그 대체할 값을 출력해주는 함수이다.

NVL(CNT, 0) 이면 CNT열의 값이 NULL이면 0으로 대체된다.

그리고 숫자와 NULL을 연산을 하면 NULL은 제외하고 연산이 된다.

정답은 (3)이다.

07. GROUP BY 연산 문제

COUNT(*)의 경우 NULL과 관계없이 개수를 파악한다.

FROM 부터 시작을 해서 GROUP BY를 CLASS열 기준으로 하였다.

그리고 distince NAME으로 NAME열을 기준으로 중복을 제거 하였다.

그리고 count() 함수를 사용한 결과를 얻었으므로 

정답은 (2)이다.

COUNT(1)의 경우

COUNT(*)과 같은 행의 수를 조회를 한다.

성능도 비슷하다. COUNT(*)을 사용할 것을 권장한다.

COUNT(컬럼)의 경우 만일 컬럼이 NULL이면 조회가 결국 되지 않고 개수가 파악된다.

이러한 결과가 조회된다.

08. WINDOW 함수 문제 (순위 문제)

OVER가 나온다면 WINDOW 함수라는 것을 캐치하시고

RANK()의 경우 중복된 순위 다음에는 그 다음 순위를 부여한다.

DENSE_RANK()의 경우 중복된 순위 다음에는 바로 다음 순위를 부여한다.

ROW_NUMBER()의 경우 그대로 1부터 차례대로 순위를 부여한다.

정답은 (2)이다.

09. 윈도우 함수 (집계 문제)

먼저 테스트할 데이터는 HR.EMPLOYEES의 SALARY, JOB_ID 그리고 EMPLOYEE_ID 이다.

OVER() 함수는 SUM(SALARY)의 기준을 정하는 함수이다. 집계 함수 바로 뒤에 붙여서 사용된다.

OVER() 함수에 PARTITION BY를 사용을 하면 JOB_ID를 파티션으로 연봉의 합계를 구한다.

ORDER BY를 통해서 EMPLOYEE_ID를 기준으로 오름차순한다.

RANGE BETWEEN은 행을 어디까지 처리할 것이냐는 의미이다.

UNBOUNDED PRECEDING AND UNBOUNDED FOLLWING 은 구분 없는 이전 그리고 구분 없는 이후까지 행을 처리하겠다는 의미이다.

하지만 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW는 

각 행별로 누적값을 구하게 된다.

정답은 오류가 발생하는 (3)이다. 이미 UNBOUNDED PRECEDING이 범위에 나왔기 때문이다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=eCrz0gQtSD4&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=8

 

1. 오라클과 SQL SERVER에서의 속성 변경 방법

오라클 : ALTER TABLE 테이블명 MODIFY (컬럼명 바꿀자로형 [default 여부] [NULL 여부], ...);

SQL SERVER : ALTER TABLE 테이블명 ALTER COLUMN 컬럼명 바꿀자료형 [default 여부] [NULL 여부];

 

2. 오라클 컬럼 추가

정답은 3번.

ALTER TABLE Mytest ADD JOB.

 

3. TCL

DDL문은 실행되는 순간 자동으로 commit이 된다.

정답은 7,7,9 이다.

 

4. CUBE Function

CUBE 그리고 ROLLUP이라는 그룹함수에 대한 특징을 정확히 파악을 하셔야 합니다.

그룹함수는 3가지가 있었다.

CUBE - 조합이 가능한 모든 경우의 수를 집계

ROLLUP - 

 

GROUPING SETS - 

 

5. UNION 및 MINUS Functions

애스터리크가 나왔다.

컬럼이 하나 이므로 그냥 나열한다.

UNION은 합집합, 중복제거 그리고 정렬을 해주는 기능이 있다.

MINUS는 차집합이다.

답은 3이다.

 

6. 계층형 쿼리

 

7. 계층형 쿼리문의 내장 함수

정답은 2번이다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=lHLx-V76fiA&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=7

 

1. CRUD 매트릭스

행과 열의 매트릭스 방식으로 보여주는 것을 CRUD 매트릭스라고 한다.

그래서 프로세스와 CRUD간의 상관 관계를 알아볼 수 있는 것이다.

데이터와 프로세스의 상관 관점이다.

 

2. 속성의 분류

시, 구, 동, 호를 나누면 어려울 것이다.

그래서 복합하여 사용한다.

이러한 내용을 복합 속성이라고 한다.

 

3. 데이터베이스 3단계 구조

스키마는 관점이라고 보면 된다.

 

4. 반정규화

논리적 데이터 모델링을 할 때 정규화를 필수적으로 한다.

반정규화는 정규화의 반대 개념이다.

중복을 허용하고, 이상한 현상이 발생할 수 있는 상태를 의미.

데이터를 수직 분할하는 이유는 데이터를 100개 출력할 때 컬럼이 많으면 컬럼이 낭비가 된다.

만약에 테이블을 분리했는데, 데이터를 입력해야 한다면 두 테이블 모두 입력을 해주어야 한다.

조인을 하는데 성능을 더 낮게 만드는 경우가 있다.

 

5. 슈퍼/서브 타입 데이터 모델

고객이 슈퍼타입이고 서브타입의 공통적인 속성을 갖는다.

개인고객 그리고 법인고객은 서브타입으로 서로 배타적 관계를 갖는다.

즉 개인고객의 고객번호와 법인고객의 고객번호는 서로 같을 수 없다.

예를 들어 개인고객 고객번호는 1,3,5가 입력되면

법인고객 고객번호는 2,4,6이 입력되는 것이다.

조인이 발생하고 관리가 어렵다.

이렇게 하나로 모아서 관리를 하면 편하겠지만

개인고객 또는 법인고객만 조회를 해야 할 때 전체를 스캔해야 하는 현상이 발생합니다.

SELECT할 때 성능이 안 좋을 수 있습니다.

전부 다 개별적으로 테이블을 생성을 하는 것.

테이블의 수가 많고 조인이 많이 발생해 관리가 어렵다.

 

6. 카디널리티

선택도란 전체 테이블 개수  중에서 내가 뽑고자 하는 개수의 비율이다.

SELECT * FROM TB_CUST WHERE MONEY = 10000; -- 전체 7개 행 중에 2개

선택도: 2/7 == 0.285...

카디널리티(출력된 행의 수) : 선택도 X 전체 레코드수 => 0.285 X 7 => 2

 

7. 데이터 정규화

2차 정규화란

PK A,B를 조합하여 인스턴스 나머지 컬럼 C,D,E를 조회할 수 있다.

여기서 PK A만으로도 나머지 컬럼들을 조회하여 유일하게 식별할 수 있다면

이를 부분 종속성이라고 하여 분리해주어야 한다.

3차 정규화란

컬럼에서 예를 들어 A,B,C,D,E가 있는데

D가 부서코드이고 E가 부서명이며 D가 E를 유일하게 식별할 수 있으면

이를 이행종속성이라고 한다.

테이블을 분리해주어야 한다.

 

8. ERD

IE 표현 기법이다.

PK (식별자)는 중복 x, null x

정답은 3번이다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=eRbRTdNEEsc&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=6

 

관계형 데이터베이스

데이터베이스 관련 용어 정리

데이터를 일정한 형태로 저장해 놓은 것

기존 데이터베이스 기능에 추가로

데이터 손상을 방지 및 복구, 인증된 사용자만 접근 등 추가 기능을 지원하는 관리 시스템

oracle, mysql, sql server...

테이블

개념 모델링 -> 논리 모델링 -> 물리 모델링

엔터티          -> 릴레이션     -> 테이블

SQL (Structured Query Language)

종류는 꼭 외워야 한다.

DDL - CREATE, DROP, ALTER, RENAME, TRUNCATE

DML - SELECT, INSERT, UPDATE, DELETE, MERGE

DCL - GRANT, REVOKE

TCL - COMMIT, ROLLBACK, SAVEPOINT

트랜잭션을 예로 들면

송금을 하려면 일련의 과정 1,2,3 까지 완료했을 때 완료로 입력을 하면 송금이 완료된다.

우리가 지정을 할 수 가 있다. 이것이 바로 TCL을 통해서 다룰 수 있다.

SELECT

DISTINCT는 단 하나의 라는 의미를 갖고 있고 중복 제거를 의미합니다.

컬럼의 앞에 DISTINCT를 붙여서 출력을 하면

컬럼의 중복값이 제거 되어서 각 하나의 데이터만 추려집니다.

SELECT문을 이렇게 세로로 작성하는 이유는 가독성을 좋게 하려고 하기 때문이다.

그리고 필요없는 컬럼은 주석처리를 하기 위함이다.

Alias를 사용하는 경우 영구적으로 바뀌는 것은 아니다. 순간만 임시로 바뀌는 것이다.

띄어쓰기도 하나의 특수문자이다.

oracle에서는 $, _, # 만 가능하다.

SELECT 에서 사칙연산하기

FROM 이 가장 먼저 실행 된다.

그리고 질의 결과에서 보이는 것 처럼 한 번에 던져지는 것이 아니라

한 줄 한 줄씩 던져진다.

컬럼에 조회된 값이 하나 하나 출력이 된다.

SELECT 에서 연결 연산하기 (|| 기호 사용하기)

문자열 연산 기호이다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=FWsIQlBnBxQ&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=5

 

트랜잭션이란?

데이터베이스의 논리적 연산 단위 또는 논리적 업무 단위

100만원이 있다. -> 김영희가 있다 -> 계좌가 있다. -> 송금

                                                       -> 없다.

                           -> 없다. 

100만원이 없다.

여기 주문과 주문상세간의 관계가 잘못되었다.

주문상세의 테이블에는 주문 테이블이 항상 존재한다.

그래서 트랜잭션을 통해서 1) 주문 정보 저장 2) 주문 상세 저장 을 한 트랜잭션으로 묶어야 한다.

식별관계 VS 비식별관계

식별자 관계는 빌려온 FK가 중복 데이터여도 안 되고, 빈 값이어도 안 된다.

비식별자 관계는 빌려온 FK가 PK의 역할을 하지 않는 것이다.

Barker 표기법에서의 점선은 비식별자관계만을 이야기하지 않는다.

IE 표기법에서점선은 비식별자 관계를 이야기한다.

NULL 속성의 이해

엔터티는 행과 열을 유지를 해야 한다.

데이터가 없다고 해서 왼쪽 그림처럼 되어야 하는 것은 아니다.

NULL이 입력되어서 오른쪽 그림처럼 되어야 한다. 행과 열을 유지해야 한다.

* 필수값은 NULL을 입력할 수 없다.

본질식별자 VS 인조식별자

본질 식별자는 업무 본연의 속성이다.

인조식별자의 경우 임의로 만들자 해서 만든 속성이다. 예를 들면 부서코드와 같은 경우이다.

직원연락처이력 테이블에서

식별자 3개를 조합해서 인스턴스를 찾는데

편의를 위해 이력일련번호를 만들어서 

인스턴스를 찾는다.

 

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

* Youtube Link - https://www.youtube.com/watch?v=NrbGR_HiN-Y&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=4

 

정규화란?

데이터 중복을 처리하고 

관심사 별로 처리 되도록

엔터티를 쪼개는 활동

정규화의 반대말로 반정규화가 있다.

중복 포함하기 위해서 엔터티를 합치는 활동이다.

거의 정규화 활동을 하고 나서 특수한 사례에만 반정규화 적용

정규화를 하는 것이 대부분 좋다.

정규화시 입력/삭제/수정의 성능은 향상

조회는 성능 향상 혹은 저하될 수도 있음

함수적 종속이란? F(X) = Y

어떤 기준 값(컬럼)에 의해 데이터가 종속되는 현상을 의미

F(X) = Y에서

X에 "Emp001"을 입력하면 Y로 종속된 유일한 인스턴스의 나머지 값들이 나온다는 것이다.

비정규형: 데이터가 중복이 된 아무렇게나 만든 상태

도메인 원자성(한 칸에 한 데이터)을 만족시키면 1차 정규화가 된다.

부분 종속성 제거를 하면 2차 정규화가 된다.

이행 종속성 제거를 하면 3차 정규화가 된다.

결정자 제거를 하면 BCNF가 된다.

다치 종속을 제거하면 4차 정규화가 된다.

조인속성을 제거하면 5차 정규화가 된다.

3차 정규화 이후로는 정말 특수한 사례에 한다.

1차 정규화

한 칸에 한 값만 들어가도록 한다.

도메인 원자성을 지킨다.

다중 속성이 있거나 하나의 속성에 여러 속성값이 있으면 원자값으로 쪼개준다.

2차 정규화

2차 정규화는 부분 종속 제거이다.

학번 + 과목을 통해서 다음 테이블의 인스턴스를 유일하게 식별할 수 있다.

하지만 학번만 갖고도 성적, 담임교수 그리고 소속학과를 유일하게 식별할 수 있다.

그래서 다음과 같이 학생-교수, 성적 테이블로 나눈 것이다.

그리고 학생-교수 테이블과 성적 테이블은 1:N의 관계이다.

3차 정규화

부서 ID가 부서명을 종속하고 있다.

이런 경우 테이블을 나누어 준다.

첫 번째 테이블은 도메인 원자성을 만족하므로 완전함수 종속이다.

반정규화

정규화/반정규화의 목적은 성능 향상이다.

정규화 상태에서의 데이터 입력은 무조건 좋다.

반정규화는 실무에서 거의 하지 않는다.

다른 방법이 없는지 검토해서 정 방법이 없으면 반정규화를 하는 것이다.

또는 연락처의 경우, 직원 연락처라는 작은 테이블을 만드는 것 보다

직원 테이블에 합쳐서 

성능 향상을 이루는 것이 바람직하다.

조인

여러번 쿼리를 통해서 가져올 데이터를

한번에 가져오는 기능

또한 여러번 쿼리를 조회하는 것 보다 한번에 가져오면 성능이 더 좋다.

성능 관점 때문에 우리가 쓴다.

계층형 데이터 모델

- 자기 자신과 관계가 발생하는 경우

데이터에 관계가 있다.

다음과 같이 데이터가 관계가 있다.

D과장과 C사원은 같은 엔터티이지만 데이터끼리 서로 관계가 있다.

계층 구조를 가진 데이터를 저장한 모델

자기 자신의 엔터티와 관계가 발생하는 경우

계층 쿼리를 통해서 데이터를 조회할 수 있다.

또는 다음과 같이 상호배타적 관계가 있다.

개인고객과 법인고객은 서로 공통적인 부분이 없는 관계이다.

대출현황은 개인/법인 전부 다 대출받을 수 있다.

이 꺽쇠 표시가 있다면 상호배타적 관계이다. 그래서 개인고객과 법인고객은 전혀 공통적인 부분이 없다.

  개인 고객과 법인 고객은 서로 상호배타적 관계이므로

대출현황에 고객구분코드를 통해서 구분해준다.

 

감사합니다.

728x90
반응형
LIST

+ Recent posts