티스토리 뷰

더보기

목차

1. 데이터 모델링이란

- 개념적 / 논리적 모델링

- 데이터 베이스 생명 주기

2. ER(Entity Relation) 모델

- 개체와 개체 타입 - 강한 개체 vs 약한 개체

- 속성 - 단일/다중, 단순/복합, 저장/유도, 키 속성

- 관계 - 차수(이항/삼항/순환), 카디널리티(1:1/1:N/N:M), 참여 제약 조건, IS-A 관계

- ERD 표기법 - 피터 첸 vs IE(새발, 까마귀발) 표기법

3. ER 모델 -> 관계 데이터 모델 사상(매핑)

- 개체

- 1단계: 강한 개체->릴레이션

- 2단계: 약한 개체->복합키 릴레이션

- 관계

- 3~4단계: 1:1 / 1:N 관계

- 5~6단계: N:M / N진 관계

- 속성

- 7단계: 다중값 속성

- tip!

더보기

2단계 데이터 모델링(개념 먼저 논리 나중!!!!!)

- 개념적 데이터 모델링 : 현실 -> er 다이어그램으로 만들기(개체 - 관계 모델) 추상화하기

- 논리적 데이터 모델링 : er 다이어그램 -> 테이블 1(속성1, 속성2, 속성3) 구체화하기 

 

1. 요구사항 수집 및 분석

2. 설계

- 개념적 모델링(er 다이어그램 만듦)

- 논리적 모델링(er 다이어그램의 개념들 구체화(최대 몇 바이트인지 정의한다던가), erd-rdb 모델 사상, 정규화 등)

- 물리적 모델링(논리적 모델링 토대로 db 만듦.)

3. 데베 구현

 

단계 더해질수록 구체화, 윗단계일수록 추상화

1. 데이터 모델링이란

현실 세계 데이터 -> 컴퓨터 DB로 옮기는 변환 과정

단순화, 추상화 필요

흐름 : 현실 세계 파악 & 요구사항 분석 -> (추상화) -> 개념적 모델(ER 다이어그램) -> (데이터 모델링) -> 논리적 모델(관계 데이터 모델) -> (DB 구현) -> 데이터베이스

 

앞선 단계에선 추상화, 단계 진행될수록 구체화된다.

 

개념적 모델링 VS 논리적 모델링

설계 단계 : 개념적 모델링 먼저!! 논리적 모델링 나중!! 개념적 -> 논리적 -> 물리적 모델링

 

개념적 데이터 모델링

- 현실 세계 추상화 -> 데이터 뽑아내는 작업

- DBMS 와 무관, 모든 DBMS의 공통 작업

- 개체, 속성, 관계 로 구성한 후 ERD(Entity-Relation-Diagram)로 표현

- (중요!!!)산출물: 개체-관계모델(ER 다이어그램)

- 예) 도서-고객은 주문하기 관계가 있다. / 고객은 주문한다 도서를 / 도서는 주문받는다 고객에 의해

 

 

논리적 데이터 모델링

- er 다이어그램을 dbms에 맞게 사상(매핑)하는 과정

- 핵심 작업 3가지

1. er -> 릴레이션 스키마 매핑 (개체, 관계를 테이블로 변환)

2. 상세 속성 정의 (데이터 타입, 최대 길이 등 구체화)

3. 정규화 수행

- 산출물 : 릴레이션 스키마 (ex: 테이블 1(속성1, 속성2, 속성3) )

- 주의!!!! : 아직 실제 테이블 아님!!

- 개념적 데이터 모델링에서 다 도출 못했는데 추가로 필요한 걸 넣기도 함

 

(참고) 물리적 데이터 모델링

- 테이블 만드는 것

 

데이터베이스 생명주기

1단계 : 요구사항 수집 및 분석 어떤 사용자가 몇 년 동안 쓸 것인지, 사용자 요구 등 분석 요구사항 명세
2딘계 : 개념적 모델링 entity - relation 도출 Entity Relation Diagram 
3단계 : 논리적 모델링 각 개념 구체화
- ERD-RDB 모델 사상,맵핑
- 상세 속성 정의
- 정규화
릴레이션 스키마
4단계 : 물리적 모델링 인덱싱 기법이나 특화된 기능 보충 물리적 스키마
데이터 베이스 구현    

 

더보기

시험 대비 정리

  • 개념적 모델링의 산출물 = ER 다이어그램
  • 논리적 모델링의 산출물 = 릴레이션 스키마 (테이블 아님!)
  • 물리적 모델링의 산출물 = 실제 테이블 (물리적 스키마)
  • 개념적 모델링은 DBMS와 무관하게 설계 가능
  • 논리적 모델링의 핵심 3가지 : 매핑 + 속성 정의 + 정규화
  • 단계가 내려갈수록 구체화, 올라갈수록 추상화

 

