ERD 설계

1. ERD 설계의 개념과 의의

  • ERD(Entity-Relationship Diagram) 설계는 단순히 데이터베이스 테이블을 시각적으로 그리는 작업이 아님
  • 학술적·기술적으로 “현실 세계의 비즈니스 도메인을 정형화된 모델링 언어를 통해 데이터 구조로 추상화하는 고도의 엔지니어링 과정”을 의미함

1.1 ERD 설계의 핵심 개념

  • 비즈니스 규칙(Business Rule)의 기호화
    • 현업에서 사용하는 말(말씀, 문서, 업무 프로세스)은 모호성을 가짐
      • 예시: 우리는 단골 고객에게 특별 혜택을 준다 🡲 개발 불가능
    • ERD 설계는 이러한 모호한 비즈니스 규칙을 엔터티(Entity), 속성(Attribute), 관계(Relationship), 사상수(Cardinality)라는 엄격한 표준 기호로 치환하여 단 하나의 의미로만 해석되도록 고정하는 작업
  • 점진적 구체화 (Multi-Level Modeling)
    • ERD 설계는 한 번에 완성되지 않고 인간의 사고 흐름에 맞춰 점진적으로 발전함
      • 개념적 설계
        • 기술적 요소를 배제하고 “무엇(What)”을 관리할 것인가에 집중 🡲 핵심 뼈대 확립
      • 논리적 설계
        • 어떻게 데이터 중복을 없애고 무결성을 유지할 것인가(정규화)에 집중 🡲 상세 속성과 식별자 정의
      • 물리적 설계
        • 특정 DBMS의 특성과 하드웨어 성능(반정규화, 인덱스)을 고려
        • 실제 컴퓨터 공간에 이식할 수 있는 도면으로 완성

1.2 ERD 설계의 의의

  • 프로젝트 생명주기(SDLC) 관점에서 ERD 설계가 가지는 의의
    • ‘선(先) 설계, 후(後) 구현’을 통한 비용의 기하급수적 절감
      • 개발 프로세스에서 설계가 가지는 가장 큰 의의는 경 경제성
        • 요구사항의 모순이나 데이터 구조의 결함을 코딩 단계(구현)나 테스트 단계에서 발견
          • 시스템 전반을 뜯어고쳐야 함 🡲 막대한 재작업 비용(Rework Cost) 발생
        • ERD 설계 단계에서 발견
          • 지우개와 연필(혹은 모델링 툴)만으로 구조를 쉽게 변경 가능
          • 프로젝트의 위험 요소를 가장 저렴한 비용으로 선제 해결 가능
    • 비즈니스 언어와 데이터 언어 사이의 유일한 ‘번역기(Bridge)’
      • 시스템 개발에는 기획자, 현업 실무자, DBA, 백엔드 개발자, 프론트엔드 개발자 등 다양한 이해관계자가 참여함
      • 이들은 서로 사용하는 언어가 다름
        • 예시
          • 현업 : “주문이 들어오면 공장에 알림을 보내고 재고를 깎아주세요.”
          • 개발자 : “Insert 쿼리가 발생하면 트리거를 태우거나 메시지 큐로 이벤트를 쏴야겠군.”
      • ERD는 이 양 극단의 언어를 연결하는 공통의 시각 언어(Universal Visual Language)
        • 잘 차려진 ERD 한 장을 보며 기획자와 개발자가 함께 업무 로직의 타당성을 검증할 수 있는 소통의 도구로서 거대한 의의를 가짐
    • 데이터 무결성(Data Integrity)과 안정성의 청사진
      • 프로그램 소스 코드는 버그가 나면 수정해서 다시 배포하면 그만
      • 그러나 **한번 깨지거나 중복되어 엉망이 된 데이터는 복구하기가 불가능에 가깝거나 엄청난 대가를 치러야 함
      • ** ERD 설계 과정에서 진행하는 ‘정규화(Normalization)’와 ‘제약조건(Constraint) 정의’**
        • 데이터가 태어날 때부터 소멸할 때까지 오염되지 않고 일관성을 유지할 수 있도록 보호막을 치는 과정
        • 즉, 시스템의 ‘영혼’과 같은 데이터를 안전하게 담는 그릇을 디자인하는 엄숙한 의의가 있음
    • 시스템 자산의 공식 문서화 (Data Governance)
      • 대다수의 기업 시스템은 구축 이후 수년, 수십 년간 유지보수 과정을 거침
      • ERD는
        • 최초 개발자가 퇴사하더라도 시스템의 구조를 원형 그대로 파악할 수 있게 해주는 최종 명세서이자 인수인계서
        • 잘 관리된 ERD는 기업의 데이터 자산을 체계적으로 관리하는 ‘데이터 거버넌스’의 핵심 기반이 ehla


  • 코딩은 컴퓨터에게 일을 시키는 기술이지만, ERD 설계는 복잡한 현실 세계를 정돈된 논리로 지배하는 아키텍처 기술
  • 훌륭한 개발자는 키보드를 두드리는 시간보다, ERD를 보며 데이터의 흐름과 비즈니스의 모순을 고민하는 시간에 더 집중해야 함

