🐯
경민민 IT 핸드북
  • Orientation
    • 전달사항
    • 복습방법
    • 수료한 선배의 한마디
    • 간단 자기소개
    • 스터디
  • 백엔드
    • Java
      • 1장 프로그래밍 기초
      • 2장 자바 메모리구조
        • 1. Stack
        • 2. Heap
      • 6장 객체
      • 8장 상속
      • 9장 다형성
      • 10장 추상클래스와 인터페이스
      • 13장 Generic
      • 14장 Thread
      • 15장 Network
      • 16장 Lamda
        • 1. 내부 클래스 (Inner Class)
          • DTO , VO, Builder Pattern
        • 2. 람다 표현식 (Lambda Expression)
        • 3. 스트림 API (Stream API)
          • Optional
      • 17장 Enum
  • 프론트
    • Node.js
    • Java Script
      • ES6+
        • Node.js로 자바스크립트 실행
        • let , const , var
        • Destructuring문법
          • Rest(...) 문법
        • Arrow Function
        • 모듈
        • ETC
    • Type Script
      • 개요
      • TS설치 및 환경설정
      • 타입스크립트 기본
        • 기본 자료형들과 타입추론
        • Object, Array , Tuple
        • Any, Unknown, Union Type
        • Function Type
          • Type Assertion && Narrowing
          • Never type
        • Type Aliases와 Interface
        • 리터럴 타입
        • 함수 추가 문법
        • Class문법
        • 객체 타입 추가 문법
        • 실습문제 1차
        • 실습문제 2차
        • 실습문제 3차
    • React
      • 개요
      • SPA 와 MPA
        • SEO(작성예정)
      • 리액트 프로젝트 생성(18.3.1.ver)
        • HTML + react 샘플
        • CRA 와 Vite 비교
      • 리액트 개념들
        • Component
          • 클래스 컴포넌트(작성예정)
          • 함수형 컴포넌트(작성예정)
        • JSX
        • React Virtual Dom
          • Reconciliation
        • hook
          • useState
        • 리액트 데이터 전달
          • FLUX
      • 백엔드 서버 연동
        • 비동기요청
        • 웹소켓
        • Promise(작성예정)
      • 실습문제 1
      • 실습문제 2
      • 실습문제3
      • 실습문제4
  • 프레임워크
    • Spring
      • Spring 개발환경 구축
        • 프로젝트 환경설정
        • 프로젝트 생성
          • MVC Project 생성이슈
        • Maven 설정
        • web.xml 설정
        • Spring Bean Configuration.xml 설정
      • Spring Legacy Project
        • Spring 요청 및 응답 흐름
        • Spring 주요 Annotation
          • 의존성 주입방식의 차이점
          • @ModelAttribute와 유효성검사
          • 비동기처리
          • 스프링 예외처리
        • Logging
        • Pagination
        • Spring File 업로드 및 다운로드
        • Spring WebSocket
        • Spring AOP
      • Spring 라이브러리들(작성예정)
        • Lombok
        • Maven
        • MyBatis
      • Spring 구성 모듈(작성예정)
      • 스프링 과제
    • Spring Boot
      • Spring Boot 개발환경 구축
      • 스프링 부트 프로젝트 생성방법들
        • 프로젝트에서 사용하는 의존성들
      • 스프링 프로젝트 구조
        • SpringBootApplication
      • application.properties
      • Cross Origin
        • CORS
      • WebSocket
        • Stomp(작성중)
      • 로그인(작성중)
      • Spring Security(작성중)
      • 실습문제 Select
      • 실습문제 Update
      • 실습문제 Delete
  • 형상관리(Git)
    • GitHub설정
    • SourceTree를 활용한 깃허브 연동
      • 소스트리 설치
      • Clone
      • Branch
        • Branch Protection rules
          • Branch Protection Rules 상세규칙
        • Rebase 와 Squash (작성예정)
      • Team Project 설정
        • 팀장 프로젝트 셋팅
          • Collaborator
          • .gitignore 설정
        • 팀원 프로젝트 셋팅
        • 공통 프로젝트 진행
  • 프로젝트
    • 진행순서
      • 요구사항 분석 단계
        • 유용한 사이트
      • 프로그램 설계 단계
        • 유용한 사이트
      • 프로그램 구현단계
        • SourceTree를 활용한 Team Project설정
      • 테스트 단계
  • 배포
    • AWS-EC2 배포 연습
    • DevOps
      • IT시스템의 변화와 DevOps
      • DevOps 라이프사이클
    • 젠킨스
      • 도커
        • 도커 설치 방법
        • 도커 기본 명령어들
      • 젠킨스 설치
      • 젠킨스 프로젝트 생성
      • 젠킨스 소스코드 통합 - Github
      • 젠킨스 빌드 설정 - Maven
      • 배포 서버 구축하기
      • 파이프라인 구축
      • AWS 서버 생성
        • AWS 인스턴스 생성
        • AWS - Zenkins 연동
        • AWS - 배포서버 연동
        • AWS - Jenkins CI/CD파이프라인 구축
  • 유용한 사이트 모음
  • SQL
    • SQLD
      • 데이터 모델링의 이해 - 스키마
      • 데이터 모델링의 이해 - ERD
      • 데이터 모델링의 이해 - 정규화
      • 데이터 모델링의 이해 - NULL
      • SQL 기본 및 활용 - WINDOW FUNCTION
    • Oracle
      • 1장 개요
      • 2장 SQL
  • LLM 서비스
    • 1장 LLM에 대한 이해
    • 2장 프롬프트 엔지니어링
      • 프롬프트와 프롬프트 엔지니어링
      • GPT PlayGround
      • 프롬프트 작문 유형
      • 기본 프롬프트 엔지니어링 태크닉
      • 고급 프롬프트 엔지니어링 태크닉
        • ReAct Prompting
        • Active-Prompt
        • Reflexion
        • Graph Prompt
      • OpenAI API설정
      • OpenAI를 활용한 프롬프트 엔지니어링 실습
        • 실습 프롬프트
    • 3장 Lang Chain 프레임워크
      • LangSmith 프레임워크
        • LangSmith를 활용한 LangChain 모니터링 설정
      • LangChain 실습 1 - Prompt
        • 실습 코드
      • LangChain 실습 2 - LLM 캐시와 메모리
    • 4장 RAG
      • Document Loader - 문서 로더
      • Text Splitter - 텍스트 분할
      • Embedding - 임베딩
      • Vector Store - 벡터 저장소
      • Retriever - 검색기
      • ReRanker - 재평가자
      • RAG