2. ER 모델 ENTITY - RELATION

세상 -> ENTITY + RELATION 으로 추상화하는 단계

특정 DBMS와 무관하게 설계 가능하다

개체, 속성, 관계

 

2-1. 개체와 개체 타입

개체

독립적 실체, 각 개체만의 속성을 하나 이상 갖고 있어야 함!! 테이블에 컬럼 없으면 안되니까

 

개체 특징

- 기본키로 식별 가능해야 한다

- 반드시 자신의 특징을 나타내는 속성이 있어야 한다.

- 다른 개체와 최소 한 개 이상의 관계를 맺고 있다.

 

EX)

- 개체 타입 : 개체를 이름+속성으로 나타냄 : like 클래스

- 개체 인스턴스 : 실제 값을 가진 개체 : like 객체

- 개체 집합 : 특정 개체 타입에 대한 개체들 모음 : 객체들 집합

 

강한 개체 vs 약한 개체

강한 개체 약한 개체
독립적으로 존재 가능 강한 객체가 있어야만 존재 의의 o, 표현 가능, 강한 개체에 종속
자신의 기본키(pk)로 식별 강한 개체의 기본키 가져와서 식별
일반 사각형 이중 사각형
직원, 고객 부양가족(부양가족은 직원에 의존, 직원이 없으면 존재 의미가 없음),
주문(주문은 고객에 의존, 고객이 없으면 존재할 수 없음.),
학부모(학생이 없으면 불필요. )
  약한개체와 관계 : 이중실선 = 으로 표기함!!! (뜻 : 강한 개체와의 필수참여, 즉 강한 개체 있어야만 존재 가능 의존성, 종속성 표시)

직원아이디: 기본키(실선), 부양가족의 이름: 식별자(점선), 직원이름: 다중속성, 생년월일: 복합속성, 부양가족: 약한 개체

 

약한 개체  
식별 관계 약한 개체는 관계에 필수 참여(=),
강한개체(직원)와 약한개체(부양가족)은 1:다 관계
강한 거 하나에 약한 거 여러 개 매달려 있음
강한 개체 구별하는 키 속성
식별자 약한 개체 구별하는 식별자,
[강한개체 pk + 약한개체 식별자] 복합키처럼 이렇게 약한 개체의 키 구성

 

 

2-2. 속성(Attribute)

- 개체 or 관계가 갖고 있는 고유 특성, 가장 작은 논리적 단위(원자성!!!)

 

속성 분류

1. 단일 값 vs 다중 값

단일 값 속성 다중 값 속성
값 하나만 값 여러 개
고객명, 나이 취미1,취미2, 연락처1,연락처2, 이름(한글),이름(한자),이름(영어)
일반 타원 이중 타원 

 

다중 값 속성 -> 제 1 정규형 쓴다. 

- 개수 정해져 있을 땐 : 속성 연락처1, 연락처2 로 분리

- 개수 제한 없거나 가변적 : 별도 테이블 생성

(위에서 속성 분리하면 [이름 최대 10개 있는 사람 + 이름 하나만 있는 사람] 있을 때 속성 10개를 만들어놓고 나머진 낭비가 된다. 그러니 그럴 땐 테이블을 생성하자!!!)

 

 

2. 단순 vs 복합

단순 속성 복합 속성
더 이상 분해 못하는 속성 의미 분해 가능한 속성
적립금, 나이 주소(시/동/번지), 생년월일(연/월/일), 학번(입학연도/학과/순서),
주민번호 등

이름은 다중값 속성으로, 생년월일은 복합속성으로 표현

 

 

 

3. 저장 vs 유도

저장 속성 유도 속성
직접 저장되는 속성 다른 속성 값으로 계산하는 속성
생년월일, 가격, 할인율 나이(생년월일로 계산), 판매가격(가격,할인율로 계)
실선 타원 점선 타원

- 만약 나이가 실선 타원이면 저장 속성이고, 그냥 해 바뀔 때마다 업데이트하겠다는 뜻

 

* 키 속성

- 개체를 유일하게 식별하게 하는 속성 primary key PK

- 속성 이름에 밑줄로 표시

- 약한 개체 : 키 대신 식별자 라고 부르고 점선으로 표시

직원아이디: 기본키(실선), 부양가족의 이름: 식별자(점선), 직원이름: 다중속성, 생년월일: 복합속성, 부양가족: 약한 개체

 

2-3. 관계(Relation)와 관계 타입

관계 : 개체와 개체 사이 연관성 나타냄. 마름모로 표현

!!!!! 관계에도 속성이 있을 수 있다 !!!!! ex) 구매 관계 속성 : 구매일자, 결제방식

 

차수(관계 참여하는 개체 타입 개수)에 따른 관계 유형