2. ERD 설계 도구의 선택

  • 기본적으로 고려해야 할 4가지 핵심 사항
    • 도구를 평가하기 전, 우리 프로젝트 환경과 조직이 어떤 상태인지 먼저 정의해야 함

    • 포워드 엔지니어링(Forward Engineering)의 깊이
      • 핵심 질문
        • 모델러가 그린 그림(ERD)이 실제 DB 스키마(DDL)로 얼마나 정밀하게 변환되는가?
      • 고려 사항
        • 단순히 CREATE TABLE 문만 뽑아주는 수준인지?
        • 테이블 스페이스 지정, 외래키(FK) 제약조건 옵션(ON DELETE CASCADE 등), 데이터 타입의 DBMS별 완벽 호환성까지 지원하는지?
    • 라운드 트립(Round-Trip) 및 동기화(Synchronization) 능력
      • 핵심 질문
        • 설계가 바뀐 내용이나, 반대로 운영 중인 DB가 바뀐 내용을 양방향으로 안전하게 일치시킬 수 있는가?
      • 고려 사항
        • 실무에서는 ERD 설계 후 개발 도중에 구조가 바뀌는 일이 허다함
        • 이때 기존 데이터를 날리지 않고 차이점만 분석하여 ALTER 문을 안전하게 생성해 주는 Diff 엔진(동기화 기능)의 유무가 생산성을 결정지을 수 있음
    • 팀 협업 및 변경 이력 관리 (Version Control)
      • 핵심 질문
        • 여러 명의 아키텍트와 개발자가 동시에 하나의 ERD를 수정할 수 있는가?
        • 변경 이력이 추적되는가?
      • 고려 사항
        • 대형 프로젝트일수록 파일 단위(예: .xml, .erd)로 공유하면 충돌이 발생함
        • Git과의 궁합이 좋거나(텍스트 기반 저장), 자체 클라우드/리포지토리를 통해 동시 편집 및 버전 관리(History)를 지원해야 함
    • 다중 DBMS(Multi-Database) 지원 여부
      • 핵심 질문
        • 우리 시스템이 단일 DB만 쓰는가, 아니면 다양한 DB(MySQL, PostgreSQL, Oracle 등)를 혼용하는가?
      • 고려 사항
        • 특정 DBMS 전용 툴(예: MySQL Workbench)은 해당 DB에는 최적화되어 있으나
        • 다른 DB로 이전하거나 이기종 DB를 결합할 때 한계가 있음
        • 전사 표준 도구를 고를 때는 범용성을 반드시 고려해야 함
  • 구체적인 ERD 도구 선택 기준 (Evaluation Criteria)