Powered by GitBook
On this page
  • ERD(Entity-Relationship Diagram)
  • ERD의 주요 개념들
  • 1. Entity(개체)
  • 2. Attribute(속성)
  • 3. 도메인(Domain)
  • 4. Instance(인스턴스)
  • 5. 관계(Relationship)
  • 6. 관계차수(Cardinality)
  • 7. 참여도(Optionality)
  • 8. 식별자(Identifier)
  • 식별자의 분류
  • 1. 대표성 여부
  • 2. 스스로 생성 여부
  • 3. 속성의 수
  • 4. 대체 여부
  • Entitiy의 역할별 종류
  • 기본키 엔티티(Key Entity)
  • 중심 엔티티(Center Entity)
  • 행위 엔티티(Activity Entity)
  • 식별자와 비식별자 관계
  • 1. 식별자관계(Identifiying RelationShip)
  • 2. 비식별자관계(Non-Identifying Relationship)
  • ERD 작성 순서
  1. SQL
  2. SQLD

데이터 모델링의 이해 - ERD

ERD의 기본 개념에 대해 기술할 페이지

Previous데이터 모델링의 이해 - 스키마Next데이터 모델링의 이해 - 정규화

Last updated 6 months ago

ERD(Entity-Relationship Diagram)

데이터베이스 모델링에서 사용되는 데이터 시각화 도구중 하나입니다. ERD를 통해 데이터베이스로 구현해야할 개체(Entity)와 이 개체들간의 관계(Relationship)를 설정하여 시각화시킬 수 있습니다.

