데이터베이스의 설계도를 만드는 과정으로, 시스템의 안정성과 확장성을 결정하는 가장 중요한 단계입니다.
| 요소 | 설명 | 예시 |
|---|---|---|
| 엔터티 (Entity) | 업무에서 관리해야 할 데이터의 집합 (명사) | 학생, 과목, 주문 (테이블) |
| 속성 (Attribute) | 엔터티가 가지는 세부적인 정보 항목 | 학생의 학번, 이름, 학과 (컬럼) |
| 관계 (Relationship) | 엔터티 간의 논리적 연관성 (동사) | 학생이 과목을 수강한다. |
| 식별자 (Identifier) | 각 엔터티의 인스턴스를 유일하게 구분하는 속성 | 학번, 주문번호 (Primary Key) |
관계 차수 (Cardinality): 참여하는 인스턴스의 수
사원 - 좌석부서 - 사원 (가장 일반적)학생 - 과목 → 관계형 DB에서 직접 표현 불가. 수강이라는 관계 엔터티를 만들어 1:N 관계로 해소해야 합니다.관계 선택성 (Optionality): 관계 참여가 필수인지 선택인지 여부
|): 주문은 반드시 고객이 있어야 함.O): 사원은 프로젝트에 참여할 수도 있음.정규화 (Normalization): 데이터의 중복을 최소화하여 무결성을 확보하는 과정. (1NF, 2NF, 3NF)
반정규화 (Denormalization): 정규화된 모델의 조회 성능 향상을 위해 의도적으로 중복을 허용하거나 테이블을 통합/분할하는 과정. 무결성과 성능의 Trade-off 관계입니다.
데이터베이스를 조작하고 활용하는 언어. 문법 순서와 논리적 실행 순서의 차이를 이해하는 것이 가장 중요합니다.
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
FROM: 테이블을 정의하고 JOIN을 처리합니다.WHERE: 개별 행을 필터링합니다. (집계 함수 불가)GROUP BY: 데이터를 그룹화합니다.HAVING: 그룹을 필터링합니다. (집계 함수 가능)SELECT: 최종 컬럼을 선택하고 계산합니다.ORDER BY: 결과를 정렬합니다.JOIN: 두 개 이상의 테이블을 연결합니다.
INNER JOIN: 일치하는 행만 반환 (교집합)OUTER JOIN: 일치하지 않아도 기준 테이블의 행은 반환 (LEFT, RIGHT, FULL)집합 연산자: 두 SELECT 문의 결과를 합칩니다. (컬럼 수/타입 일치 필요)
UNION: 중복을 제거한 합집합 (느림)UNION ALL: 중복을 포함한 합집합 (빠름)INTERSECT: 교집합MINUS / EXCEPT: 차집합서브쿼리 (Subquery): 다른 SQL 문에 포함된 SELECT 문.
SELECT 절): 단일 값 반환.FROM 절): 가상 테이블로 사용.WHERE, HAVING 절): 조건 비교에 사용.주요 함수:
CASE 문: SQL의 IF-THEN-ELSE 논리.NVL(A, B) / COALESCE(A, B, C...): NULL 값을 다른 값으로 치환.COUNT, SUM, AVG, MAX, MIN.| 구분 | 명령어 | 특징 |
|---|---|---|
| DML (조작어) | INSERT, UPDATE, DELETE | 데이터 조작. ROLLBACK 가능. |
| TCL (제어어) | COMMIT, ROLLBACK | DML로 인한 변경을 영구 저장하거나 취소. |
| DDL (정의어) | CREATE, ALTER, DROP, TRUNCATE | 객체 구조 정의. 자동 COMMIT되어 ROLLBACK 불가. |
DELETE vs TRUNCATE: DELETE는 행 단위 삭제로 느리고 ROLLBACK 가능. TRUNCATE는 테이블 전체 삭제로 빠르고 ROLLBACK 불가.PRIMARY KEY: 유일성과 NOT NULL을 보장하는 대표 키.FOREIGN KEY: 테이블 간의 관계를 정의 (참조 무결성).UNIQUE: 유일성을 보장 (NULL 허용).NOT NULL: NULL 값 입력을 방지.CHECK: 값의 범위나 조건을 제한.JOIN과 서브쿼리를 사용하는 것이 핵심입니다.