데이터 모델링의 이해
1. 데이터 모델의 정의와 특징
- 데이터 모델링이란?
정보시스템 구축을 위해 데이터 관점에서 업무를 분석하고, 현실 세계의 데이터를 약속된 표기법으로 표현하는 과정
- 특징
- 추상화: 복잡한 현실을 단순화
- 단순화: 불필요한 요소 제거
- 명확성: 누구나 이해할 수 있도록 표현
- 관점: 데이터(무엇을 저장할 것인가), 프로세스(업무 흐름), 상관(처리 방식)
- 유의사항: 유연성, 유일성, 일관성
- 모델링 3단계
- 개념적(추상, 업무 중심, ERD 생성)
- 논리적(정규화, 구체화, DBMS 종속적)
- 물리적(실제 DB 구현, 성능/저장고려)
- DB 스키마 구조
- 외부(뷰): 사용자별 관점
- 개념(통합 사용자): 조직 전체 관점
- 내부(물리): 실제 저장 구조
- 데이터 독립성
- 논리적 독립성: 개념 스키마 변경 시 외부 스키마 영향 없음
- 물리적 독립성: 내부 구조 변경 시 외부/개념 스키마 영향 없음
2. 데이터 모델링의 3요소
엔터티
- 정의: 업무에서 관리해야 하는 데이터 집합(단수 명사, 인스턴스의 집합)
- 특징
- 반드시 업무에 필요
- 유일한 식별자 보유
- 2개 이상 인스턴스, 2개 이상 속성, 관계를 가짐
- 분류
- 유형/무형 엔터티
- 발생 시점: 기본, 중심, 행위 엔터티
- 명명 규칙: 협업 용어 사용, 약어 지양, 단수 명사, 유일성, 명확성
속성
- 정의: 더 분리되지 않는 최소 데이터 단위
- 특징: 주식별자에 함수적으로 종속, 1개 속성은 1개 값만 가짐
- 분류: 기본, 설계, 파생 / 단일·복합, 단일값·다중값
- 도메인: 속성이 가질 수 있는 값의 범위
관계
- 표기법: 관계명, 차수(1:1, 1:N, N:M), 선택사양(필수/선택)
- ERD: 존재관계, 행위관계
- UML: 연관관계(실선, 멤버변수), 의존관계(점선, 파라미터)
- 식별/비식별관계
- 식별관계: 자식 식별자에 부모 식별자 포함(실선)
- 비식별관계: 자식 일반 속성에 부모 식별자 포함(점선)
식별자
- 정의: 엔터티를 유일하게 대표하는 속성(유일성, 최소성, 불변성, 존재성)
- 분류
- 주식별자/보조식별자
- 내부/외부식별자
- 단일/복합식별자
- 본질/인조식별자
데이터 모델과 SQL
1. 정규화
| 단계 | 내용 |
|---|
| 1정규형 | 모든 속성은 반드시 하나의 값(원자값)만 가짐 |
| 2정규형 | 일반 속성은 주식별자 전체에 종속(부분함수종속성 제거) |
| 3정규형 | 일반 속성 간 이행함수종속성 제거 |
| BCNF | 후보키의 일부에 함수적 종속인 속성 분리 |
2. 관계와 조인의 이해
- 조인: 식별자를 상속, 매핑 키로 데이터 결합
- 식별관계: 부모 식별자를 자식 식별자에 포함
- 비식별관계: 부모 식별자를 자식 일반 속성에 상속(조인 빈번)
3. 트랜잭션의 이해
- IE/바커 표기법: 필수/선택적 관계 실선·점선으로 구분
4. Null 속성의 이해
- Null: 아직 정의되지 않은 값(0이나 공백과 다름)
- 특징
- NOT NULL/PK 외에는 허용
- NVL, ISNULL 등으로 처리
- 집계함수에서 제외
- Null 연산 결과는 Null, 비교는 Unknown
5. 본질식별자 vs. 인조식별자
- 인조식별자: 본질식별자가 복잡할 때 사용, 중복 방지 어려움, 인덱스 추가 필요, 꼭 필요할 때만 사용
SQL 기본 및 활용
1. 관계형 데이터베이스 개요
- DBMS: 효율적 데이터 관리, 복구 시스템
- SQL 명령어 분류
| 분류 | 명령어 | 설명 |
|---|
| DML | SELECT, INSERT, UPDATE, DELETE | 데이터 조작 |
| DDL | CREATE, ALTER, DROP, RENAME, TRUNCATE | 데이터 구조 정의 |
| DCL | GRANT, REVOKE | 권한 관리 |
| TCL | COMMIT, ROLLBACK | 트랜잭션 제어 |
- 집합 연산자: UNION, INTERSECTION, DIFFERENCE, PRODUCT(CROSS JOIN)
- 관계 연산자: SELECT, PROJECT, (NATURAL) JOIN, DIVIDE
2. SELECT문
SELECT ALL/DISTINCT/(*) 칼럼명 … FROM 테이블명 …
- ALIAS: 칼럼명 뒤, AS 사용 가능, 공백·특수문자·대소문자 구분 시 인용부호 사용
- 합성연산자
- Oracle:
||
- SQL Server:
+
CONCAT 함수
- 실행순서: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
3. 함수
- 문자형: CONCAT, UPPER, LOWER, SUBSTR, LENGTH, TRIM 등
- 숫자형: ROUND, ABS, POWER, CEIL, FLOOR, MOD 등
- 날짜형: DATEADD, DATEDIFF, YEAR, MONTH, DAY 등
- 변환형: CAST, CONVERT, TO_CHAR 등
- NULL 관련
NVL: NULL이면 대체값
NVL2: NULL/비NULL에 따라 값 선택
NULLIF: 두 값 같으면 NULL
COALESCE: 여러 값 중 NULL이 아닌 첫 값
4. WHERE, GROUP BY, HAVING, ORDER BY
- WHERE: 조건식, 비교/논리/부정 연산자, CASE/DECODE 등
- GROUP BY: 소그룹별 집계
- HAVING: 집계조건 필터
- ORDER BY: 정렬(기본 오름차순), 오라클/SQL의 NULL 처리 차이
5. 조인
- PK/FK 기반
- DBMS 옵티마이저: FROM절 데이터 2개씩 묶어 처리
- EQUI JOIN: '=' 연산자
- 종류
- INNER JOIN: 동일값만 반환
- NATURAL JOIN: 동일 칼럼명 기준
- USING/ON: 조건 명시
- CROSS JOIN: 카타시안 조합
- OUTER JOIN: 외부조인
SQL 활용 고급
1. 서브쿼리
- 연관/비연관: 메인 쿼리 칼럼 포함 여부
- 단일행/다중행/다중칼럼
- 다중행 비교 연산자: IN, ANY, ALL, EXISTS
- 스칼라 서브쿼리: SELECT절에서 한 행·한 칼럼 반환
- 인라인 뷰: FROM절에서 임시 테이블처럼 사용
2. 집합 연산자
| 연산자 | 설명 |
|---|
| UNION | 중복 제거 |
| UNION ALL | 전체 합침 |
| INTERSECT | 교집합, 중복 제거 |
| EXCEPT | 차집합, 중복 제거 |
3. 그룹함수
- NULL 제외 집계
- ROLLUP: 계층 구조 소계/합계
- CUBE: 모든 조합 소계/합계
- GROUPING SETS: 지정 조합만 소계
4. 윈도우 함수
- 결과 건수 영향 없음
- 종류
- 순위: ROW_NUMBER, RANK, DENSE_RANK
- 집계: SUM, AVG, MAX, MIN, COUNT
- 행 순서: FIRST_VALUE, LAST_VALUE, LAG, LEAD
- 비율: PERCENT_RANK, CUME_DIST, NTILE
- 문법
SELECT …,
RANK() OVER (PARTITION BY … ORDER BY …) AS 순위
FROM 테이블명
- 윈도잉절: BETWEEN, UNBOUNDED, N PRECEDING/FOLLOWING, CURRENT ROW
5. Top N 쿼리, 계층형 질의, 셀프조인
- Top N:
ORDER BY로 정렬 후, LIMIT/FETCH/TOP(n)으로 상위 N개 선택
- 계층형 질의:
CONNECT BY, START WITH, 재귀 CTE
- 셀프조인: 동일 테이블 간 조인, 별칭 필수
6. 뷰의 장점
- 독립성: 물리적 구조 변경 시 논리적 구조 유지
- 편리성: 복잡한 쿼리 단순화
- 보안성: 접근 제한
SQL 관리 구문 및 트랜잭션
1. 제약조건
| 종류 | 설명 |
|---|
| PRIMARY KEY | Null 불가, 대표 키 |
| UNIQUE | 고유 값 보장, Null 1개 허용 |
| NOT NULL | Null 불가 |
| CHECK | 조건 만족 값만 허용 |
| FOREIGN KEY | 참조 무결성, Null 가능 |
2. 트랜잭션 특성(ACID)
- 원자성: 모두 실행/전혀 실행X
- 일관성: 연산 전후 무결성 유지
- 고립성: 트랜잭션 간 영향X
- 지속성: 성공 시 영구 저장
3. DELETE/INSERT 액션, DROP/TRUNCATE/DELETE 차이
| 구분 | DROP | TRUNCATE | DELETE |
|---|
| ROLLBACK | 불가 | 불가 | 가능 |
| 스토리지 반환 | 반환 | 반환 | 미반환 |
| 테이블 정의 | 삭제 | 유지 | 유지 |
4. DB 키의 종류
| 키 | 설명 |
|---|
| 기본키 | Null 불가, 대표 키 |
| 후보키 | 유일성, 최소성 |
| 슈퍼키 | 유일성 |
| 대체키 | 기본키 제외 후보키 |
| 외래키 | 참조 무결성, Null 가능 |
| 고유키 | 고유 값 보장, Null 1개 허용 |
5. SQL 기본 문법
SELECT * FROM 테이블명;
INSERT INTO 테이블명 (칼럼1, 칼럼2) VALUES (값1, 값2);
UPDATE 테이블명 SET 칼럼1 = 값1 WHERE 조건;
DELETE FROM 테이블명 WHERE 조건;
CREATE TABLE 테이블명 (…);
ALTER TABLE 테이블명 …;
DROP TABLE 테이블명;
GRANT 권한 TO 사용자;
REVOKE 권한 FROM 사용자;
COMMIT;
ROLLBACK;
옵티마이저 옵티마이저~