ERD의 주요 개념들

1. Entity(개체)

  • 업무의 관심대상이 되며, 관리할 필요가 있는 유형, 무형의 사물을 Entity로 설계합니다.

  • 학생관리프로그램을 예로 들면 학생정보를 관리하기 위하여 학생 Entity를 만들 수 있습니다.

2. Attribute(속성)

  • Entity가 관리해야하는 각 정보를 속성이라고 부릅니다.

  • 데이터 모델링관점에서 속성은 더 이상 분리되지 않는 최소한의 데이터단위를 의미합니다.

  • 각 속성은 한개의 값을 가지고 있어야합니다.

  • 모든 Entity는 반드시 2 개 이상의 속성을 가지고 있어야 합니다.

  • 학생 Entity의 속성으로는 학번, 이름, 나이, 주소 등이 있겠습니다.

속성명 명명규칙

  • 해당 업무에서 사용하는 이름을 서술한다

  • 서술형이나 약어를 사용하지 않는다

  • 전체 데이터 모델에서 유일성있는 이름을 사용한다.

  • 속성의 의미가 분명히 드러나도록 작성할것.

속성의 종류

  1. 기본속성(Base)

    1. 엔티티가 현실세계에서 가지는 특징,값을 그대로 기술한 속성입니다. 고급스럽게 생물/사물이 가지는 본질적 속성이라고 표현합니다.

    2. 예를 들면 학생 엔티티에서 이름, 학년, 생년월일등이 해당합니다.

  2. 파생속성(Derived)

    1. 다른 속성의 값으로부터 계산되거나 파생되는 속성입니다.

    2. 예를 들어 학생 엔티티에 나이와 생년월일 두 속성이 존재할 때 나이라는 속성은 값을 직접 관리할 필요 없이 생년월일을 통해 계산하여 값을 유추할 수 있는 파생속성입니다.

  3. 설계속성(Design)

    1. 데이터 조작의 편리성을 위해 인위적으로 설계된 속성을 의미합니다.

    2. 예를 들어 학생의 엔티티에 학생의 재학 상태를 관리한다고 할 때 재학중, 휴학중, 퇴학, 재적 등의 상태를 관리하기 위해 인위적으로 1, 2,3,4등의 값을 부여하는 경우가 설계속성에 해당합니다.

3. 도메인(Domain)

  • 속성이 가질수 있는 값의 범위를 의미합니다.

  • 도메인을 참고하여 해당 속성이 가지게될 데이터의 타입, 최대 크기, 제약사항등을 지정합니다.

  • 예를 들어 학생 엔티티의 grade(학년)속성의 경우 최소 1, 최대 6의 도메인을 가집니다.

4. Instance(인스턴스)

  • 엔티티의 속성으로 구현된 하나의 값을 지칭하는 단어입니다.

예를 들어 학생Entity에 속성으로 학번, 이름 , 나이 가 존재할 경우 아래와 같이 인스턴스를 만들수 있습니다. 즉 , 한 행에서 속성값의 집합을 인스턴스라고 부릅니다.

학번
이름
나이

201801

민경민

20

201802

민경민2

21

Entity 성립 조건

  1. 반드시 2개 이상의 속성을 보유해야 한다.

  2. 반드시 2개 이상의 인스턴스가 포함되어야 한다

  3. 업무와 관련된 사물이어야 한다.

  4. 엔티티는 다른 엔티티와 최소 한개 이상의 관계가 있어야 한다.

