[내일배움캠프 데이터분석 사전캠프]+SQLD 데이터 모델링 요소, 파이썬

유기홍·2025년 5월 7일
post-thumbnail

📘 수업 목표

  • 데이터 모델의 4대 구성 요소: 엔터티, 속성, 관계, 식별자의 개념과 특징을 이해

1️⃣ 엔터티 (Entity)

  • 데이터 모델의 핵심 단위, 업무에서 의미 있는 정보를 분류한 그룹

  • 코드(행) 하나하나가 인스턴스, 이 인스턴스가 모여 엔터티를 구성

  • 엔터티는 속성의 집합이며, 다른 엔터티와 관계를 맺음

  • 최소 2개 이상의 인스턴스를 포함하고, 업무에서 활용 가능해야 함

  • 엔터티 유형:

    유형: 상품, 사람 등 물리적 대상

    개념: 학과, 종목 등 비물리적

    사건: 주문, 응모 등 발생 이벤트

  • 발생 시점 분류: 기본/중심/행위 엔터티

엔터티 이름짓기

  • 업무 용어 기반 / 단수형 명사 / 축약어 지양 / 고유한 이름 사용

2️⃣ 속성 (Attribute)

  • 엔터티의 구성 요소이자 인스턴스의 특징

  • 속성은 최소 단위의 정보로, 하나의 속성은 하나의 값만 가짐

  • 속성 종류:

    기본 속성: 업무에서 직접 추출

    설계 속성: 모델링 목적에 맞춰 정의

    파생 속성: 계산 결과 (가능한 지양)

  • 역할에 따른 분류:

    PK(Primary Key): 엔터티 식별용

    FK(Foreign Key): 관계 연결용

    일반 속성: 기타 정보

속성 명명 규칙

  • 업무 용어 기반 / 명사형 / 축약 지양 / 유일한 이름 부여

3️⃣ 관계 (Relationship)

  • 엔터티 간 논리적 연관성

  • 관계는 “존재 기반(소속)” 또는 “행위 기반(주문)”으로 나뉨

  • 관계차수(Cardinality)

    1:1 / 1:N / M:N (→ 중간 테이블로 분해 필요)

  • 관계 선택 사양

    필수(실선, |) / 선택(점선, O)

관계 읽는 법

  • "각 게시글은 하나 이상의 댓글을 가질 수 있다"
    → 기준 엔터티(게시글), 대상 엔터티(댓글), 관계 명칭/선택조건 명확히 표현

4️⃣ 식별자 (Identifier)

  • 엔터티 내 인스턴스를 고유하게 구분하는 속성

  • 주식별자(PK): 유일성, 최소성, 불변성, 존재성 만족해야 함

  • 보조식별자: 유일하지만 대표성 없음

  • 내부/외부 식별자: 자생 or 다른 엔터티 참조

도출 기준

  • 자주 사용하는 속성 기반

  • 명칭/내용보다는 고유한 코드 중심

  • 과도한 복합키는 지양


🧩 식별자 관계 vs 비식별자 관계

구분식별자 관계비식별자 관계
목적강한 종속약한 종속
자식 식별자부모 PK 포함독립적 구성 가능
표현실선 (IE)점선 (IE)
특징부모 없이는 생성 불가선택적으로 관계 가능

📌 UML 클래스 다이어그램과 비교

  • ERD는 관계 중심,

  • UML 클래스 다이어그램은 구조 및 의존성 중심
    → 연관(Association) vs 의존(Dependency) 관계 구분


✨ 느낀 점

  • 단순히 테이블을 나누는 작업이 아니라,
    업무 흐름을 데이터로 추상화하고 명확하게 표현하는 사고 과정이 데이터 모델링의 본질임을 배움.

  • 엔터티/속성/관계/식별자의 정확한 구분과 표기법 이해가 중요함.


📘 Python & SQL 학습 정리

🐍 Python 학습 내용

✅ 문자열 변환 & f-string

scores = [
    {'name':'영수','score':70},
    {'name':'영희','score':65},
]

for s in scores:
    print(f"{s['name']}의 점수는 {s['score']}점입니다")
    

✅ 클래스 정의

class Monster():
    hp = 100
    alive = True
    def damage(self, attack):
        self.hp -= attack
        if self.hp < 0:
            self.alive = False
    def status_check(self):
        print('생존' if self.alive else '사망')

💻 SQL 학습 내용

✅ LEFT JOIN vs INNER JOIN 비교


-- 주문 없는 제품 찾기 (정상)
SELECT p.id, p.name 
FROM products p 
LEFT JOIN orders o ON p.id = o.product_id 
WHERE o.id IS NULL;

-- 잘못된 예시 (INNER JOIN + NULL 조건)
SELECT p.id, p.name 
FROM products p 
INNER JOIN orders o ON p.id = o.product_id 
WHERE o.id IS NULL; -- 결과 없음

✅ DATE_SUB + CURDATE()

SELECT COUNT(*) 
FROM patients 
WHERE birth_date <= DATE_SUB(CURDATE(), INTERVAL 40 YEAR);

👉 현재 날짜로부터 40년 이상 지난 생일을 가진 환자 수 조회


🧠 질문 정리

Q1. Python은 가독성이 높고 문법이 쉽다”라는 문장에 증거가 될 사례를 작성해주세요.

for num in [1, 2, 3, 4]:
    if num % 2 == 0:
        print(num)

👉 누구나 쉽게 읽고 이해할 수 있는 문법
👉 중괄호 대신 들여쓰기, 자연어처럼 읽히는 구조

Q2. 가독성이 좋은 언어를 사용했을때 어떤 이점이 있나요?

  • 협업 시 빠른 이해 가능 → 유지보수 효율적

  • 디버깅 쉬움

  • 코드를 문서처럼 사용 가능


Q3. 데이터 분석가가 Python을 알아야하는 이유는 무엇인가요?

  • 데이터 수집부터 분석, 시각화, 모델링까지 한 언어로 가능

  • 풍부한 라이브러리(pandas, matplotlib 등)

  • 진입장벽이 낮고 자료도 많음

Q4. Python 사용 시 이점?

  • 반복 작업 자동화

  • 시각화 및 모델링 연동 용이

  • 기술 + 분석 + 커뮤니케이션 역량 향상


✨ 느낀 점

  • SQL과 Python이 데이터 분석에서 어떻게 연결되는지 알 수 있었음.

  • 이제는 단순 문법을 넘어서 ‘왜 이걸 쓰는가?’를 이해하며 학습하려고 노력이 필요함.


🎯 내일의 목표

  • Python 조건문과 반복문 추가 학습

  • SQL GROUP BY + 집계함수 복습

0개의 댓글