중복
여러 장소 같은 데이터 최소화
비유연성
유지보수 관리 및 정의와 프로세스 분리
비일관성
데이터 간 상호 연관 관계 정의
외부 스키마
여러 사용자 관점 "구성"
개념 스키마
조직 전체 관점 "통합"
내부 스키마
물리적 저장 구조
연관 관계
소스 코드. 멤버 변수 선언.
의존 관계
오퍼레이션. 파라미터.
어떤 릴레이션 R이 제2정규형이고, 기본키에 속하지 않은 속성 모두가 기본키에 이행적 함수종속이 아닐 때 제3정규형에 속한다.
정규화는 논리 데이터 모델 상세화 과정의 대표적인 활동으로, 논리 데이터 모델의 일관성을 확보하고 중복을 제거하여 속성들이 가장 적절한 엔터티에 배치되도록 함으로써 보다 더 신뢰성 있는 데이터 구조를 얻는데 목적이 있다.
식별관계
부모의 식별자를 자식의 식별자에 포함할 때
비식별관계
부모의 식별자를 자식의 일반속성으로 상속할 때
DML
SELECT, INSERT, UPDATE, DELETE
DDL
CREATE, ALTER, DROP, RENAME
DCL
GRANT, REVOKE
TCL
COMMIT, ROLLBACK
GROUP BY
NULL 또한 그룹 처리
JOIN ON절 조건
A LEFT OUTER JOIN B
ON (A.x IN(1, 2) AND A.y=B.z)
IN(1, 2) 조건이 WHERE절이라면 해당 조건 부합 행만 반환하지만, ON절에 조건이므로 A테이블 모든 행을 반환. 즉, 다른 조건 미부합 행은 NULL로 출력.
NULL 연산
SUM(col1). 세로 연산 경우 NULL을 제외한 후 연산, col1 + col2. 가로 연산 경우 NULL을 포함한 행은 NULL 반환
순수 관계 연산자
SELECT 연산 WHERE 절로 구현
PROJECT 연산 SELECT 절로 구현
JOIN 연산 다양한 JOIN 기능으로 구현
DIVIDE 현재 사용 X
DBMS 옵티마이저는 FROM 절에 나열된 테이블이 아무리 많아도 항상 2개의 테이블씩 짝을 지어 JOIN 수행
FULLOUTER JOIN == LEFT OUTER JOIN UNION(중복 제거) RIGHT OUTER JOIN
서브쿼리
SELECT, FROM, WHERE, HAVING, ORDER BY 절에서, 단일 행 또는 복수 행 비교 연산자와 함께 사용할 수 있으며 연관 서브쿼리는 메인쿼리 컬럼을 포함하고 있는 형태이다. 다중 컬럼 서브쿼리는 서브쿼리 결과로 여러 개의 컬럼이 반환되어 메인 쿼리의 조건과 비교되는데, ORACLE에서만 지원한다.
서브쿼리 단일행 비교 연산자 +, <, <=, >, >=, <>
서브쿼리 다중행 비교 연산자 IN, ALL ...
VIEW
독립성(응용 프로그램 변경 필요 X), 편리성(복잡 질의 단순하게 작성), 보안성(특정 컬럼 제외 생성 가능)
윈도우 함수의 결과는 함수처리로, 결과 건 수에 영향을 주지 않는다.
RANK
중복 값 동차 순위 적용 후, 중복 순위들을 건너 뛰고 다음 순위 책정(5, 5, 5, 8)
DENSE RANK
중복 값 동차 순위 적용 후, 중복 순위들을 건너 뛰지 않고 순차적으로 다음 순위 책정(5, 5, 5, 6)
REVOKE
권한 취소 경우, 취소 당한 권한자로부터 권한을 부여 받은 권한 역시 연쇄적으로 취소
TRANSACKTION
데이터베이스의 논리적 연산 단위를 가리키는 용어
DELETE(/MODIFY) Action
CASCADE: Master 삭제 시, Child 삭제
Set NULL: Master 삭제 시, Child 해당 필드 NULL
Set Default: Master 삭제 시, Child 해당 필드 Default
RESTRICT: Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용
DEPENDENT: Master 테이블에 PK 값이 없는 경우, Child 테이블에 입력 불가
SELECT 절에 기술되지 않은 컬럼은 ORDER BY 절에 사용될 수 없으나, ORACLE은 행기반 database이므로 데이터를 엑세스할 때 행 전체 컬럼을 메모리에 로드하므로 가능하다.
ORACLE 시간 연산
1/24/60 == 1분
1/12/(60/30) == 1/12/2 == 1/24 == 1시간
ORACLE OUTER JOIN 표기
ORACLE
FROM A, B
WHERE A.x = B.x(+)
AND B.y(+) = 'N'
: ORACLE OTUER JOIN은 (+)표기. ORACLE 조건(+)을 ANSI 문장으로 변경할 경우, ON절에 삽입해야 동일 적용.
ORACLE → ANSI
FROM A LEFT OUTER JOIN B
ON (A.x = B.x == ORACLE ver WHERE A.x = B.x(+)
AND B.y ='N') == ORACLE ver AND B.y(+) = 'N'
NULL에는 어떤 연산도 NULL
NULL = NULL은 FALSE 또는 UNKNOWN
공백 ' '
NULL 처리
NVL(a, b)
a가 NULL이면, b 반환
NVL2(x, a, b)
NULL 대상 x, x가 NULL이 아니면, a 반환, x가 NULL이면, b 반환
공백 ' '
공백 ' ' 처리(NULL은 NULL 처리)
NULLIF(a, b)
a == b이면 NULL 반환, a != b이면 a 반환
IFNULL(a, b) / ISNULL(a, b)
a가 NULL이면, b 반환
COALESCE(a, b, ..., n)
NULL이 아닌 인자를 반환