5. 관계(Relationship)

  • 서로 다른 엔티티간의 연관성을 관계(Relationship)라고 정의합니다.

  • 서로 관계가 있는 엔티티간에는 공통 속성을 정의하여 데이터를 연결할 수 있습니다.

  • 위 예시를 살펴보면 학생과 수강과목 엔티티는 학번을 통해 두 엔티티가 관련이 있음을 나타내고 있습니다. 만약 민경민학생이 수강하는 수강과목을 얻어오려면 수강과목 엔티티에서 민경민학생의 학번을 찾으면 될것이고, 도덕과목을 수강중인 학생들의 이름을 찾으려면 도덕과목의 학번과 학생의 학번을 대조하여 찾으면 될것입니다.

  • 이렇게 두 엔티티간의 관계를 설정할 때 연결되는 시작 방향의 엔티티에 따라 서로 다른 관계명을 규정할 수 있습니다.(수강한다, 수강된다)

  • 또한 두 관계가 가지는 결합도의 크기와, 관계의 지속여부에 따라 연관관계(Association Relationship)와 의존관계(Dependency Relationship)으로 구분됩니다.

1) 연관관계(Association Relationship)

  • 두 엔티티간의 결합도가 상대적으로 높고, 상시 유지되는 관계입니다.

  • 예를 들어 학생과 수강과목과 같이 외래식별자를 통해 두 엔티티는 지속적으로 연결이 되고 있습니다.

2) 의존관계(Dependency Relationship)

  • 두 엔티티간의 결합도가 상대적으로 낮고, 그 관계가 일시적으로만 유지되는 관계입니다.

  • 예를 들어 학생이 수강신청을 하는 순간적인 상황에서 학생 엔티티와 수강신청 엔티티는 일시적으로 관계를 맺어 수강신청을 하는 학생의 정보를 얻어오겠지만, 수강신청이 완료되면 두 엔티티는 서로 독립적으로 존재하게 될 것 입니다.

6. 관계차수(Cardinality)

  • 관계가 있는 두 엔티티간에 수적으로 어떤 관계에 있는지를 나타내는 특성을 의미합니다.

  • 관계차수에는 1:1 , 1:N, M:N의 관계가 존재합니다.

  • 위 학생과 수강과목의 관계차수에 대해서 생각해본다면 1명의 학생은 N개의 수업을 들을수 있고, 1개의 수업에는 M명의 학생이 등록 될수 있으므로 N:M의 관계를 가집니다.

  • 1:1관계의 예시로는 학생 엔티티와 학생증 엔티티와 같이 각 엔티티의 인스턴스가 반드시 1:1로만 존재해야 하는 경우가 있으며 1:N관계의 예시로는 학생 엔티티와 학교 엔티티의 관계를 떠올리면 됩니다. 1개의 학교에는 N명의 학생이 존재할수 있으며 1명의 학생은 반드시 1개의 학교에만 속합니다.

  • ### 샘플 이미지 추가하기###

7. 참여도(Optionality)

  • 두 엔티티의 관계가 선택사항인지 필수인지를 나타내는 개념입니다.

  • 참여도에는 Mandatory(필수) Optional(옵션) 두 가지 옵션이 존재합니다.

  • 필수참여(Mandatory)는 관계에 있는 한 쪽 엔티티의 모든 인스턴스가 다른 엔티이의 인스턴스와 관계가 있는 경우 설정하며, 선택적 참여(Optional)는 두 엔티티간의 관계가 필수가 아님을 의미합니다.

  • 예를 들어 학생과 학과 엔티티가 있다고 할때 모든 학생은 반드시 학과에 속해 있어야 하므로 학생엔티티는 학과 엔티티에게 있어 필수(Mandatory)참여도를 가집니다.

  • 또 다른 예로 학생과 동아리 엔티티가 있다고 할 때 학생은 동아리에 속할 수도 있고 속하지 않을 수도 있습니다. 이와 같은 관계를 표현할 때는 선택적 참여(Optional)로 표시합니다.

  • ### 샘플이미지 추가 ###

8. 식별자(Identifier)

식별자는 엔티티에서 각 인스턴스를 구별(식별) 하기 위한 목적으로 사용됩니다.

식별자는 엔티티와의 관계를 설정할 때나 데이터의 무결성을 유지하기 위하여 사용되는 중요한 자원 중의 하나로 분류별로 다양한 식별자가 존재하며 , 각 식별자의 특징은 중첩될 수 있습니다.

