[DB] 데이터 모델링 - 논리적 데이터 모델

seonjeong·2023년 6월 12일
0

DB

목록 보기
6/7
post-thumbnail

💖 논리적 데이터 모델

  • 업무의 모습을 모델링 표기법으로 형상화하여 사람이 이해하기 쉽게 표현한 데이터 모델
  • DBMS에 맞는 논리적 스키마를 설계
  • 정규화를 수행

🔥 관계 데이터 모델

  • 데이터를 행과 열로 구성된 2차원 테이블 형태로 한 모델
  • 기본 키와 이를 탐조하는 외래 키로 관계 표현
  • 1:1, 1:N, N:M 관계를 자유롭게 표현
  • entity -> table
  • attribute -> column
  • relationship -> PK, FK

📝 구성요소

  • 릴레이션(Relation) : 행과 열로 구성된 테이블
  • 튜플(Tuple) : 릴레이션의 행
  • 속성(Attribute) : 릴레이션의 열
  • 카디널리티(Cardinality) : 튜플의 수
  • 차수(Degree) : 애트리뷰트의 수
  • 스키마(Schema) : 데이터베이스의 구조, 제약 조건 등의 정보를 담고 있는 기본적인 구성
  • 인스턴스(Instance) : 정의된 스키마에 따라 생성된 테이블에 실제 저장된 데이터의 집합


📝 릴레이션 스키마 변환 규칙

  1. 모든 개체는 릴레이션으로 변환한다
  2. 다대다(N:M) 관계는 릴레이션으로 변환한다
  3. 일대다(1:N) 관계는 외래키로 표현한다
  4. 일대일(1:1) 관계는 외래키로 표현한다
  5. 다중 값 속성은 릴레이션으로 변환한다

📝 관계

1) 1:1 관계

:하나의 레코드가 다른 테이블의 레코드 한 개와 연결된 경우(자주 사용하지 않음)

2) 1:N 관계

: 하나의 레코드가 서로 다른 여러 개의 레코드와 연결된 경우

3) N:M 관계

: 여러 개의 레코드가 다른 테이블의 여러 개의 레코드와 관계가 있는 경우


🔥 정규화

데이터의 중복성을 제거하여, 이상 현상(Anomaly)을 방지하고, 데이터의 일고나성과 정확성을 유지하기 위해 무손실 분해를 하는 과정

이상현상(Anomaly)

데이터의 중복성으로 인해 릴레이션을 조작할 때 발생하는 비합리적 현상

  • 삽입 이상 : 정보 저장 시 해당 정보의 불필요한 세부정보를 입력해야 하는 경우
  • 삭제 이상 : 정보 삭제 시 원치 않는 다른 정보가 같이 삭제되는 경우
  • 갱신 이상 : 중복 데이터 중에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우

📝 제1정규화

  • 비정규형 테이블을 제1정규형 테이블로 구조화
  • 조건 : Atomic columns -> 속성 하나는 하나의 속성값만을 가져야 한다

위의 비정규형 테이블에서 producttag를 따로 쪼개서 보면 N:M의 관계를 가지므로 product_tag_relation이라는 관계 테이블을 생성하여 연결해주어야 한다.


📝 제2정규화

  • 제1정규형 테이블을 제2정규형 테이블로 정규화
  • 조건 : No partial dependencies -> 부분 종속성이 없어야 한다 = 기본키 중에 특정 컬럼에만 종속된 컬럼이 존재하지 않아야 한다

위의 제1정규형 테이블을 보면 name 컬럼에 부분적으로 종속된 부분이 있다. product 테이블에 부분 종속된 부분만 가져오면 중복된 행을 제거하여 두 행 중 한 행만 남는다.

name, type 컬럼에 의존하는 price컬럼을 가져와 product_type이라는 테이블을 만들면 된다.

이로써 부분 종속된 부분을 없애 제2정규화의 조건을 만족시킬 수 있다.


📝 제3정규화

  • 제2정규형을 만족하는 상태에서 이행 함수 종속을 제거하는 정규화 과정
  • 조건 : No transitive dependencies -> 이행적 종속성이 없어야 한다

제2정규화를 거친 테이블을 보면 product테이블의 seller_idname컬럼에 종속되어 있고 seller_nameseller_id컬럼에 종속되어 있다. 이러한 관계를 이행적 종속성이라고 한다.

제3정규형 테이블에서는 seller테이블을 생성하여 product테이블에서의 이행적 종속성을 제거하였다.




Reference

https://velog.io/@sominpark/DB-Schema%EC%99%80-Query-Design%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%84%A4%EA%B3%84#%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%84%A4%EA%B3%84
https://velog.io/@rg970604/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-6.-%EA%B4%80%EA%B3%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81-qsf0cscp

profile
🦋개발 공부 기록🦋

0개의 댓글