외래 키란(Foreign Key = FK)
- 다른 테이블의 기본 키(PK) 를 참조하는 키이다.
- 특징*
- 테이블 간의 연관 관계를 표현하는데 사용된다.
- 참조 무결성을 유지해야 한다.
- *참조 무결성 : 외래 키가 참조하는 기본 키가 반드시 존재해야 한다는 제약 조건
CASCADE
,SET NULL
,RESTRICT
,NO ACTION
등의 방식으로 부모데이터 삭제시 자식 데이터 동작 방식을 제어할 수 있다.
- 한 테이블 내에 여러개의 외래키를 가질 수 있다.
기본 키란 (Primary Key = PK)
테이블에서 각 행을 유일하게 식별할 수 있는 컬럼 또는 컬럼의 조합이다.
특징*
각 행을 고유하게 구분하는 값으로 중복될 수 없고, NULL일 수 없다.
한 테이블에는 하나의 기본키만 존재해야 한다.
두 개 이상의 컬럼을 조합해서 복합키를 만들 수도 있다.
- *복합키 : 두 개 이상의 컬럼을 조합하여 기본키로 설정
ER 다이어그램이란 (ERD)
- 데이터베이스의 구조를 시각적으로 표현하는 다이어그램을 의미한다.
- 테이블(엔터티) 간의 관계를 쉽게 이해하고 설계할 수 있도록 도와주는 그림이다.
ERD 구성요소
ERD는 3가지 주요 오소로 구성된다.
1. 엔터티 (Entity)
- 데이터베이스에서 저장할 대상을 의미한다.
- 테이블과 같은 개념으로 ERD에서 사각형으로 표현된다.
- 예시 ) 학생, 강의, 교수
2. 속성 (Attribute)
- 엔터티가 가지는 정보 (Column, field)를 의미한다.
- 타원형으로 표현된다.
- 속성 중에서 고유한 값을 가지는 속성을 기본키 (PK)라고 한다.
- 예시 ) 학생 (Entity) → Attribute : 학번(PK), 이름, 전공 … etc
3. 관계 (Relation)
- 엔터티와 엔터티 사이의 연결을 의미한다.
- 엔터티 간 사이는 외래키(FK) 를 통해 연결된다.
- 마름모로 표현된다.
복합키란 (Combination Key)
- 두 개 이상의 컬럼을 조합하여 기본 키 (PK)로 사용하는 것을 말한다.
- 하나의 컬럼만으로 유일성을 보장할 수 없을 때, 여러 개의 컬럼을 합쳐서 기본키로 설정한다.
복합키 예시
- 강의 수강 테이블이 있다고 가정해보자. 속성은
student_id
,course_id
를 포함한다. - 이 때 각 학생은 여러개의 강의를 들을 수 있고, 하나의 강의에는 여러명의 학생이 들을 수 있다.
student_id (PK) | course_id (PK) | grade |
---|---|---|
1001 | C101 | A |
1001 | C102 | B+ |
1002 | C101 | A- |
- 따라서 student_id, course_id 두개를 함께 기본키(PK) 로 지정해서 각 행을 고유하게 식별 가능하도록 한다. |
연관관계란
- 테이블 간의 관계를 의미하는 말로, 하나의 테이블이 다른 테이블과 어떻게 연결되는지 나타내는 개념이다.
연간관계 종류
1. 1:1 관계 (One-to-One)
- 하나의 엔터티가 다른 엔터티로 1:1 연결된다.
- 예시 ) 사용자(User) - 여권(Passport)
- 한 명의 사용자는 하나의 여권만 가질 수 있다.
- 한 개의 여권은 한 명의 사용자만 갖는다.
2. 1:N 관계 (One-to-Many)
- 하나의 엔터티가 다른 엔터티와 1:N 관계
- 예시 ) 교수(Professor) - 강의(Course)
- 한 명의 교수는 여러 개의 강의를 담당할 수 있다.
- 하지만 하나의 강의는 한 명의 교수만 담당한다.
3. N:M 관계 (Many-to-Many)
- 두 엔터티가 서로 N:M을 가질 때를 의미한다.
- 예시 ) 학생 (Student) - 강의 (Course)
- 한 명의 학생이 여러 개의 강의를 들을 수 있다.
- 하나의 강의는 여러 명의 학생이 수강할 수 있다.
정규화란
- 데이터베이스 설계에서 중복을 최소화하고, 데이터의 일관성을 유지하기 위해 데이터를 구조화하는 과정이다.
정규화 목적
- 데이터 중복을 최소화하여 저장 공간을 효율적으로 사용한다.
- 데이터 삽입, 수정, 삭제 시 이상을 방지한다.
- 데이터의 무결성을 유지한다.
정규화 단계
1NF(제 1정규화)
- 테이블의 모든 속성 값은 하나의 값만 가져야 한다.
- 반복되는 그룹을 제거해야 한다.
- 예시 ) 전화번호가 여러 개일 경우, 개별적인 행으로 분리
2NF(제 2정규화)
- 1NF를 만족하면서, 기본 키의 일부가 아닌 모든 속성이 기본 키 전체에 종속되어야 한다.
- 즉 복합 키를 사용할 경우, 기본 키 일부에만 종속되는 속성을 제거하여 별도 테이블로 분리해야한다.
- 이를 부분 함수 종속성을 제거한다고 한다.
3NF(제 3정규화)
- 2NF를 만족하면서, 기본 키가 아닌 속성이 다른 기본키가 아닌 속성에 종속되지 않도록 한다.
- 특성 속성이 다른 속성을 결정하는 경우 이를 분리하여 새로운 테이블을 만든다.
- 이를 이행적 종속 제거라고 한다.
4NF(제 4정규화)
- 한 테이블 내에서 하나의 키가 여러 값을 가질 때, 다치 종속을 제거하여 별도의 테이블로 분리한다.
5NF(제 5정규화)
- 데이터를 여러 개의 테이블로 분해하더라도 다시 조인했을 때, 원래 데이터를 복원할 수 있도록 분해한다.
반정규화란
- 정규화를 통해 분리된 테이블을 다시 합쳐서 성능을 개선하고 데이터 조회 속도를 높이는 과정이다
반정규화 목적
- 복잡한 조인을 줄여서 성능을 향상한다.
- 데이터 조회 속도를 빠르게 한다.
- 자주 사용되는 데이터를 미리 계산하여 저장한다.
반정규화 방식
- 정규화된 테이블을 병합한다.
- 중복 데이터를 추가한다.
반정규화 단점
- 데이터 중복이 발생하는 단점이 존재한다.
- 데이터 무결성 유지의 어려움으로, 한 곳에서 데이터 수정 시 동일 데이터가 있는 다른 테이블도 수정해야 한다
'Server > 공부' 카테고리의 다른 글
[Server/공부] GraphQL이란? REST와 비교 (4) | 2025.08.10 |
---|---|
[Spring/프로젝트] 교정 좋아요 여부 조회 최적화: N+1 문제 해결하기 (0) | 2025.07.22 |
[AI] RAG과 임베딩의 개념 : AI 챗봇 만들기 -1 (0) | 2025.07.14 |