You are on page 1of 8

참고: https://www.youtube.com/watch?

v=gmMaH5mMJ9M&t=2585s

데이터 모델링(07:07)

현실세계를 단순화하여 표현, 업무를 설명하고 분석하기 위함

유의점

중복성: 중복 방지

비유연성: 불변, 사용분리

비일관성: 상호관계를 명확하게 정의

추상화: 간략하게 표현

단순화: 약속된 규약에 의해

명확(정확)화: 명확하게

개념적: 추상화수준 높음, 포괄적>> 핵심 엔터티

논리적: 정규화, 독립성, 재사용성

물리적: 물리적 성능과 저장

데이터 관점: 업무가 어떤 데이터와 관련이 있는지 또는 데이터간의 관계는 무엇인지에 대해 모델링

프로세스 관점: 업무가 실제로 하고 있는 일은 무엇인지 또는 무엇을 해야하는지 모델링

상관 관점:

ERD 작성(12:04)

순서: 도출-배치-관계설정-기술-참여도-필수여부

도배관기참필

스키마(13:01)

외부: 사용자 관점, 여러 개의 외부 스키마

개념: 관리자 관점, 논리구조, 일반적 스키마

내부: 설계 관점,어떻게 물리적으로 저장되는지


엔터티: 관리대상, 유일한 식별자, 2 개 이상의 인스턴스, 2 개 이상의 속성, 1 개 이상의 관계, 명사

유형 엔터티: 물리적(상품, 교수) vs 개념 엔터티: 개념적 존재(강의, 부서) vs 사건 엔터티: 비즈니스로 발생(구매, 판매
영업) – 제일 양이 많음

기본 엔터티: 독립적으로 생성, 관리(고객, 부서, 판매제품) vs 중심 엔터티: 행위를 생성한다. Vs 행위 엔터티: 2 개 이상의
부모로부터 발생(주문이력, 수납)

속성: 엔터티가 가지는 항목, 최소의 데이터 단위, 인스턴스의 구성요소, 업무에서 필요, 주식별자에 함수적으로 종속,
하나의 인스턴스는 하나의 속성값만 가짐

도메인 : 속성의 범위

기본 속성: 비즈니스에서 도출되는 본래의 속성 (이름, ID)

설계 속성: 모델링 과정에서 발생되는 속성(상품코드, 지점코드)

파생 속성: 다른 속성에 의해서 만들어지는 속성(합계, 평균)

주 식별자: 유일성, 최소성, 대표성, 불변성, 존재성, 주로 사용되는 속성, 이름, 너무 많은 속성

보조 식별자: 유일성, 최소성만 만족, 연관성이 약할 경우

내부 식별자: 자연스럽게 존재하는 식별자 <-> 외부 식별자: 관계를 통해 생성되는 식별자

본질 식별자: 원래 의미를 갖고 있음(대체) <-> 인조 식별자: 인위적으로 만들어지는 식별자

단일 식별자: 하나의 속성으로 구성 <-> 복합 식별자: 다수의 속성으로 구성

관계 분석: 강약, 자식독립 PK, 복잡성, 생산성

관계 읽기: 하나> 기준 엔터티> 관계 차수> 대상 엔터티> 관계 선택사양> 관계명

강한(식별)관계: 실선, 부모 엔터티의 주식별자가 자식에게 상속

약한(비식별)관계: 점선, 연관성이 약할경우, Cycle 이 다름, 추후 관계 통합, 별도생성 유리

슈퍼키: 유일성만 만족 >> 후보키: 유일성, 최소성 만족>> 기본키: 엔터티를 대표하는 키

외래키: 참조무결성 확인을 위해 사용, 대체키: 기본키를 제외한 나머지 키

성능 데이터 모델링(36:40)
정규화, 반정규화, 용량

정규화(35:56)

제 1 정규화: 원자성 확보, 기본키 설정

제 2 정규화: 기본키가 2 개 이상(복합키)으로 이루어진 경우, 부분함수 종속성을 제거

제 3 정규화: 기본키를 제외한 칼럼 간 종속성을 제거, 이행 함수 종속성을 제거

제 2 정규형: 모든 속성의 도메인이 원자 값(atomic value)으로만 (다중값이 아닌) 구성되어 있으면 제 1 정규형에 속한다.

제 2 정규형: 제 1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2 정규형에 속한다.

제 3 정규형: 제 2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3 정규형에
속한다.

반정규화(40:41)

조회성능은 향상되지만, 유연성 낮아진다.

절차: 대상조사-다른 방법 검토-반정규화 수행


순서: FROM-WHERE-GROUP BY-HAVING-SELECT-ORDER BY

GROUP BY(19:30)

그룹별로 묶어서 통계를 내준다.

HAVING(19:30)

WHERE 로 ROW 를 제거한 나머지로 GROUP BY 하고

GROUP BY 연산 이후의 조건절

ORDER BY

Oracle 에서는 가장 큰 값

SQL 에서는 가장 작은 값

DDL(27:28)

테이블 객체 등의 구조를 정의하는 명령어

CREATE: 문법

ALTER: Table, Column: rename modify, drop, add constraint

DROP: cascade constraint

TRUNCATE: data 만 삭제

VIEW: 문법, 보안, 여러 개 생성가능, 연산이 제한적, 쉽게 변경할 수 없음, 인덱싱하기 어려움

DML(31:47)

