데이터 모델링
🔴 외래키(FK)는 개발 초기 단계에서는 설정을 지양한다.
외래키(FK)는 릴레이션 간의 결합도를 높여 데이터베이스를 복잡하게 만들기 때문에, 개발 초기 단계에서는 설정을 지양한다.
참조하는 기본키(PK)가 삭제될 경우 외래키에도 영향을 미쳐 데이터 무결성 제약이 발생할 수 있으므로, 외래키는 모든 테이블 구조가 확정된 후 가장 마지막 단계에서 설정하는 것이 좋다.
관계 데이터 모델의 제약
- 개체 무결성 제약조건 (기본키 제약)
릴레이션에서 기본키를 구성하는 속성은 NULL이나 중복 값을 가질 수 없다. - 참조 무결성 제약조건 (외래키 제약)
자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 하며, 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받는다.
데이터베이스 설계 과정
요구사항 분석(요구 사항 명세서 작성) -> 개념적 설계(ERD 작성) -> 논리적 설계(테이블 구조 정의) -> 물리적 설계(인덱스, 저장 방식 등 결정) -> 구현(SQL문 작성, 데이터베이스 생성)
ERD 관계의 종류
- 일대일(1:1) 관계

- 일대다(1:N) 관계

- 다대다(N:M) 관계
(실제 구현 시 중간 테이블을 사용하여 두 개의 관계로 변환)

ERD 관계 설정 시 고려사항
- 기본키 선택
- 자연키: 실제 데이터에서 고유한 값 (예: 주민번호, 이메일)
- 대리키: 인위적으로 생성한 식별자 (예: 자동증가 ID) ✨요즘 트렌드
- 외래키 설정
- 두 테이블 간 관계를 정의
- 부모 테이블의 기본키를 자식 테이블에 포함시킴
- 정규화 수준 결정
- 보통 3정규형까지 진행 (더 높은 정규형은 복잡해질 수 있음)
데이터베이스 설계 방법론
- 하향식 접근법
- 전체 시스템 먼저 파악하고 세부사항으로 내려가는 방식
- ERD 먼저 그리고 테이블 변환
- 상향식 접근법
- 세부적인 데이터 요소부터 시작해 전체 구조로 올라가는 방식
- 기존 데이터 분석하여 모델 작성
- 프로토타입 접근법
- 일부 모델을 빠르게 구현, 테스트한 후 개선
- 애자일 개발에 적합
정규화
이상현상
- 삽입이상
데이터 삽입 시 특정 열에 해당하는 값이 없어서 필요하지 않은 NULL을 강제로 입력해야 하는 현상 - 삭제이상
데이터 삭제 시 유용한 다른 데이터까지 함께 삭제되는 현상 - 수정이상
중복 데이터 중에서 일부만 수정되어 데이터의 불일치 문제가 발생하는 현상
함수적 종속성
속성들 간의 관련성을 말한다. 하나의 릴레이션에는 하나의 함수적 종속성만이 존재하도록 정규화를 하게 된다.
- 부분 함수적 종속
속성집합 Y가 속성집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨 - 완전 함수적 종속
속성집합 Y가 속성집합 X 전체에 대해서만 함수적으로 종속됨
정규화
- 관계형 데이터베이스 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스.
- 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법.
- 함수적 종속성을 이용해서 연관성 있는 속성들을 분류하고, 각 릴레이션에서 이상현상이 생기지 않도록 하는 과정.
정규화 단계
- 제1정규화(1NF): 모든 속성의 도메인이 원자 값으로만 구성되어 있어야 한다.
- 제2정규화(2NF): 부분 함수 종속 관계가 있을 경우 별도의 테이블로 분리한다.
- 제3정규화(3NF): 이행적 함수 종속 관계가 있을 경우 별도의 테이블로 분리한다.
📌 BCNF, 제4정규화, 제5정규화가 더 있지만, 일반적으로 제3정규화까지만 수행.
정규화의 특징
- 정규화 정도가 높은 경우단점: 물리적 접근이 복잡해질 수 있고, 길이가 짧은 데이터 발생할 수 있다.
- 장점: 유연한 데이터 구축할 수 있고, 데이터의 정확성 높아진다.
- 정규화 정도가 낮은 경우단점: 데이터에 많은 LOCK이 발생하거나 길이가 긴 데이터 발생할 수 있다.
- 장점: 데이터 결합 처리가 감소되고, 물리적 접근이 단순할 수 있다.
비정규화
정규화를 하면 성능 향상에 도움이 되지만, 경우에 따라 분리해 놓은 테이블을 성능 향상의 목적으로 다시 합쳐야 할 수도 있다. 그럴 경우 조인을 사용하는데, 너무 많은 조인이 발생하면 부하를 줄이기 위해 다시 합치는 것도 고려해야 한다.
지나치게 자주 발생하는 조인 대상 테이블을 다시 합치는 작업 -> 비정규화.
비정규화: 정규화의 반대 과정으로 데이터베이스 성능 최적화를 위해 중복 데이터를 추가하거나, 데이터를 그룹화하는 작업
SQL
- Structured Query Language의 약자로, DBMS에서 사용하는 데이터 표준 질의 및 처리 언어이다.
- 타 언어에 비해 배우고 사용하기 쉽고, DBMS 종류 상관없이 사용 가능하다.
- 개발자, DBA, DB 모델링 종사자들이 필수로 알아야 하는 언어이다.
SQL의 분류
- DDL(Data Definition Language) - 데이터 조작어
- CREATE, DROP, ALTER, TRUNCATE
- DML(Data Manipulation Language) - 데이터 조작어
- SELECT, INSERT, UPDATE, DELETE
- DCL(Data Control Language) - 데이터 제어어
- GRANT, REVOKE
- TCL(Transaction Control Language) - 트랜잭션 처리어
- COMMIT, ROLLBACK, SAVEPOINT(오라클에만 있음)
❕느낀점
수업 시간에 보여주신 예시 ER 다이어그램을 보며 실제 ERD가 어떻게 생겼고, 이걸 어떻게 이해할 수 있는지 알게 되었다. https://www.erdcloud.com/라는 ERD 그리기 사이트를 알게 되면서, 다음 프로젝트 때 ERD를 잘 그릴 수 있도록 미리 숙지해놔야 겠다고 생각했다.
'DB' 카테고리의 다른 글
| [TIL-260304] DB 기초: SET, 그룹 함수, 주요 함수 (0) | 2026.03.04 |
|---|---|
| [TIL-260303] DB 기초: 제약 조건, SELECT, WHERE 조건 (0) | 2026.03.04 |
| [TIL-260227] DB 기초: SQL 정의하기 (0) | 2026.02.27 |
| [TIL-260225] DB 기초: 데이터베이스 시스템과 데이터 모델링 (0) | 2026.02.25 |
| [TIL-260126] Supabase(수파베이스)란? (0) | 2026.02.16 |