식별자의 분류

1. 대표성 여부

1) 주식별자(Primary Identifier)

  • 엔티티 내에서 각 인스턴스를 구분할 수 있으며, 대표성을 가지고 있어 다른 엔티티와 참조관계로 연결할 수 있는 식별자입니다.

  • 학생 엔티티에서 학번과 같은 속성이 주식별자가 될 수 있습니다.

주식별자의 특징

  1. 유일성 : 주식별자에 의해 엔티티내의 모든 인스턴스들은 유일하게 구분된다.

  2. 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수로 구성되어야 한다.

  3. 불변성 : 주식별자가 한번 지정되면 식별자의 값이 변하지 않아야 한다.

  4. 존재성 : 주식별자에는 반드시 데이터가 들어가야 한다.(null 불가)

2) 보조식별자(Alternate Identifier)

  • 주 식별자와 같이 각 인스턴스를 구분할 수 있지만 대표성을 가지지 못하여 다른 엔티티와 참조관계를 연결할 수 없는 식별자입니다.

  • 학생 엔티티에서 학번이 주식별자라면, 주민등록번호와 같이 유니크한 값도 보조식별자로 설정할 수 있습니다. 단, 대표성을 가지는 속성은 학번이므로 타 엔티티에서 보조식별자를 통해 참조관계를 설정할 수 없습니다.

2. 스스로 생성 여부

1) 내부 식별자(Internal Identifier)

  • 엔티티 내부에서 스스로 생성된 식별자를 의미하며 자신만의 속성으로 인스턴스를 식별할 수 있습니다.

  • 학생 엔티티에서 학번과 같은 속성이 내부 식별자에 해당합니다.

2) 외부식별자(Foreign Identifier)

  • 엔티티 안에서 스스로 생성된 식별자가 아닌 타 엔티티와의 관계를 통해 얻어오는 식별자를 의미합니다.

  • 학생과 수강과목 엔티티에서 수강과목의 학생번호가 외부 식별자에 해당합니다.

3. 속성의 수

1) 단일 식별자(Single Identifier)

  • 하나의 속성으로 구성된 식별자를 의미합니다.

  • 학생 엔티티에서 학생번호가 단일식별자에 해당합니다.

2) 복합 식별자(Composizte Identifier)

  • 여러개의 속성으로 구성된 식별자를 의미합니다.

  • 학생엔티티, 학생별 수강과목 엔티티, 수강과목 엔티티가 존재한다고 할때 학생별 수강과목에서는 학생번호와 수강과목 번호 2개를 합친 복합식별자의 형태로 각 인스턴스를 관리합니다.

4. 대체 여부

1) 본질식별자(Essential Identifier)

  • 해당 엔티티가 본질적으로 가지는 고유한 속성을 통해 인스턴스를 식별하는 식별자를 의미합니다.

  • 학생 엔티티에서 주민번호와 같이 각 학생을 구분할 수 있는 속성을 본질식별자로 채택합니다.

2) 인조식별자(Artficial Identifier)

  • 엔티티의 고유성을 보장하기 위해 인위적으로 만들어진 대체된 식별자를 의미합니다.

  • 실세계에 존재하는 자연적인 속성이 아닌, 데이터베이스 관리를 위해 인위적으로 만들어진 랜덤 id, autoincrement(자동증가값)등이 인조 식별자로 활용됩니다.

  • 학생 데이터를 관리하기 위해 데이터베이스에서 자동으로 생성된 숫자형 고유 ID를 학생번호에 저장하여 관리하는 경우 이 학생번호가 인조식별자에 해당합니다.

Entitiy의 역할별 종류

기본키 엔티티(Key Entity)

  1. 다른 엔티티에 종속적이지 않고 독립적으로 존재 할 수 있는 엔티티입니다.

  2. 다른 엔티티의 참조없이 고유하게 식별이 가능하며, 프로그램의 중요한 개체를 기본키 엔티티로 설정한 후 다른 엔티티에서 기본키 엔티티를 참조하게끔 관계를 형성합니다.

  3. 예를 들어 학생과, 수강과목의 관계에서 학생은 수강과목과 상관없이 존재할 수 있으므로 기본키 엔티티에 해당합니다.

