TIL. (Today I Learned)

Day15. SQLD 데이터 모델링 요소 / TIL. 20240506

체대이터 2024. 5. 6. 13:18

금요일 공부.. 레츠고..

하루 버티면 주말..+휴일

 

To do list.

-파이썬 과제

-SQLD 자격증 강의 3일차

-파이썬 복습


SQLD 자격증 강의 3일차

 

데이터 모델링의 요소 4가지 ‘엔터티,속성,관계,식별자’

 

엔티티(Entity)

데이터모델의 핵심 구성요소

데이터베이스에서 레코드가 개체에 해당 / 독립체 / thing

 

각각의 인스턴스가 모이면 엔티티가 된다

 

*엔티티 6가지 특징

-업무에서 필요로하는 정보

-식별가능여부

-인스턴스의 집합

-업무 프로세스에 의해 활용되어야함

-속성(attribute)을 포함해야함

-관계의 존재

 

엔티티 - 유형에 따른 분류

*유형 엔티티 - 상품,강사,병장

*개념 엔티티 - 학과, 코스닥 종목

*사건 엔티티 - 이벤트 용도, 주문

 

발생시점에 따른 분류

*기본/키 엔티티

*중심 엔티티

*행위 엔티티

 

엔티티의 이름짓기 방식

엔티티는 고유한 이름을 갖는데 이때 특정한 규칙을 기반으로 네이밍함

-가능하면 업무에서 사용하는 용어 사용

-가능하면 축약어 사용x

-단수명사를 사용하고 띄어쓰기x

-모든 엔티티에 유일한 이름 부여(중복X)

-엔티티 생성 의미대로 이름부여

 

엔티티의 개념정리

사람, 장소, 물건, 사건, 개념 등의 명사에 해당

업무상 관리가 필요한 관심사에 해당

저장이 되기 위한 어떤 것 (Thing)

 


 

속성(attribute)

속성은 인스턴스가 가진 어떠한 성질(성격)

+업무에서 필요로 하는 인스턴스로

+더 이상 분리되지않는

+최소의 데이터단위

 

엔티티,인스턴스,속성,속성값의 관계

한개의 엔티티는 두 개 이상의 인스턴스 집합이어야한다

한개의 엔티티는 두 개 이상의 속성으로 구성된다

한개의 속성은 한 개의 속성값을 갖는다

 

속성의 특징

-속성은 업무에서 필요로 한다

-속성은 의미상 더 이상 분리되지 않는 그 자체로 독립성을 유지해야함(가장 작은 단위 의미)

-엔티티를 설명하고 인스턴스의 구성요소가 된다

-정규화 이론에 기반을 두고 정해진 주식별자에 함수적 종속성을 가져야 한다

 "함수적 종속"

-하나의 속성은 한 개의 값만 갖는다

 

속성의 특징에 따른 분류

-기본 속성 / 업무로 추출된 모든 속성, 가장 많음

-설계 속성 / 업무의 규칙화 등을 위해 새로 만들거나 변형하여 정의하는 속성

-파생 속성 / 다른 속성에 영향을 받아 발생하는 속성

 

엔티티 구성방식에 따른 분류

PK 속성(primary key) / 엔티티를 식별할 수 있는 속성

FK 속성(foreigh key) / 다른 엔티티와의 관계에 포함된 속성

일반 속성 / pk fk에 포함되지 않은 다른 속성

 

도메인

각 속성이 가질 수 있는 값의 범위(범주)

엔티티 내에서 속성에 대한 데이터 타입과 크기, 제약 사항 등을 지정

 

속성의 명명

-업무에 사용하는 용어

-축약어x

-명사형 사용

-명확한 의미 전달

-유일하게 작성 but 속성은 중복은 가능하되 유일하면 좋음

 


 

관계(relationship)

상호 연관성이 있는 상태 / 엔티티와 인스턴스 사이의 논리적인 연관성으로

존재의 형태 행위로서 서로에게 연관성이 부여된 상태

 

관계의 페어링

관계는 엔티티안에 인스턴스가 개별적으로 연결되어 있는 구조

 

관계의 종류

-존재에 의한 관계 : 소속/포함  (부서 - 사원)

-행위에 의한 관계 : 행동/행위  (고객 - 주문)

 

UML(Unified Modeling Language) - 통합 모델링 언어

통합 모델링 언어는 소프트웨어 공학에서 사용되는 표준화된 범용 모델링 언어

추상화된 시스템을 특정한 모델로 표현해 주는 언어를 의미

여러 종류의 UML 다이어그램을 통해 시각화된 형태의 모델링 된 결과

 

ERD에서는 존재적 관계와 행위에 의한 관계를 구분하지 않고 표현했다면

클래스 다이어그램에서는 이를 구분하여 연관 및 의존 관계로 표현합니다.

 