평가 기준세부 검토 항목비고
엔지니어링 성능
(Engineering Capability)
Forward: ERD 🡲 DB 생성 스크립트 추출 정확도
Reverse: 가동 중인 DB 🡲 ERD 시각화 정밀도
Diff/Sync: 설계와 실제 DB 간의 차이점 자동 동기화
• 실무형 설계 도구와 단순 드로잉 툴(Draw.io 등)을 가르는 가장 결정적인 기준
표기법 및 모델링 규격
(Notation Support)
• 까마귀 발 표기법(Information Engineering) 지원 여부
• IE, IDEF1X, Chen 등 다양한 표준 표기법 전환 가능 여부
개념/논리/물리 단계별 뷰 전환 지원
• 교육 및 표준화 관점에서 매우 중요
• 논리 모델(한글명)과 물리 모델(영문명)이 따로 관리되어야 진정한 모델링 툴
협업 및 클라우드
(Collaboration)
• 동시 편집(Real-time Co-editing) 기능 제공 여부
• 웹 브라우저 기반(SaaS) 가동 여부
• 변경 사항에 대한 코멘트 및 승인(Approve) 워크플로우
• 원격 근무나 대규모 조별 프로젝트 강의 시 SaaS 기반 툴이 압도적으로 유리함 (예: DrawDB, ERDLab 등)
비용 및 라이선스
(Cost & License)
• 오픈소스(Open-Source) 또는 완전 무료(Free) 여부
• 상용 도구인 경우 학생/교육용 라이선스 제공 여부
• 온프레미스(On-Premise) 구축 시 추가 비용 발생 여부
• 기업에서는 ERwin, DA# 같은 고가 장비를 쓰지만,
• 교육 현장이나 스타트업에서는 오픈소스나 오픈소스 기반 무료 에디션이 최선
생산성 및 UI/UX
(Productivity)
• 테이블/컬럼 드래그 앤 드롭의 직관성
• 도메인(Domain) 정의 기능 (예: '주소' 타입을 정의해 재사용)
• 사전 정의된 단어집/용어 사전(Dictionary) 연동 기능
• 데이터 표준화(명명 규칙)를 강제할 수 있는 용어 사전 기능이 있으면 대형 프로젝트 설계 시 품질이 비약적으로 상승함
인프라 및 설치 환경
(Environment)
• OS 호환성 (Windows, Mac, Linux Mint/Ubuntu 등)
• 웹 기반 가동 vs 무거운 데스크톱 가프리케이션 설치
• 자원 소모량 (대규모 테이블 배치 시 렉 발생 여부)
• 리눅스 환경에서 AI 모델링과 DB를 동시에 다루는 개발자에게는 크로스 플랫폼(Java 기반 또는 웹 기반) 지원이 필수적


  • “도구 선택 시뮬레이션” 가이드 (3가지 가상 시나리오)

    • 시나리오 A (스타트업 / 빠른 MVP 개발 / 웹 기반):
      • 요구 조건: 설치 없고, 돈 안 들고, 팀원 3명이 동시에 브라우저에서 보면서 설계하고 싶다.
      • 추천 매핑: DrawDB (웹 기반 오픈소스, DDL 즉시 추출)

    • 시나리오 B (전통적인 공공/금융 대기업 프로젝트 / 데이터 표준화 필수):
      • 요구 조건: 테이블이 500개가 넘고, 한글 논리명과 영문 물리명을 엄격히 분리해야 하며, 용어 사전이 필요하다.
      • 추천 매핑: ERwin, DA# (상용) 또는 오픈소스 중 강력한 아키텍처를 가진 pgModeler

    • 시나리오 C (풀스택 개발자 과정 / SQL 단기 속성):
      • 요구 조건:
        • SQL 쿼리도 날려야 하고, 가끔 테이블 관계도 직접 그려서 DB에 바로 반영하고 싶다.
        • 프로그램을 여러 개 깔기 싫다.
      • 추천 매핑: DBeaver Community Edition (Custom ERD 기능 활성화)

3. MySQL Workbench

3.1 MySQL Workbench 개요

  • 오라클(Oracle)에서 공식 제공하는 MySQL 전용 무료 데이터베이스 디자인 및 관리 툴
  • 오랜 기간 검증된 정통 모델링 도구의 UI 지원

  • MySQL Workbench의 특징
    • 전통적인 3단계 모델링 최적화
      • 개념적/논리적 모델을 그리고, 이를 물리적 DB로 포워드 엔지니어링(Forward Engineering)하는 전통적인 데이터 모델링 워크플로우를 가장 정석대로 지원함
    • MySQL 및 MariaDB 100% 호환
      • 국내 수많은 국비지원 교육이나 부트캠프에서 표준처럼 사용하는 도구
      • 레퍼런스와 트러블슈팅 자료가 인터넷에 가장 풍부함
    • 설계 및 연동 방식
      • 화면에 네모(테이블)를 그리고 속성을 정의한 뒤, 마우스로 선을 연결해 PK/FK 관계를 맺는 비주얼 설계(EER Model) 기능이 핵심
      • 설계가 끝나면 [Database] -> [Forward Engineer] 메뉴를 통해, 마우스 클릭 몇 번만으로 실제 라이브 DB 서버에 실시간으로 테이블과 제약조건을 생성(Apply)해 줌

