DB

★ 데이터베이스의 특징

데이터베이스는 공통적으로 사용하기에 직접적으로 쓸 수 없는 특징이 있다.

직접적으로 사용하는 경우는 관리하는 목적으로 사용

간접적으로는 일반 사용자가 애플리케이션(웹, 앱 등)을 통해 데이터베이스의 기능을 이용

 

★ 데이터 모델

  • 계층형 : 데이터가 트리 구조, 부모-자식 관계를 지님
  • 네트워크형 : 계층형 모델의 한계를 극복,그래프 구조를 사용
  • 객체지향형 : 객체 지향 프로그래밍(OOP) 개념을 데이터베이스에 적용
  • 관계형 : 가장 많이 쓰고 있는 모델, 테이블(표) 형태로 저장하고 관리

데이터 참조

  1. 부모 테이블의 기본 키: 부모 테이블은 각 행을 고유하게 식별할 수 있는 기본 키(Primary Key)를 가지고 있다.
  2. 자식 테이블의 외래 키: 자식 테이블은 부모 테이블의 기본 키 값을 저장하는 외래 키(Foreign Key) 컬럼을 가지고 있다.
  3. 참조: 자식 테이블의 외래 키는 부모 테이블의 특정 행을 가리키면서, 해당 행의 데이터를 참조하게 돼.

★ 정규화 +

정규화란? (링크 참고)

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에 각 해당하는  속성 값과 타입을 입력한다. 

 

 

회고 : 정규화에 대해서는 자격증 공부로 접해본 내용이였지만,

여전히 많이 헷갈리는 내용이였다.

프로젝트 진행하면서 많이 부딪히고 경험 쌓는 생각으로 하자 

Next.js

  “use client”

=> 브라우저(클라이언트)에서 실행, 해당 코드를 미 적용 시 노드에서 실행(서버)에서 실행

 

노드에서 사용하는 이유 > 서버사이드 랜더링을 하기 위해서 > 구글에서 웹이 노출하기 위해서

 

★ image

이미지 태그를 사용할 시 너비와 높이를 지정해야 하는 이유 : 레이아웃 시프트가 발생한다.

레이아웃 시프트: 웹 페이지가 로드되는 동안 기존에 있던 콘텐츠가 갑자기 위치를 바꾸거나 밀려나는 현상

 

대부분의 이미지는 퍼블릭 폴더에 둔다(경우에 따라서 따로 빼올 수도 있다.)

 

Next.js 공식문서에서 Linking and Navigating

Link를 사용하면 페이지가 새로고침되지 않는다. *프리패치 기능

 

*프리패치(Prefetch) : 링크를 클릭하기 전에 해당 페이지의 리소스를 미리 다운로드

 


DB

 데이터 유형

관리데이터 : 수정이 필요한 데이터

로그데이터 : 삭제와 수정이 필요 없는 데이터 (빅데이터가 이에 해당한다.)

 

★ 데이터를 사용하는 이유

사용자의 행위(결제내역,진료내역,주문내역 등..)들을 기록이나 저장

말과 글을 분석하기 보다는 행동과 조회로 분석한다.

 

★  데이터 모델링 과정

  • 개념적 구조 : 사용자 입장에서 어떤 데이터로 이루어져 있는가?
  • 논리적 구조 : 데이터들을 테이블 형태로 만들며 어떻게 상호관계하는 구조를 만들며 표현할 것인가?
  • 물리적 구조 : 데이터들을 어디에 저장하고 보관할 것인가?

시스템 ?

둘 이상 (각 역할자가 존재) 의 여러 구성 요소들이 서로 연결되어 상호작용하는 집합체(소프트웨어, 하드웨어 등...)

 

E-R 데이터 모델링

E-R 데이터 모델링 기호와 의미

예로 식당을 들었을 때, 주체가 되는 개체(엔티티) 즉 손님, 요리사, 웨이터가 되는 것이고

무언가를 하는 행위 혹은 절차를 관계(릴레이션) 결제,주문,메뉴등록 등이 해당하며,

속성은 관계, 행위 안에 포함하고 있는 걸 말한다. 결제에는 결제일자, 주문한 메뉴에 대한 금액, 결제 수단에 해당한다.

개체와 관계에 따라 1:1, 1:N, N:N이 존재한다. 

 

 

정규화

데이터를 중복없이 간단하고 효율적으로 관리하는 방법

 

제1정규화 : 속성 값이 더 이상 쪼갤 수 없는 원자값(한칸에 한 개의 값)

 

ex) A : 숫자,문자 / B : 문자 (X)
      A : 숫자 / A : 문자 / B : 문자 (O)

 

제2정규화 : 완전 함수 종속,

기본키의 일부에만 종속되는 속성(컬럼)을 제거

한 개의 테이블을 관계에 따라서 두 개 이상으로 분리

 

ex) 적용 전 => 학번, 과목코드, 성적, 담당교수(학교 테이블)

      적용 후 => 학번, 과목코드, 성적 (수강 테이블)
                        과목코드, 담당교수 (과목정보 테이블)

 

제3정규화 : 이행적 종속(A->B, B->C가 성립할 때 A->C가 성립) 제거

기본키가 아닌 속성이 다른 기본키가 아닌 속성을 결정

 

ex) 적용 전 => 학번, 학생이름, 학과명, 학과 사무실 위치(학교 테이블)

      적용 후 => 학번, 학생이름 , 학과명 (학생 테이블)
                        학과명 , 학과 사무실 위치 (학과정보 테이블)

 

 

 

 

회고 : Next.js는 공식문서를 한번 훑어보자 무의식적으로 쓰고 보는 것과

흐름을 알고 난 후에 보는 것과 체감이 많이 다르다. 

먼저 올바른 DB를 만들기 위해서는 시스템이라는 설계도를 마인드맵처럼 생각하고

개체와 관계에 연결 경우를 고려해서 데이터의 테이블을 만들어야 할 필요가 있다.

+ Recent posts