관계차수 (Degree / Cardinality)

관계 표현 방식은 1:1, 1:M, M:M(M:N)

 

1:1 (ONE TO ONE) 관계 표시

-관계에 참여하는 각 엔터티는 관계를 맺는 다른 엔터티에 대해 하나의 관계로 연결

- A Entity에 존재하는 데이터 1개와 관계되는 B Entity에 존재하는 데이터의 개수도 1개인 Entity 간의 관계를 1:1 관계

- 웹 서비스에서 유저와 프로필 간의 관계 / 하나의 유저는 하나의 프로필

 

1:M (ONE TO MANY) 관계 표시

-관계에 참여하는 각 엔터티는 관계를 맺는 다른 엔터티에 하나 혹은 그 이상의 관계

  (다만, 이 방향은 한쪽 방향에만 해당되며 반대 방향은 오직 하나의 관계만)

- 예를 들면, 웹 서비스에서 댓글과 게시글의 관계 / 하나의 게시글에는 여러 개의 댓글

 

M:N(MANY TO MANY) 관계 표시

-1:M 관계가 양방향에서 모두 발생하는 경우

- 예를 들면, 웹 서비스에서 좋아요 기능을 생각해볼 수 있습니다. 좋아요 기능은 게시글과 유저간의 관계로 구현됩니다. 하나의 게시글에는 여러 명의 유저가 '좋아요'를 누를 수 있습니다. 이 관계는 1:N 관계로 볼 수 있습니다. 이번에는 반대로 생각해 볼까요? 하나의 유저 입장에서는 본인이 누른 여러 개의 좋아요 게시글이 존재합니다. 이 관계 또한 1:N이라고 할 수 있습니다. 결국, 서로가 서로에게 1:N의 관계를 갖는 형태를 M:N 관계라고 합니다.

 


관계선택사양 (Optionality)

데이터 모델 관계에서는 '선택참여관계'기 핵심

참여하는 엔터티가 항상 참여하는지 아니면 참여할 수도 있는지를 나타내는 방법

-필수조건 : 필수 사항은 실선으로 표시 IE : 0표시없음   Barker : 선 절반이 실선

-선택조건 : 선택 사항은 점선으로 표시 IE : 0표시있음   Barker : 선 절반이 점선

 

관계 정의 시 체크 사항

 

두 엔터티 사이에는 관심 있는 연관 규칙이 존재하는지 여부

두 개의 엔터티 사이에 정보의 조합이 발생하는지 여부

업무 기술서, 장표에 관계 연결에 대한 규칙이 있는지 여부

업무 기술서, 장표에 관계 연결을 가능하게 하는 동사(Verb)가 있는지 여부

 


식별자 (Identifier)

엔터티의 인스턴스를 구분 가능하게 만들어주는 대표 격인 속성, 식별자

: 각각의 데이터를 구분해주는 속성

 

주식별자의 특징(PK)

-유일성 : 주식별자에 의해 엔티티 내에서 모든 인스턴스들을 유일하게 구분

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

-불변성 : 한 번 특정 엔티티에 지정되면 그 식별자의 값은 변하지 않아야 한다

-존재성 : 주식별자가 지정되면 반드시 데이터 값이 존재해야 한다 / NULL값을 허용하지 않음

 

식별자 분류

식별자의 종류는 자신의 엔터티 내에서 대표성을 갖는지에 따라 주식별자(Primary Identifier)보조식별자(Alternate Identifier)로 구분

엔터티 내에서 스스로 생성되었는지에 따라 내부 식별자와 외부 식별자로 구분할 수도 있습니다. 만약 속성의 개수를 기준으로 구분을 한다면 단일 속성으로 식별되는지의 여부에 따라서 단일 식별자(Single identifier)와 복합 식별자(Composite Identifier)로 구분

 

 

 


 

Check point.

 

주식별자 도출 기준

1. 해당 업무에서 자주 이용되는 속성으로 설정합니다

2. 명칭, 내역 등과 같이 특정한 이름으로 기술되는 것은 가능하면 주식별자로 사용X (고유한 코드 등으로 사용)

3. 복합으로 주식별자를 구성하는 경우 너무 많은 속성이 포함되지 않도록 해야함

 


회고

 

한 주를 마치며.. 데이터 역량을 길러보고자 입강했지만 쉽지는 않다. SQL, 파이썬, SQLD 자격증 시험 등 생소했던 분야가 머릿속에 들어오니 내 뇌가 에러가 좀 뜨는 것 같다 ^^ 특히 이번 주차의 파이썬 과제는 말 그대로 멘붕이었다. 그래서 주말 + 휴일 간 파이썬 과제를 다시 리뷰해보는 시간을 가져보도록 해보자