DB
★ 데이터베이스의 특징
데이터베이스는 공통적으로 사용하기에 직접적으로 쓸 수 없는 특징이 있다.
직접적으로 사용하는 경우는 관리하는 목적으로 사용
간접적으로는 일반 사용자가 애플리케이션(웹, 앱 등)을 통해 데이터베이스의 기능을 이용
★ 데이터 모델
- 계층형 : 데이터가 트리 구조, 부모-자식 관계를 지님
- 네트워크형 : 계층형 모델의 한계를 극복,그래프 구조를 사용
- 객체지향형 : 객체 지향 프로그래밍(OOP) 개념을 데이터베이스에 적용
- 관계형 : 가장 많이 쓰고 있는 모델, 테이블(표) 형태로 저장하고 관리
★ 데이터 참조
- 부모 테이블의 기본 키: 부모 테이블은 각 행을 고유하게 식별할 수 있는 기본 키(Primary Key)를 가지고 있다.
- 자식 테이블의 외래 키: 자식 테이블은 부모 테이블의 기본 키 값을 저장하는 외래 키(Foreign Key) 컬럼을 가지고 있다.
- 참조: 자식 테이블의 외래 키는 부모 테이블의 특정 행을 가리키면서, 해당 행의 데이터를 참조하게 돼.
★ 정규화 +
정규화란? (링크 참고)
https://ysh0129.tistory.com/99
멋사 부트캠프 프론트엔드 플러스 5기 - Next.js & DB (7일차)
Next.js ★ “use client” => 브라우저(클라이언트)에서 실행, 해당 코드를 미 적용 시 노드에서 실행(서버)에서 실행 노드에서 사용하는 이유 > 서버사이드 랜더링을 하기 위해서 > 구글에서 웹이 노
ysh0129.tistory.com
제 1 정규화(원자값= 한개의 값)
유형과 장단점
구문자 : 한 컬럼 안에 여러 값을 콤마(,) 같은 구분자로 이어서 저장
장점 : 테이블 수, 칼럼이 늘어나지 않음, join연산자 불 필요
단점 : 조작 어려움, 유지보수 어려움
컬럼수 늘리기 : 컬럼을 여러 개 만드는 방식
장점 : 테이블 수 변화 없음, Join연산자 불 필요
단점 : 컬럼 수가 늘어나서 용량이 늘고 속도가 느려진다.
자식테이블 : 새로운 테이블(하위 자식 테이블)로 분리하고, 부모 테이블과 외래 키로 연결하는 방식
장점 : 확장성, 효율적 검색, 조작
단점 : 테이블 수가 늘어날수록 Join연산자 남발
제 2 정규화(부분적 함수 종속을 제거)
(함수 종속 = 키로 식별되는 속성)
Key : 중복 없는 고유의 행, 종속된 관계를 찾는 수단
식별관계 : 부모 테이블의 기본키(Primary Key, PK)가 자식 테이블의 기본키 일부로 포함되는 관계
Key의 종류
기본키 : 후보키 중에서 선택된 대표 키. 유일성, 최소성, 그리고 NULL 값을 허용하지 않는다는 특징을 지님
후보키 : 유일하게 식별할 수 있는 최소한의 속성 집합
대체키 : 주키 대신 서브로 사용되는 키
대리키 : 테이블에는 없었다가 추가되는 식별자 키 (비식별관계)
슈퍼키 : 유일하게 식별할 수 있는 하나 이상의 속성(컬럼)들의 집합
(회원번호 경우 랜덤값으로 지정)
외래키 : 특정 컬럼(들)이 다른 테이블의 기본 키(Primary Key)를 참조하는 키
제 3 정규화(이행적 함수 종속을 제거)
(이행적 함수 종속 = 전이적 관계, 두번 거쳐서 참조되는 속성)
비식별관계 : 부모 테이블의 기본키가 자식 테이블의 기본키를 구성하는 데 참여하지 않는다
BCNF 정규화
제 3 정규화 이후 진행, 모든 결정자[속성(컬럼)의 값이 다른 속성의 값을 유일하게 결정]가 후보키가 되도록 테이블 분해
[결정자: 속성(컬럼)의 값이 다른 속성의 값을 유일하게 결정 ]
ex) 학생과 이메일이 있을 때,
이메일을 바꾸기 위해서 학생을 찾아야한다 여기서 학생은 결정자에 해당한다.
제 4 정규화
다치 종속 제거
다치 종속 : 한 속성이 복수의 값을 가질 때, 다른 속성과 곱 형태로 속성이 증식 현상
제 5 정규화
조인 종속성 제거를 목표
테이블을 더 이상 무손실 분해할 수 없을 때 만족
DB입력은 Supabase에서 ERD는 draw.io에서
draw.io에서 ERD 설계시 한글로 먼저 테이블을 만들어보고 복제해서 영문으로 수정해준다.
데이터의 타입은 AI로 뽑아내고
Supabase에서 new table에 각 해당하는 속성 값과 타입을 입력한다.
회고 : 정규화에 대해서는 자격증 공부로 접해본 내용이였지만,
여전히 많이 헷갈리는 내용이였다.
프로젝트 진행하면서 많이 부딪히고 경험 쌓는 생각으로 하자
'Deep.FE' 카테고리의 다른 글
| 멋사 부트캠프 프론트엔드 플러스 5기 - 기획 & ERD (10일차) (0) | 2025.06.30 |
|---|---|
| 멋사 부트캠프 프론트엔드 플러스 5기 - Supabase & 클린 아키텍처 - (9일차) (0) | 2025.06.29 |
| 멋사 부트캠프 프론트엔드 플러스 5기 - Next.js & DB (7일차) (0) | 2025.06.25 |
| 멋사 부트캠프 프론트엔드 플러스 5기 - Next.js (6일차) (0) | 2025.06.24 |
| 멋사 부트캠프 프론트엔드 플러스 5기 - TypeScript(5일차) (0) | 2025.06.23 |