본문 바로가기
DB

ERD 1-1~2-4

by 자바꿈나무00 2023. 1. 15.

DB Chap01-1. 모델링 개요

 

모델링 

: 현실 세계를 단순화 시켜 표현하는  기법

 

엔티티 

: 업무의 관심 대상이 되는 정보를 지님 또는 정보를 관리한 필요가 있는 유형, 무형, 입출고 관련 이력, 거래명세서같은 문서, 색상 코드 등

 

속성

: 엔티티에서 관리해야 할 최소 단위 정보 항목(관심이 있는 항목),

하나 이상의 속성을 포함한다.(학번이나 이름 같은 기본 속성, 다른 값들로 부터 가져올 수 있는 정보인 포인트 적립 같은 유도 속성, 외래키 같은 설계 속성 등)

 

인스턴스 

: 엔티티의 속성으로 실제로 구현되는 하나의 값

- 엔티티 + 속성 =>클래스

- new 로 생성된 인스턴스

 

앤티티의 조건

 

  1. 업무의 관심 대상이 되는 사물일 것
  2. 두 개 이상의 인스턴스
  3. 필요한 속성

 

속성의 명명규칙

 

  1. 속성의 의미 명시
  2. 해당 업무에서 사용하는 명칭 부여
  3. 서술식(수식어, 소유격)x, 약어x
  4. 엔티티에서 유일하게 식별 가능하도록 지정할 것(중복 비허용

 


ERD (Entity Relationship Diagram)

- 개체 관계도

- 요구분석 사항에서 얻어낸 엔티티와 속성들을 그림으로 그 관계를 도출한 것

erd 예시

주식별자 (Primary Identifeier)

- 엔티티에 소속된 인스턴스들을 구별하는 기준 역할을 하는 속성

- 중복x ( 유일성)

- 복합 키일 경우 하나의 주식별자만으로 구분이 가능할 때 굳이 여러 개를 갖지 않게 할 것(최소성)(복합키)

- 값 지정 후 변경하지 말 것(불변성) 예를 들어 학번같은 거 변경하지 않아야 함

- 게시판 번호가 1~10번이 있을 경우 3번을 지운다 해서 1~9로 당겨지지 않음(불변성)

- not null과 관련된 특징. 주식별자에 값이 없을 수 없음(존재성)

- 엔티티의 속성 중 주식별자 속성이 없다면 새로운 속성을 꼭 생성해야함(인위적 주식별자)회원번호나 부서코드 같은 것

 

외래식별자 (Foreign Identifier)

- 관계가 있는 두 엔티티를 부모, 자식 엔티티로 구분한 후 부모의 주식별자와 공통 속성이 자식에게도 존재하면 해당 속성을

외래식별자로 지정

- 자식 엔티티에 부모 엔티티 주식별자 공통 속성이 없으면 자식에게 속성을 추가 후 외래식별자로 지정

 


ERD표기법 (관계)

- 상호 관꼐가 있는 두 엔티티 중에 어느 쪽의 정보가 먼저 생성 되는가에 따라 경정

- 자식 엔티티는 부모 엔티티의 정보가 있어야만 존재 가능

 

참여도

- 필수, 선택(존재 할 수도 아니어도 되는 것) 두 가지로 존재

- 어떤 기준이 되는 엔티티와 반드시 대응되는 엔티티가 존재한다면 필수, 선택이 결정됨

 

카디널리티

- 두 개의 엔티티 간 관계에서 엔티티에 속해 있는 인스턴스들을 수적으로 표현한 것

- 인스턴스가 1개와 대응된다면 '|' ,

다수와 대응된다면


식별 관계(Identifying Realationship)

- 1:n 관계에서 외래 식별자가 자식 엔티티의 주식별자의 일부가 되는 관계

- PFK로 표시(외래 식별자가 주식별자의 역할도 한다.)

- 실선으로 관계를 표시

 

비식별 관계(Non-Identifying Relationship)

- 1:n 관계에서 외래 식별자가 자식 엔티티의 주식별자 역할을 하지 못하고 단순히 속성으로 추가되는 관계

- FK로 표시 (단지 외래식별자의 역할만 함)

- 점선으로 관계 표시

예1,2

 

 

학생별취미-학생

처음에는 비-식별관계로 설정해야 쉬움

학생들 취미라는 엔티티의 값을 한 행 씩 실제로 넣는다고 생각해보기

바둑이라는 취미에 홍길동이라는 학생, 김말동이라는 학생이 추가가 될 때 바둑이 주식별자 역할을 하나요?

바둑 하나에 벌써 학생 둘이 들어와 버리면 주식별자의 역할을 못하는 게 파악됨. 그럼 이때 식별관계로 바꾸면 됨

이렇게 두개가 세트로 묶이면 주식별자 역할을 잘 하도록 처리됨

 

예1

사원정보- 부서정보

비-식별관계로 먼저 처리해보기

홍길동 사원이 여러 부서에 속할 수 없으므로 한 사원은 하나의 부서에 속해있음

그래서 굳이 사원번호와 부서코드를 묶어서 처리하지 않아도 됨

비-식별관계로 둬도 무방한 경우

 

예2


[자바/DataBase] DB (Chap02-3. ERD(개체 관계도)(2))

 

1:1 관계 

- 굳이 엔티티를 나눌 필요 없어서 하나의 엔티티로 합칠 수 있음

 

1:N 관계

- 제일 많이 사용

 

 

M : N 관계

M : N 관계

- erdcloud에서 불가능

 

이 순서를 외우는 것 권장함

1번에서 부모, 자식 관계 잘 모르겠을 때는 2번을 먼저 해보기


[자바/DataBase] DB (Chap02-4. Entity 도출 실습문제(3))

실습1

실습1

 

 

필수관계 클릭

 

부모클릭
자식 클릭

 

 

 

비-식별관계 클릭

사원이 여러 명인 경우 날짜가 한 행을 일일히 구분 불가능함

 

비-식별관계 해제 후 식별관계로 변경

 

날짜와 사번이 묶이면 주식별자의 역할을 잘 할것

 

 

 

 

 

 

실습2

실습2
참여도는 선택으로 클릭
부모 클릭
자식 클릭

 

비-식별관계로 일단 설정

- 어떤 고객이 상담 전화를 할 때 마다  일련변호가 계속 부여함

- 한  상담에 한 고객만 담당하니까 그 주식별자의 역할을 잃지 않음

 

선택클릭

 

- 부모,자식관계? 상담일지지가 반품요청일 경우 반품목록에 값이 insert되니까 상담일지가 부모

- 참여도는? 상담내용이 반품요청일 때 반품목록에 값이 들어가지만 만약 수리요청일 경우 반품목록에는 값이 들어가지 않음 ->선택

 

부모클릭
자식클릭

 

- 반품목록에는 식별자가 없는 상태니까 식별관계로 해야함

 

식별관계 클릭

 

결과

- 문제에서 수리요청인 경우에 대한 내용이 업무 기술서에는 잘 나타나지 않았지만 실제로는 수리 목록이라는 엔티티가 있을 수 있다.

수리목록이 있을 경우 상담일지와는 반품목록처럼 1:1관계일 것(아크관계)

 

- 이 경우 상담시 반품을 요청하면 수리목록에는 null값이 들어가고, 수리를 요청하면 반품목록에 null값이 들어감

- 그랬을 경우 이렇게 분리해두는 게 좋다(아크관계 차후 내용 추가 참고)

 

실습3

실습3

강사가 잠시 일을 쉬게 되면 수업을 안 할 수도 있겠죠

그 경우 비-식별로 설정해두고 

한 과정을 한 강사가 수업을 하니까 주식별자 역할을 잃지 않겠죠

 그래서 비식별 관계로 유지할께요

 

 

강사 -과정 비식별 관계로 연결

단, 한 과정에는 여러 명의 학생들이 있으니 과정은 주식별자 역할을 잃으니까 식별관계로 연결

 

과정- 학생 식별관계로 연결

 

 

 

난이도 상

실습4

1:n관계

 

실습4

 

한 물품은 한 제조회사에서 생산되니까 주식별자(비-식별관계) 유지됨

물품- 제조회사 비-식별관계

고객이 있어야 고객별물품이 있으니까 고객이 부모

고객이 물품을 안 살 수도 있으니까 선택으로 비-식별관계

고객 - 고객별구입물품 비-식별관계

어떤 날은 아침에 살 수도 있고 저녁에 살 수도 있는데 그런 경우 구입날짜는 주식별자 역할을 잃을 것

그러면 이 관계를 식별관계로 둠

식별관계로 변경

 

그런데  구입날짜랑 고객번호를 묶어도 주식별자 역할을 못함

(예를 들어3월 1일에 1번 고객이 뭘 샀는데 저녁에 또 뭘 샀을 경우 주식별자 역할을 못한다는 말)

그러면 그냥 두고

고객별구입물품과 물품을 연결해볼게요

물품이 있어야 고객

구입물품이 있으니 물품이 부모가 됨

물품부모 - 고객별구입물품 자식 식별관계

 

 

 

 

실습5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'DB' 카테고리의 다른 글

DB가 뭘까  (0) 2023.01.22
DB 3-7/4-1/4-2/4-3/4-4/5-1  (0) 2023.01.19
DB3-1~3-4  (0) 2023.01.15