3.2 MySQL Workbench 설치

  • Windows 10/11 기준 MySQL Workbench 설치 과정

    • 1단계: 사전 필수 패키지 확인 (매우 중요)
      • Workbench를 설치하기 전에 Windows에 Visual C++ Redistributable(재배포 가능 패키지)이 설치되어 있어야 함
        • 설치되어 있지 않으면 Workbench 실행 시 MSVCP140.dll이 없어 프로그램을 시작할 수 없다는 에러가 발생
      • 공식 마이크로소프트 서포트 페이지에서 VC_redist.x64.exe를 다운로드하여 먼저 설치
    • 2단계: 설치 파일 다운로드
      1. MySQL 공식 다운로드 페이지(dev.mysql.com/downloads/workbench) 접속
      2. OS는 Microsoft Windows 선택
      3. Windows (x86, 64-bit), MSI Installer (약 30~40MB) 파일 [Download] 버튼 클릭
      4. 로그인 창이 뜨면 🡲 하단의 “No thanks, just start my download.”를 눌러 바로 다운로드
    • 3단계: 마법사(Wizard) 실행 및 설치
      1. 다운로드된 .msi 파일을 더블 클릭하여 실행
      2. Destination Folder: 설치 경로를 지정, 기본값(C:\Program Files\MySQL\MySQL Workbench 8.0\) 상태로 [Next]
      3. Setup Type: Complete(전체 설치)를 선택하고 [Next]
      4. Ready to Install: 내용 확인 후 [Install] 버튼을 클릭하면 관리자 권한 요청 후 설치가 진행됨
      5. Finish: 설치가 완료되면 Launch MySQL Workbench 체크박스를 켜둔 채로 [Finish] 🡲 프로그램 정상 구동 확인
  • Linux 설치

    • AI 서버 운영이나 개발자 실습을 위해 Ubuntu 24.04 환경 등에서 설치하는 과정

    • 1단계: 시스템 패키지 업데이트
      • 설치 전 최신 의존성 라이브러리를 반영

          sudo apt update && sudo apt upgrade -y
        
    • 2단계: 웹에서 패키지 다운로드
      • 일반 실행 패키지(25.3M)의 링크를 주소창에서 복사

        • 리눅스(Ubuntu 계열) 다운로드 선택지 2종의 차이점
          • “디버깅(오류 추적) 정보의 포함 여부”와 그로 인한 “용량 차이”

          • mysql-workbench-community_8.0.47-1ubuntu24.04_amd64.deb (25.3M)
            • 정의: 일반 사용자와 개발자를 위한 실제 실행 바이너리 패키지(Production 빌드)
            • 특징: 프로그램 실행에 필요한 최적화된 코드만 들어있어 용량이 작음
            • 용도: 일반적인 ERD 설계, SQL 실습, DB 관리 등 모든 실무 및 강의 환경에서는 이 파일만 설치하면 됨
          • mysql-workbench-community-dbgsym_8.0.47-1ubuntu24.04_amd64.deb (93.2M)
            • 정의:
              • 디버그 심볼(Debug Symbols)이 포함된 디버깅 전용 패키지
                • 파일명의 dbgsym이 Debug Symbol을 의미함
            • 특징:
              • Workbench가 실행되다가 갑자기 크래시(Crashes)가 나거나 메모리 누수가 발생했을 때, 시스템의 어떤 소스 코드 라인에서 에러가 났는지 추적할 수 있는 메타데이터가 들어있음
              • 핵심 코드는 없고 오직 ‘심볼’만 들어있기 때문에 단독 실행은 불가능
              • ①번 패키지(mysql-workbench-community_8.0.47-1ubuntu24.04_amd64.deb)가 먼저 설치되어 있어야 함
            • 용도:
              • MySQL Workbench 자체의 버그를 수정하려는 오픈소스 기여자(Contributor)
              • 리눅스 커널 수준에서 프로그램 오류를 딥러닝하게 분석해야 하는 시스템 엔지니어가 주로 사용
      • 또는 터미널에서 wget 명령어로 직접 다운로드 (2026년 기준 8.0.47 버전 예시)

          wget https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community_8.0.47-1ubuntu24.04_amd64.deb
        
    • 3단계: dpkg를 통한 설치 및 의존성 문제 해결
      1. 다운로드한 패키지 설치:

         sudo dpkg -i mysql-workbench-community_8.0.47-1ubuntu24.04_amd64.deb
        
      2. 만약 여기서 의존성 에러가 발생한다면

        • 리눅스에서 .deb 파일을 직접 설치할 때 간혹 필요한 주변 라이브러리(의존성)가 누락되어 에러가 날 수 있음
        • 아래 명령어를 입력하여 깨진 의존성을 자동으로 교정하고 설치를 마무리

            sudo apt --fix-broken install -y
          
    • 4단계: 프로그램 실행 및 검증
      • 설치가 완료되면 쉘 커맨드라인에 아래 명령어를 입력
      • 또는 우분투 대시(Application 돋보기)에서 “MySQL Workbench”를 검색하여 실행

          mysql-workbench &
        
        • 명령어 뒤의 &의 의미는 해당 프로그램을 백그라운드로 실행하라는 의미임
        • MySQL Workbench는 엄격한 OS 정보(배포판 이름 등) 검증을 수행하므로 Ubuntu, Debian, RedHat 등 대표적인 배포판 명 외에는 모두 오류처리 함
        • 실제 내용에는 아무 문제 없는 경우가 대부분임
      • 오류 메시지 발생 시 그냥 “OK” 버튼을 누르면 지나감

  • 리눅스(특히 Ubuntu) 환경에서 MySQL Workbench를 실행했을 때, 간혹 화면 서체(Font)가 깨지거나 단축키가 꼬이는 현상이 발생할 수 있음.
  • 이 경우, 시스템 기본 폰트 패키지(fonts-noto-cjk)가 잘 설치되어 있는지 체크할 것

