본문 바로가기

■ Web개발/기초 지식

정규화, 관계형/비관계형 DB

DB에 대해 전혀 몰랐는데

정규화라는 개념이 있더라구요.

정규화(Normalization)는 데이터베이스 설계에서 중복을 최소화하고 데이터의 일관성과 무결성을 보장하기 위해 데이터를 구조화하는 프로세스입니다. 이를 통해 데이터베이스의 성능과 유지보수가 개선되며, 데이터의 불일치와 모순을 방지합니다.

데이터베이스 정규화는 관계형 데이터베이스에서 주로 사용되며, 주로 E.F. Codd가 개발한 관계형 모델에 기반합니다. 정규화는 테이블의 컬럼과 로우를 적절하게 분해하여 여러 개의 테이블로 분리함으로써 데이터의 중복을 최소화하는 것을 목표로 합니다.

정규화의 목표는 보통 다음과 같습니다:

제1정규형(1NF): 각 컬럼은 원자값(Atomic Value)을 가져야 하며, 각 로우는 유일한 식별자(Primary Key)를 가져야 합니다. 데이터를 중복 없이 기록합니다.

제2정규형(2NF): 제1정규형을 만족하면서 부분 종속을 제거합니다. 테이블의 모든 컬럼이 기본 식별자에만 종속되어야 합니다.

제3정규형(3NF): 제2정규형을 만족하면서 이행적 종속을 제거합니다. 어떤 컬럼이 다른 컬럼을 결정하는 종속 관계가 없어야 합니다.

또한 BCNF(Boyce-Codd Normal Form), 제4정규형(4NF), 제5정규형(5NF) 등 더 높은 정규형도 존재합니다. 이러한 정규형들은 더 복잡한 종속 관계를 제거하기 위해 사용됩니다.

정규화는 데이터 중복과 이상 현상을 줄이기 위해 중요하지만, 지나치게 정규화하면 성능 저하와 복잡성이 발생할 수 있습니다. 따라서 정규화는 데이터베이스 설계 시 조심스럽게 진행되어야 합니다. 특정 상황에 맞게 적절한 정규화 수준을 선택하고 비정규화를 적용하는 등의 접근 방법도 사용될 수 있습니다.

아래의 페이지 글을 참조해보시는 것을 추천드립니다.

https://code-lab1.tistory.com/48

그리고 이런 정규화 안해도 되는 경우는..

비관계형 DB입니다. 몽고DB같은 것이죠. NoSql이라고도 하고요.

비관계형 DB와 관계형 DB가 성능차이가 어느정도일지는 아직 직접 겪은 적이 없는데, 궁금한 부분입니다.

이왕 알아보는 김에 각각 사용되는 곳도 한 번 살펴보죠

관계형 데이터베이스 사용 예시:

전통적인 웹 애플리케이션: 뉴스 웹사이트, 블로그, 포럼 등의 웹 애플리케이션은 사용자 정보, 게시물, 댓글 등의 정형화된 데이터를 처리하는 데에 관계형 데이터베이스가 적합합니다.

주문 및 재고 관리 시스템: 상품 주문, 재고 관리, 고객 정보 등의 복잡한 트랜잭션과 데이터 일관성이 필요한 시스템은 관계형 데이터베이스를 사용하여 데이터의 정확성과 안정성을 보장할 수 있습니다.

엔터프라이즈 레벨 애플리케이션: 대규모 기업용 애플리케이션에서는 고성능과 안정성을 제공하기 위해 RDBMS가 자주 사용됩니다.

NoSQL 데이터베이스 사용 예시:

소셜 미디어: 소셜 미디어 플랫폼은 사용자 생성 콘텐츠를 다루는데 비정형 데이터가 많습니다. 예를 들어, 트위터의 트윗, 페이스북의 게시물, 인스타그램의 사진 등은 NoSQL 데이터베이스에 적합합니다.

인터넷 또는 모바일 애플리케이션의 로그 데이터: 대량의 로그 데이터를 빠르게 적재하고 분석하는데에 NoSQL 데이터베이스가 용이합니다.

실시간 데이터 스트리밍: 실시간으로 발생하는 이벤트 데이터를 처리하는데에 NoSQL 데이터베이스가 유리합니다. 예를 들어, IoT 디바이스에서 생성되는 센서 데이터 처리 등에 활용됩니다.

쇼핑 카트 및 세션 관리: 온라인 쇼핑 웹사이트에서 사용자의 장바구니, 세션 데이터 등은 NoSQL 데이터베이스를 활용하여 빠르게 처리할 수 있습니다.

게임 데이터 저장: 온라인 멀티플레이어 게임에서 플레이어 정보, 게임 상태 등의 데이터는 NoSQL 데이터베이스에 적합합니다.

이러한 예시들은 일반적인 경우이며, 실제로는 다양한 요구 사항에 따라 여러 데이터베이스 시스템이 혼합하여 사용되기도 합니다. 따라서 프로젝트의 특정 상황과 요구 사항을 고려하여 적절한 데이터베이스 시스템을 선택하는 것이 중요합니다.

'■ Web개발 > 기초 지식' 카테고리의 다른 글

CPU 코어 / 스레드 / 클럭  (0) 2024.03.31
절차지향 객체지향 프로그래밍  (0) 2024.03.31
SQL  (0) 2024.03.31
IP 주소  (0) 2024.03.31
Fetch / AJAX / Axios  (0) 2024.03.31