이항관계(개체 타입 2) 삼항관계(개체 타입(사각형) 3개) 순환관계(개체 타입 1개가 자기 자신과 맺는 관계)
학생-학과 직원-프로젝트-부품 학생-멘토링
학생은 / 소속된다 / 학과에 직원은 / 수행한다(부품을 사용해) / 프로젝트를 학생은 멘토링을 받기도, 하기도 한다..
사원은 지시하기도 하고, 지시받기도 한다. (아래 텍스트는 역할 명시한 것.)

 

관계 대응 수, 카디널리티(관계에서 개체 간 대응 비율)에 따른 유형

1:1 1:N N:M
남편-혼인-아내 학과-소속-학생 학생-수강-강좌

 

최솟값과 최댓값 표기

(최솟값, 최댓값)

- min = 0 : 선택 참여

- min = 1 : 필수 참여

- max = * : 여러 번 가능

- max = 1 : 딱 한 번

 

학과 --- (0, *) --- 소속 --- (1, 1) --- 학생

           학과 관점에서      학생 입장에서

           학생 보는것          학과 상태 보는  것

 

학과 관점 : 학과 입장에서 학생 최소 0명(신설 학과여서), 최대 여러 명

학생 관점 : 학생 입장에서 학과 최소 1개, 최대 1

 

Q. 직원 한 명은 노트북을 사용할 수도 있고 안할수도 있다. 노트북도 배정된 직원이 있을 수도 없을 수도 있다.

직원 --- (0, 1) --- 사용 --- (0, 1) --- 노트북

 

참여 제약 조건

전체 참여
: 모든 개체가 반드시 관계에 참여해야 한다
부분 참여 : 일부 개체만 참여해도 됨
필수, 이중선 선택, 옵셔널리티, 단일선
최솟값 표기 시 1 최솟값 표기 시 0

 

학생은 수강관계에 부분참여 : 재학생만 수강에 참여

모든 강좌는 수강관계에 전체 참여 : 모든 강좌마다 수강 신청을 하는 학생이 최소 1명씩은 있다. 

 

학생 -- 수강 == 강좌

 

이 부분이 매우 어려웠다. 이중 실선은 두 가지 쓰임새가 있다.

모든 약한 개체의 관계선은 이중 실선, 모든 이중 실선이 반드시 약한 개체인 것은 아님...

약한 개체 종속성 : 약한 개체는 강한 개체가 없음 존재할 수 없기 때문에 관계선에 이중 실선을 그어서 이 강한개체와의 관계에 반드시 참여해야 한다(전체 참여)를 표시한다. 존재 종속성을 시각화함. 

draw.io로 그려보았다.

IS-A 관계

: 상속 관계

예)

상위 클래스 : 학생

하위 클래스들 : 휴학생, 재학생, 졸업생(상위의 속성을 공통속성으로 갖고, 자신만의 고유속성 갖는다)

선은 넘 그리기 힘들어서 생략...

 

er 다이어그램 표기법 두 가지

피터 첸 표기법 IE (Information Engineering) 표기법 : 새발 표기법
   

 

 

3. er 모델을 관계 데이터 모델로 사상(매핑)하기

 

 

모든 개체는 릴레이션으로 변환한다!

3-1. 개체 타입의 사상

[1단계] 강한 개체 -> 릴레이션으로

직원아이디: 기본키(실선), 부양가족의 이름: 식별자(점선), 직원이름: 다중속성, 생년월일: 복합속성, 부양가족: 약한 개체

개체 이름 -> [직원 릴레이션]

개체의 속성 -> [직원 릴레이션의 속성]

- 키 속성 -> 기본키

- 복합 속성 -> 단순 속성으로 쪼갬

- 다중 값 속성은 뒤에서 한다. 여기선 생략

직원 아이디(기본키) 나이 태어난 년도 태어난 월 태어난 일

 

 

[2단계] 약한 개체

약한 개체는 강한 개체의 pk를 외래키fk로 가져와 자신의 기본키를 만든다.(복합키 형태)
약한 개체 기본키(복합키 형태) : 강한 개체 기본키(외래키로 가져옴) + 자신의 식별자 

 

https://blog.naver.com/jinsol1/100024240682 : 부양가족의 릴레이션 스키마가 궁금해져 서치해봤다.

 

3-2. 관계 타입의 사상

개체 : 여자, 남자 / 관계 : 결혼 / 속성들 로 구성

- 방법1, 방법2 : 한쪽에만 타인꺼 기본키를 내 외래키로 넣는 방법

여자(여자번호, 이름, 나이)
남자(남자번호, 이름, 나이)

 