4. ERD 작성하기

4.1 기본적인 ERD 작성 예제

  • 백지 상태에서 엔터티를 추가하고, 관계를 맺은 뒤, 실제 데이터베이스(DB)를 향한 포워드 엔지니어링(Forward Engineering)
    • [고객(Customer)]과 [주문(Order)]이라는 간단하고 명확한 $1:N$ 비즈니스 관계 설계하기
  • 실습 시나리오
    • 우리 쇼핑몰은 고객(Customer) 정보를 관리합니다.
    • 한 명의 고객은 여러 번 주문(Order)을 넣을 수 있습니다.
    • 단, 가입하지 않은 고객은 주문할 수 없습니다.
    • 이 규칙을 만족하는 ERD를 설계하고 실제 DB에 테이블을 생성합니다.
    • 1단계: 새로운 모델링 공간(EER Canvas) 만들기
      1. MySQL Workbench 실행
      2. 상단 메뉴에서 [File] 🡲 [New Model]

      3. 새로운 모델 창이 뜨면, 중간에 있는 [Add Diagram] 아이콘(노란색 플러스가 그려진 다이어그램 모양)을 더블 클릭
      4. 모눈종이 형태의 깨끗한 설계용 캔버스(EER Diagram) 화면이 열림

    • 2단계: ‘고객(Customer)’ 엔터티(테이블) 설계
      1. 왼쪽 세로 툴바에서 [Place a New Table] 아이콘(사각형 모양, 단축키 T) 클릭 🡲 캔버스 빈 곳을 아무 데나 클릭 🡲 table1이라는 임시 테이블 생성

      2. 생성된 table1 더블 클릭 🡲 화면 하단에 상세 속성을 편집할 수 있는 워크스페이스가 열림

      3. Table Namecustomer로 변경

      4. 아래 Columns 탭의 빈 칸을 더블 클릭하여 다음과 같이 속성을 차례대로 추가

      Column NameData TypePKNNAI비고
      idINT고유 일련번호 (자동 증가)
      nameVARCHAR(45)  고객 이름 (필수 입력)
      emailVARCHAR(100)   고객 이메일 (선택 입력)
      • 체크박스 용어 정리:
        • PK (Primary Key): 주식별자(기본키)
        • NN (Not Null): 필수 입력 항목 (빈 값 허용 안 함)
        • AI (Auto Increment): 시스템이 순번을 자동으로 1씩 증가시킴 (인공키 전략)


    • 3단계: ‘주문(Order)’ 엔터티(테이블) 설계
      1. 왼쪽 툴바에서 사각형 아이콘(T)을 누르기
      2. 캔버스 다른 빈 곳을 클릭하여 table2를 만듦
      3. table2더블 클릭하여 하단 편집창을 열기
      4. Table Nameorder로 변경(SQL 예약어와 겹칠 수 있으므로 실무에서는 보통 orders로 많이 사용)
      5. Columns 탭에 아래 속성을 추가
      Column NameData TypePKNNAI비고
      idINT주문 고유 번호
      order_dateDATETIME(45)  주문이 일어난 날짜와 시각
      amountINT  총 주문 금액


    • 4단계: 까마귀 발 표기법으로 \(1:N\) 관계 연결하기 (핵심)
      • 시나리오에서
        • 한 명의 고객은 여러 번 주문할 수 있고,
        • 가입 안 한 고객은 주문 불가
      • 즉, customer가 \(1\), order가 \(N\) 이 되며 필수적 비식별 관계가 됨
      1. 왼쪽 세로 툴바 하단에서 점선 모양의 [Place a Relationship Using Non-Identifying Relation (1:N)] 아이콘 클릭
        • 마우스를 올리면 1:N Non-Identifying Relationship이라고 뜸
      2. 반드시 자식 테이블(\(N\) 쪽)을 먼저 클릭하고, 부모 테이블(\(1\) 쪽)을 나중에 클릭
        • 첫 번째 클릭: order 테이블 클릭
        • 두 번째 클릭: customer 테이블 클릭
      3. 클릭과 동시에 두 테이블 사이에 점선 관계선이 연결됨
        • order 테이블 하단에 customer_id라는 외래키(FK) 속성이 자동으로 생성
    • 5단계: 실제 로컬/원격 DB로 물리적 반영하기 (Forward Engineering)
      • 그린 도면을 바탕으로 실제 MySQL 서버에 테이블을 집어넣을 차례
      1. 상단 메뉴에서 [Database] 🡲 [Forward Engineer…] 클릭

      2. Connection Options: 접속할 MySQL 서버 정보(Stored Connection)를 선택하고 [Next]

      3. Options: 기본 설정 그대로 두고 [Next]
      4. Select Objects: Export MySQL Table Objects에 체크된 것을 확인하고 [Next]

      5. Review Script:
        • Workbench가 자동으로 만든 완벽한 CREATE TABLE DDL 스크립트가 화면에 출력됨
        • 구조를 눈으로 확인한 뒤 [Next]
      6. DB 비밀번호를 요구하면 입력
      7. Execution Progress: 모든 스크립트가 성공적으로 실행되었다는 메시지(Forward Engineering Finished Successfully)가 뜨면 [Close]


  • 최종 확인 및 검증
    1. Workbench 첫 메인 화면으로 돌아와 실제 가동 중인 MySQL Connection을 더블 클릭
    2. 왼쪽 Navigator 탭 🡲 Schemata에서 방금 밀어 넣은 데이터베이스를 확장
    3. customer 테이블과 order 테이블이 완벽하게 생성되어 있고, order 테이블의 Foreign Keys 항목에 fk_order_customer가 정밀하게 박혀 있는 것을 확인