중심 엔티티(Center Entity)

  1. 다른 엔티티들과의 관계를 통해 중심이 되는 엔티티로 여러 엔티티를 연결하는 중간지점역할을 합니다.

  2. 예를 들어 학생과 수강과목의 관계사이에 학생별 수강목록과 같은 중심 엔티티를 추가하여 M:N관계를 1:M:1관계로 만들 수 있습니다.(정규화)

행위 엔티티(Activity Entity)

  1. 기본 엔티티의 특정 활동/행동에 대한 정보를 기록하는 엔티티입니다.

  2. 기본적으로 행동의 중심이 되는 엔티티가 존재해야 하며, 여러 엔티티와 관계를 맺고 있을 수 있습니다.

  3. 예를 들면 점수 엔티티가 행위 엔티티에 속합니다. 학생이 시험을 보면 점수 엔티티에 학생이 본 시험 내용이 기록이 됩니다.

식별자와 비식별자 관계

식별자 관계와 비식별자 관계는 두 엔티티간에 외래식별자(Foreign Identifier)가 어떤식으로 관계를 맺는지에 따라 결정됩니다. 서로 관계가 있는 두 엔티티간에는 부모-자식 관계가 성립이 되는데, 본인의 주식별자를 상대 엔티티에게 넘겨주는 엔티티는 부모 엔티티, 외래식별자를 전달받는 엔티티는 자식엔티티라고 부릅니다.

예를 들어 학생 - 전공 엔티티 사이에서 학생은 부모, 전공은 자식 엔티티가 됩니다.

#이미지#

1. 식별자관계(Identifiying RelationShip)

  • 식별자 관계는 자식 엔티티에서 외래식별자를 주식별자로 사용하거나, 주식별자의 속성에 추가하여 복합식별자로 사용합니다.

  • 이러한 관계는 부모-자식간의 강한 연결관계를 표현하기 위해서 사용하며, 자식 엔티티는 항상 부모엔티티에게 종속 되어 있습니다.

  • 만약 식별관계의 부모 인스턴스가 삭제된다면 종속된 자식엔티티의 인스턴스도 삭제될것 입니다.

  • 예를 들어 학생과 성적 엔티티가 존재할 경우 성적은 학생 엔티티에 종속적이기 때문에 학생이 삭제될경우 성적 엔티티 또한 삭제되어야 할 것입니다.

2. 비식별자관계(Non-Identifying Relationship)

  • 비식별자 관계는 자식엔티티에서 외래식별자를 주식별자에 포함시키지 않고 단순한 일반 속성으로 사용합니다.

  • 이러한 관계는 약한 연결관계(Weak Dependency)를 표현하기 위해 사용하며, 자식은 부모에게 종속되어있지 않습니다.

  • 비식변관계에서는 부모엔티티의 변화가 자식엔티티에 영향을 끼치지 않습니다.

  • 예를 들어 학생과 학과 엔티티가 존재할 경우 학과가 사라진다고 해서 학생데이터가 삭제될 일은 없을 것입니다.

  • 이미지 추가

ERD 작성 순서

  1. 개체(Entity)를 정의한다

  2. 개체(Entity)를 다이어그램에 적절하게 배치한다

  3. 개체(Entity)간의 관계(Relationship)를 설정한다.

  4. 관계명을 기술한다

  5. 관계의 참여도를 기술한다

  6. 관계의 필수여부를 기술한다.

추가

각 챕터에 이해를 위한 이미지 추가하기 😅

-> 학생, 성적, 과목등 테이블 만들고 필요할때마다 캡쳐후 관계 그려주기.

관계차수, 참여도, 비식별관계에 대한 이미지 추가하기.

+ 전표, 업무기술서에서 연관관계를 찾는 방법 . 굳이?

출처 :
https://blog.naver.com/idxzone/60000353482