방법1 : 남자가 여자 번호 가짐 방법2 : 여자가 남자 번호 가짐
여자(여자번호, 이름, 나이)
남자(남자번호, 이름, 나이, 여자번호(FK))
여자(여자번호, 이름, 나이, 남자번호(FK))
남자(남자번호, 이름, 나이)

 

- 방법3 : 개체에 대한 테이블 2개를 관계 릴레이션 하나로 결합 -> 각 기본키 다 가져옴.

결혼(남자번호, 여자번호, 여자이름, 여자나이, 남자이름, 남자나이)

 

- 방법4 : 개체1, 개체2, 관계 모두를 독립된 릴레이션으로 표현

여자(여자번호, 이름, 나이)
남자(남자번호, 이름, 나이)
결혼(여자번호, 남자번호)

 

[3단계] 이진 1:1 관계 타입

방법 1, 2, 3, 4 다 가능!!

- 방법 1, 2 : 한쪽 테이블에 외래키 추가

(예: 컴퓨터 테이블에 사원 번호 기본키를 외래키로 추가

사원 테이블에 컴퓨터 관리번호 기본키를 외래키로 추가)

- 방법 3 : 두 개체를 하나의 테이블로 합치기 -> 관리 힘들어진다.

- 방법 4 : 개체와 관계를 모두 독립된 테이블로 분리하기

(예: 사원, 컴퓨터, 사용 3개 테이블로 분리하기)

 

[4단계] 이진 1:N 관계 타입

방법 1, 2 로 매핑

- 반드시 N측 릴레이션에 1측 릴레이션의 기본키를 외래키로 추가하기!!!!!!!!!!!

(예: 학생 릴레이션에 학과 릴레이션의 기본키인 학과번호를 외래키로 넣기!!!!)

why?? 1측에 N개의 기본키들 다 넣으면 매우 비효율적이다!!!!!!!

 

[5단계] N:M 관계 타입

방법 4로 매핑,사상

- 관계를 따로 교차 릴레이션으로 만들고, 이 안에는 각 엔티티의 기본키를 넣는다.

(예: 교수(사번, 이름), 과목(과목코드, 과목명), 수업(사번, 과목코드) : 교차 릴레이션)

 

[6단계] N진 관계 타입 : er 모델 차수가 3 이상인 경우

방법 4로 매핑, 사상 : 다 분리하자!!!!!

- 5단계와 마찬가지로 개체들, 관계 각각 릴레이션으로 만든다. 이때, 관계 릴레이션에는 각 개체의 기본키를 모은 복합키가 들어간다.

 

[7단계] 다중 값 속성

이 경우

속성의 개수 제한 정해진 경우(최댓값 정해진 경우) 속성 개수 몇 개인지 모를 경우
학생(학번, 이름, 취미1, 취미2, 취미3) 학생(학번, 이름)
취미(학번, 취미이름)
단점 : 최대 100개일 경우, 누군 100개 다 있는데 누군 0개 -> 비효율 -> sparse matrix로 만들어짐 -> 공간 낭비  

 

TIP!!!!!!!!!!!!! 

[다대다 관계] : 무조건 분리하자!!!!! 

- 각 개체 기본키를 관계 릴레이션에 외래키로 가져옴. 

각 개체 기본키 가져와서 외래키로 놓고 복합키 대리키 추가
고객번호(fk) + 상품번호(fk) 주문번호(pk) + 고객번호(fk) + 상품번호(fk)
짱구가 핸드폰을 두 번 주문했을 때, 구분이 안간다.
고객번호 상품번호
001        핸드폰
001        핸드폰

이 두 주문을 구별하기 위해, 대리키 추가한다. ->
주문번호 고객번호 상품번호
1             001       핸드폰
2             001       핸드폰

복합키만으로 구별 안 될 때 식별용 대리키(주문번호) 추가!

 

[일대다 관계] : n측에 1측의 기본키를 외래키로 추가하자!!! 1측 기본키 : 1개, n측 기본키 : n개 당근 1개만 추가하는 게 말이 됨.

- 약한 개체 참여 시 : 위 내용 동일 + (강한개체의 기본키(외래키), 약한 개체 식별자) 로 기본키 구성하기

 

[일대일 관계] : 

- 서로 외래키 주고받기 : 안좋음. 상호참조 발생

- 필수 참여 중심 : 반드시 참여해야 하는 쪽에만 외래키 넣기. 선택 참여쪽은 건드리지 않는다. 필수참여쪽만 외래키 집어넣기

- 테이블 합치기 : 관리 힘들다

 

[다중값 속성] : 무조건 새 테이블 만들기! + 키는 원래꺼+ 해서 (외래키 + 다중값 속성) 복합 기본키로 만들기!

 

[순환 관계] : 상사 1명 vs 사원 n명 일 경우 상사의 기본키를 외래키로 추가해서 사원쪽에 붙인다

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함