4.2 까마귀 발 표기법

  • 공식 명칭: IE(Information Engineering) 표기법
    • 선의 끝 모양이 마치 까마귀 발가락을 닮았다고 하여 ‘까마귀 발 표기법 (Crow’s Foot Notation)’이라고 자주 부름
  • 데이터 모델링에서 엔터티(Entity) 간의 관계(Relationship)를 시각적으로 표현할 때 전 세계적으로 가장 널리 쓰이는 표준 표기법


  • 까마귀 발 표기법의 핵심 구조: 세 부위의 법칙
    • 관계선(Relationship Line)의 양 끝단에 세 가지 기호(선, 동그라미, 세 갈래 발)를 조합하여 비즈니스 규칙을 표현
    • 선의 끝부분을 읽을 때는 안쪽에서부터 바깥쪽으로 순서대로 해석

    • 수량 / 사상수 (Cardinality)
      • 관계선의 가장 바깥쪽 끝에 위치
      • 한 엔터티가 다른 엔터티의 데이터 ‘몇 개’와 연결될 수 있는지를 나타냄

      • 하나 ($1$):
        • 직선 하나(|)로 표시
        • 정확히 1개의 데이터와만 매핑된다는 뜻
      • 여러 개 ($N$):
        • 세 갈래로 갈라지는 까마귀 발 모양()으로 표시
        • 0개, 1개 또는 그 이상의 다수 데이터와 매핑될 수 있다는 뜻
    • 필수성 / 선택성 (Optionality)
      • 관계선의 수량 기호 바로 안쪽에 위치
      • 상대방 데이터가 ‘반드시 존재해야 하는지(필수)’ 아니면 ‘없어도 되는지(선택)’를 나타냄

      • 필수 (Mandatory):
        • 직선 하나(|)로 표시
        • 상대방 데이터가 최소 1개는 무조건 존재해야 함
      • 선택 (Optional):
        • 동그라미(O)로 표시
        • 상대방 데이터가 0개여도 상관없다는 뜻


  • 4가지 핵심 기호 조합과 비즈니스 해석
    • 실무에서 마주치는 모든 관계선은 아래 4가지 조합 안에서 결정됨
    • “최소 몇 개(안쪽 기호)에서 최대 몇 개(바깥쪽 기호)까지 매핑되는가?”의 관점으로 이해할 것


  • 식별 관계(Identifying) vs 비식별 관계(Non-Identifying)
    • 까마귀 발 표기법에서는 두 엔터티가 부모-자식 간에 얼마나 강하게 결합되어 있는지를 선의 종류(실선/점선)로 구분함

    • 식별 관계 (Solid Line: 실선)
      • 개념:
        • 부모 엔터티의 주식별자(PK)가 자식 엔터티의 주식별자(PK)의 일부분으로 포함되는 관계
      • 의미:
        • 자식은 부모 없이는 독자적으로 존재할 수 없음 (강한 종속 관계)
      • 예시: 주문 테이블(PK: 주문번호)과 주문상세 테이블(PK: 주문번호 + 순번)
        • 부모인 ‘주문’ 데이터가 삭제되면 ‘주문상세’는 존재 의리가 없으므로 함께 사라져야 함
    • 비식별 관계 (Dashed Line: 점선)
      • 개념:
        • 부모 엔터티의 주식별자(PK)가 자식 엔터티의 주식별자가 아닌 일반 속성(외래키: FK)으로만 포함되는 관계
      • 의미:
        • 부모가 없어도 자식은 독립적으로 존재할 수 있거나, 단순히 참조만 하는 관계 (약한 종속 관계)
      • *예시: 부서 테이블(PK: 부서코드)과 사원 테이블(PK: 사원번호 / FK: 부서코드)
        • 부서에 소속되지 않은 신입사원(FK가 Null)이 존재할 수 있음
        • 부서가 사라져도 사원 데이터 자체가 사라지지는 않음


  • 어느 쪽 엔터티를 기준으로 읽어야 하는가?
    • 화살표 동사 리딩법
      • 주가 되는 엔터티에서 출발하여 선을 따라 반대편 끝에 박힌 까마귀 발 기호를 읽음
      • 고객에서 주문 쪽을 바라보면 O⤙ (Optional Many)가 보일 때 🡲 고객은 주문을 0번 또는 여러 번 할 수 있음
      • 주문에서 고객 쪽을 바라보면 || (Mandatory One)가 보일 때 🡲 모든 주문은 반드시 한 명의 고유한 고객에 의해 이루어져야 함

© 2020. AiDALab Co. All rights reserved.

Powered by Hydejack v9.2.1