[DB/SQLD] SQLD 문제풀이 중요개념 정리 (1)

2 분 소요

데이터모델링

데이터 모델링의 3 요소는 things, attributes, relationships 실제 데이터베이스 구축 시 참고되는 무델은 물리적 데이터 모델링 개념 모델리에서 물리 모델링으로 가면서 더 구체적이며 개념 모델링이 가장 추상적 논리 모델링의 외래키는 물리 모델에서 반드시 구현되지 않는 선택 사항이다.



Hash Join

해시 조인은 cpu 연산이 많이 발생되는 조인으로 조인을 할 때 선행 테이블의 크기가 작아야 유리한 조인.

Hash Join 특징

  • 조인 칼럼의 인덱스가 존재하지 않을 경우에도 사용할 수 있는 기법
  • 해시 함수를 이용해 조인을 수행하기 때문에 ‘=’로 수행하는 조인인 동등조건에서만 사용가능
  • 해시 함수가 적용될 때 동일한 값을 항상 같은 값으로 해시됨을 보장
  • 작업을 수행하기 위해서 해시테이블을 메모리에 생성해야 한다.
  • 메모리에 적재할 수 있는 영역의 크기보다 커지면 임싱영역(디스크)에 저장
  • 결과 행의 수가 적은 테이블을 선행 테이블로 사용하는 것이 좋음
  • 선행 테이블을 build input이라고 하며 후행 테이블은 prove input이라고 한다.



정규화

정규화 종류 정규화 내용
제1정규화 모든 속성은 중복된 값을 가지지 않는다.
제2정규화 식별자의 부분 속성에 대해서만 종속관계인 부분함수종속을 제거하여 식별자 전체 속성에 대해서 종속관계인 완전 함수 종속을 구성
제3정규화 식별자를 제외한 일반 속성 간에 종속을 제거
보이스-코드정규화 다수의 주식별자를 분리
제4정규화 하나의 릴레이션에서 한 속성에서 다른 속성에 대한 결과값이 여러개 나오는 다치 종속을 분리
제5정규화 결합 종속일 경우 다수의 테이블로 분리



분산 데이터베이스의 투명성

분할, 위치, 지역, 중복(복제), 병행, 장애 투명성이 있다.



TCL 장점

commit과 rollback의 장점은 데이터 무결성 보장, 영구적인 변경을 하기 전에 데이터의 변경 사항 확인 가능, 논리적으로 연관된 작업을 그룹핑하여 처리 가능



ALIAS

select p.player_name 선수명, t.team_name 팀명
from player p, team t
where p.team_id = t.team_id
order by 선수명;

from절에 테이블에 대한 alias를 사용했을 때 중복된 이름이 있는 경우 select절에서는 반드시 alias명을 사용해야 한다.



equi join

equi join은 반드시 기본키, 외래키 관계에 의해서만 성립되는 것은 아니다. 조인 칼럼이 1:1로 맵핑이 가능하면 사용가능.



self join

self join은 하나의 테이블에서 두개의 칼럼이 연관 관계를 가지고 있는 경우에 사용



서브쿼리

상호 연관 서브쿼리는 서브쿼리가 메인쿼리의 행수 만큼 실행되는 쿼리로 실행속도가 상대적으로 떨어진다.



절차형 sql

절차형 sql을 이용해 procedure, trigger, user defined function을 만들 수 있다.



인덱스

  • 인덱스는 내림차순으로 생성 및 정렬된다.
  • 비용적인 측면에서는 전체 테이블 스캔이 유리할 수 있다.
  • 규칙 기반 옵티마이저의 규칙에 따라 적절한 인덱스가 존재하면 전체 테이블 스캔보다는 항상 인덱스를 사용하려고 한다.
  • 인덱스 범위 스캔은 결과 건수만큼 반환한다. 결과가 없으면 한 건도 반환하지 않을 수 있다.



조인

  • from절에 아무리 많은 테이블이 나열되더라도 항상 2개씩 조인된다.
  • nested loop join은 중첩된 반복문과 유사한 형식
  • nested loop join은 선행 테이블의 조건을 만족하는 건수만큼 반복 수행
  • hash join은 작은 테이블을 선행 테이블로 사용하는 것이 성능관점에서 좋다.



select문 처리 순서

from, where, group by, having, select, order by



그룹 함수

group by cube(deptno, job);
group by grouping sets(deptno, job, (deptno, job), ());



union, minus

select * from A union select * from B minus select * from C;

위 쿼리문을 실행하면 1,3,4,5가 반환된다.

A : 1,2,3,4 B : 4,5 C : 2