데이터를 조회, 입력, 삭제, 수정하는 명령

SELECT: 문법

INSERT: 문법, 두 가지 방법

UPDATE: 문법,WHERE 절 사용

DELETE: 행삭제, WHERE 사용 할 수 있음

DCL(35:24)

권한을 부여하거나 회수하는 명령어


GRANT: 문법

REVOKE:

ROLE:

TCL(35:50)

트랜젝션을 관리하는 명령어

원자성: ALL OR NOTHING

일관성: 전에 오류 없으면, 후에도 오류 없어야함

고립성: 하나가 실행중일 때 다른 트랜잭션이 접근할 수없다.

영속성: 성공적으로 수행되면 갱신한 내용은 영구저장

JOIN(39:33)

Cross JOIN: 두 테이블 간에 매칭되는 모든 조합을 출력(카타시안 곱), 조건 따로 없음

Inner JOIN: 특정 컬럼끼리 값이 같은 것만 출력, INNER 은 생략가능(ON 이 없으면 cross 와 같음)

Natural JOIN : 동일한 이름을 갖는 칼럼들에 대해 자동으로 JOIN(WHERE 에서 사용, ON, USING 사용)

Outer JOIN: 한 쪽은 매칭되는 값이 없으면 NULL (ORACLE 에서는 ‘,’찍고, 붙어지는 쪽에 +기호

등가 조인: 정확히 일치하는 경우, ‘=’기호를 사용, AS 지정

비등가 조인: 부등호, BETWEEN 을 사용한다.

ON: 조건의 키로 사용 vs USING: 양쪽에 공통으로 존재하는 컬럼을 사용

계층형 SQL: 순방향(PRIOR 자식=부모 : 부모->자식)

Start with: 시작조건

Connect by prior: 관계 방향(prior) 붙어있는 쪽에서 흘러온다.

Where, SELECT, CONNECT BY 절 사용, Order Siblings by

그룹함수

GROUPING: 컬럼의 소계 여부를 출력, 다른 함수들을 지원

GROUPING SETS: 집계 대상 컬럼에 대한 소계 출력, 총합계가 없음 – 순서는 상관 없음


ROLLUP: 해당 컬럼의 소계 및 총계를 출력 – 순서에 따라서 출력이 달라진다.

CUBE: 결합 가능한 모든 경우의 수에 대한 집계 출력 – 가장 성능 불리, 순서 상관 없음

집합함수

And or And 의 경우 And 먼저하고 or 해주면됨

윈도우함수(49:20)

*순위:

RANK: 11345

DESNE_RANK:11234

ROW_NUMBER: 12345

*집계, 계산: SUM, AVG, COUNT, MAX, MIN

*ROWS,위치: FIRST, VALUE, LAST_VALUE,

LAG:특정 기준값의 순서에 따라서 이전 값이나 이후값을 출력할 수 있음

LEAD

*백분율,비율: CUME_DIST RATIO_TO_REPORT, PERCENT_RANK,

NTILE: 구간으로 나눠서 해당 구간을 보여준다.

RANGE: 특정 값을 기준으로 데이를 줄 세운뒤 값의 범위를 기준으로 연산하여 출력한다.


<DML> - IU,SD: 무엇을 원하는지

INSERT INTO T_name(col1, col2) VALUES (Val1, Val2);

INSERT INTO VALUES(Val1, Val2…);

UPDATE T_name SET Col1=Val2 WHERE Col1=Val1;

SELECT Col1 FROM T_name;

SELECT * FROM T_name;

SELECT DISTINCT Col1,Col2 WHERE Col1=Val1 AND T_name.Val=T_name.Val;

DELETE FROM T_name [WHERE 조건];

* TRUNCATE TABLE FROM T_name;

* DROP TABLE FROM T_name];

<DDL> - CARD (ORACLE 에서는 자동 COMMIT>

CREATE TABLE T_name (Col1, Col2…) VALUES (Val1, Val2…);

*CREATE INDEX I_name ON T_name(C_name);

*S ALTER TABLE T_name ALTER C_name D_type NOTNULL/NULL;

*O ALTER TABLE T_name MODIFY C_name D_type NOTNULL/NULL;

*O ALTER TABLE T_name DROP COLUMN C_name;

*O ALTER TABLE T_name ADD CONSTRAINT 제약이름 PRIMARY KEY C_name;

RENAME T_name TO T_name2;

<DCL> - GR

GRANT SELECT ON SCHEMA :: A_USER TO U_name;

REVOKE SELECT ON SCHEMA :: A_USER FROM U_name;

DENY SELECT ON SCHEMA :: A_USER TO U_name;

<기타 함수>

LTRIM

RTRIM

LPAD

SUBSTRING(‘STRING’,m[n]): STRING 에서 m 자리에 위치한 n 개의 글자를 return

CONCAT

CASE
CEIL

FLOOR

ROUND

TRUNC

NVL(a,b): a 가 NULL 이면 b 출력

ISNULL(a,b): a 가 NULL 이면 b 출력

IS NULL

IS NOT NULL

NULL IF(a,b): a==b 이면 NULL, a!=b 이면 a 출력

COALESC(a,b,c…): NULL 이 아닌 최초 값 출력

LIKE

DISTINCT

CASCADE

RISTRICT

DEPENDENT

%: 0 개 이상의 문자

_: 1 개 문자

You might also like