1과목: 데이터 모델링의 이해
엔터티(Entity)
업무에 필요한 정보를 저장·관리하기 위한 집합입니다. 쉽게 말하면 테이블의 후보예요.
| 분류 기준 | 유형 | 예시 |
|---|---|---|
| 유무형 | 유형 엔터티 | 사원, 물품 |
| 개념 엔터티 | 조직, 보험상품 | |
| 사건 엔터티 | 주문, 청구 | |
| 발생 시점 | 기본 엔터티 | 사원, 부서 |
| 중심 엔터티 | 계약, 주문 | |
| 행위 엔터티 | 주문목록, 사원변경이력 |
속성(Attribute)
엔터티가 가지는 최소 의미 단위입니다.
- 기본 속성: 업무에서 직접 추출 (이름, 주소)
- 설계 속성: 설계 과정에서 만든 속성 (일련번호, 코드)
- 파생 속성: 다른 속성으로부터 계산 (합계, 평균)
관계(Relationship)
엔터티 간의 논리적 연결입니다.
- 존재 관계: 부서 — 사원 (소속)
- 행위 관계: 고객 — 주문 (주문하다)
카디널리티(1:1, 1:N, M:N)와 필수/선택 참여 여부를 구분하는 문제가 자주 나옵니다.
식별자(Identifier)
엔터티에서 각 인스턴스를 유일하게 구분하는 속성입니다.
| 구분 | 주식별자 | 비식별자 |
|---|---|---|
| 특징 | 유일성 + NOT NULL | 유일할 수도, 아닐 수도 |
| 예시 | 사원번호 | 이메일 |
정규화
정규화 단계 정리
| 단계 | 핵심 | 제거 대상 |
|---|---|---|
| 1NF | 원자값만 허용 | 반복 그룹, 다중값 |
| 2NF | 부분 함수 종속 제거 | 복합키의 일부에만 종속되는 컬럼 |
| 3NF | 이행 함수 종속 제거 | A→B→C에서 A→C 간접 종속 |
| BCNF | 모든 결정자가 후보키 | 후보키가 아닌 결정자 |
반정규화
성능 향상을 위해 의도적으로 정규화를 깨는 기법입니다.
- 테이블 병합: 1:1 관계 테이블을 하나로
- 테이블 분할: 수직/수평 분할
- 중복 컬럼 추가: JOIN 비용을 줄이기 위해 중복 허용
2과목: SQL 기본 및 활용
SELECT 실행 순서
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
이 순서를 모르면 SQL 문제 절반은 틀립니다. 반드시 암기하세요.
JOIN
| JOIN 유형 | 설명 |
|---|---|
| INNER JOIN | 양쪽 모두 일치하는 행만 |
| LEFT OUTER JOIN | 왼쪽 테이블 전체 + 오른쪽 일치 |
| RIGHT OUTER JOIN | 오른쪽 테이블 전체 + 왼쪽 일치 |
| FULL OUTER JOIN | 양쪽 모두 전체 |
| CROSS JOIN | 모든 조합 (카테시안 곱) |
| NATURAL JOIN | 같은 이름의 컬럼으로 자동 JOIN |
서브쿼리
| 위치 | 이름 | 예시 |
|---|---|---|
| SELECT절 | 스칼라 서브쿼리 | SELECT (SELECT ...) |
| FROM절 | 인라인 뷰 | FROM (SELECT ...) |
| WHERE절 | 일반 서브쿼리 | WHERE col IN (SELECT ...) |
윈도우 함수 (분석 함수)
함수명() OVER (PARTITION BY 그룹컬럼 ORDER BY 정렬컬럼)
| 함수 | 기능 |
|---|---|
| ROW_NUMBER() | 동일값이어도 순차 번호 |
| RANK() | 동일값 동일 순위 → 다음 순위 건너뜀 |
| DENSE_RANK() | 동일값 동일 순위 → 다음 순위 연속 |
| LAG() / LEAD() | 이전/다음 행 값 참조 |
| SUM() OVER() | 누적합 등 집계 |
그룹 함수
| 함수 | 기능 |
|---|---|
| ROLLUP(A, B) | A별 소계 + 전체 합계 |
| CUBE(A, B) | 모든 조합의 소계 |
| GROUPING SETS | 원하는 조합만 지정 |
자주 틀리는 포인트
- NULL 연산: NULL과의 모든 비교는 UNKNOWN →
IS NULL사용 - HAVING vs WHERE: 집계 함수 조건은 HAVING, 개별 행 조건은 WHERE
- DELETE vs TRUNCATE vs DROP: DELETE는 롤백 가능, TRUNCATE는 불가, DROP은 테이블 자체 삭제
- UNION vs UNION ALL: UNION은 중복 제거, UNION ALL은 전부 포함
- VARCHAR vs CHAR: VARCHAR는 가변 길이, CHAR는 고정 길이 (빈 공간 공백 채움)