멀티캠퍼스 백엔드 과정 28일차[7월 11일] -ERD 모델링

GoldenDusk·2023년 7월 13일
0

DB모델링 사이트

ERDCloud

데이터 모델링

데이터 모델링의 개념

데이터 모델링

  • 사용자 요구조건 분석해 데이터를 개념적, 논리적, 물리적 설계로 구조화하는 것
  • 정리 되지 않은 데이터들을 정형화된 데이터 형태로 만드는 것
  • 고객의 요청사항을 DB형태(디지털) 바꾸는 작업
  • 분석된 모델로 실제 데이터베이스를 생성해 개발하고 관리할 수 있도록 하는 것

데이터 베이스 분리 하는 이유

  • 속성이 늘어나면서, 하나의 테이블에 중복 데이터가 쌓이게 됩니다.
    이 중복되는 데이터들을 효율적으로 관리하기 위해 다른 하나의 테이블로 분리

데이터 모델링의 요소

  1. 개체(Entity)
  • 업무에 필요한 정보를 저장하고 관리하기 위한 데이터 집합(Table = Relation)
  • 사람, 사물, 장소, 개념, 사건과 같이 유무형의 정보를 가지고 있는 독립적인 실체.
  • 데이터베이스에서 주로 다루는 개체 - (낱개로 구성된 것, 낱개가 각각 데이터 값을 가지는 것,
    데이터 값이 변하는 것)
  • 비슷한 속성의 개체 타입(entity type)을 구성하며, 개체 집합(entity set)으로 묶임.
  • 강한 개체 타입
    • 사각형
    • 다른 개체의 도움 없이 독자적으로 존재할 수 있는 개체
  • 약한 개체 타입
    • 사각형
    • 독자적으로는 존재할 수 없고 반드시 상위 개체 타입을 가짐.
  1. 속성(Attribute)
  • 엔터티에서 관리하고자 하는 더 이상 분리되지 않는 최소 단위(column = attribute = field)
  1. 관계(Relationship)
  • 두 개 이상의 엔터티들을 의미 있게 연결
  • 개체 사이의 연관성을 나타내는 개념
  • 관계 타입(relationship type)
  • 개체 타입과 개체 타입 간의 연결 가능한 관계를 정의한 것
  • 관계 집합(relationship set)은 관계로 연결된 집합을 의미함

ERD

  • 테이블 간의 관계를 설명해주는 다이어그램

데이터베이스의 생성 주기

개념적 설계

  • 일반적인 정보 데이터를 기준으로 추상화하여 데이터를 구조화하여 표현 하는 것

논리적 설계

  • 개념적 설계를 바탕으로 해서 DBMS가 만들어질 수 있는 데이터 모델로 표현한 것
  • 논리적 모델링 과정
  1. 개념적 모델링에서 추출하지 않았던 상세 속성들을 모두 추출함.
  2. 정규화 수행
  3. 데이터 표준화 수행

물리적 설계

  • 데이터를 저장 될 수 있도록 논리적 데이터 모델을 물리적 설계를 통해 데이터 구조로 표현한 것

회원정보(users)

id id int not null auto increment

email email varcher2(40) null 로컬용 계정, sns에서 로그인할 경우, 이 필드는 비우고 snsid 조회
비밀번호 password varcher2(40) not null

snsid snsid varchar2(50) null sns으로 로그인 한 경우 sns 유저 구분 아이디

프로필썸네일 profileImage varchar2(300) null 이미지가 저장되는 상대경로 지정 프로파일 이미지

게시판(board)
id id int not null autoIncrement

본문글 content varchar2(300) not null
주제 subject varchar2(50) not null

  • 관계
    • 한명의 회원
    • 여러 개의 게시글 작성 가능
    • 하나의 게시글도 작성하지 않을 수 있다.
  • 게시판
    • 한 명의 회원만이 게시글을 쓸 수 있다.
    • 반드시 회원만이 게시글 작성 가능

회원은 0, 1 또는 그 이상의 게시글을 작성할 수 있다.

- 키는 밑줄이 그어져 있음 - 직원 1명이 다수의 프로젝트 작업 - 다수의 프로젝트는 직원 1명이 작업 - 직원은 직원 번호, 이름, 직위, 전화번호의 속성을 가짐 - 프로젝트는 과제 번호와 예산 속성을 가짐 - 직원과 프로젝트는 작업 관계로 연결되어 있음

차수에 따른 관계 타입의 유형

차수에 따른 유형

  • 관계 집합에 참가하는 개체 타입의 수를 관계 타입의 차수(degree)
  • 차수 = 속성
  • 속성을 이용해서 관계를 맺음
    • 관계 테이블에는 연결된 테이블의 속성들이 외래 키로 연결됨
  • 관계 대응 수(cardinality) : 튜플의 수, 두 개체 타입의 관계에 실제로 참여하는 개별 개체

관계 대응 수의 최솟값과 최댓값

그림 6-23) 학생과 강좌의 관계
min은 관계에 참여하는 개체의 수가 적어도 min값 이상은 되어야 한다.
max는 **관계에 참여하는 개체의 수가 max를 넘을 수 없다.

최소값이 0이라는 뜻은 관계에 참여하는 개체의 수가 0이상이므로 반드시 참여할 필요가 없다.*
max 값이 10인 경우, 10개까지 참여할 수 있다.
max 값이
표시하면, 임의의 수만큼 참여할 수 있다.

그림 6-24) 학과와 학생의 관계
학과와 학생은 1:N 관계이며
하나의 학과에 여러 명의 학생이 소속되어 있다.
(관계 대응수는 1은 학과 쪽에 표기하고 학생쪽은 N으로 표기 되어 있다.)
(최솟값, 최댓값) 표기 시, 각 개체의 관점에서 관계에 참여하는 횟수를 적는다.
학과는 학생이 없어도 개설 가능이나, 학생은 학과에 무조건 소속되어 있어야 함

  • 관계 대응 수 1:1, 1:N, M:N에서 1, N, M은 각 개체가 관계에 참여하는 최댓값을 의미함.
  • 관계에 참여하는 개체의 최솟값을 표시하지 않는다는 단점을 보완하기 위해 다이어그램에서는
    대응수 외에 최솟값과 최댓값을 관계 실선 위에 (최솟값, 최댓값)으로 표기함.
  • *은 학생과 연결된 관계의 N을 의미
  • 각 관계 대응 수의 최솟값과 최댓값
관계(min1, max1)(min2, max2)
1:1(0, 1)(0, 1)
1:N(0, *)(0, 1)
N:M(0, *)(0, *)

ISA 관계

  • 추상클래스와 필요한 것들만 구체화

참여 제약 조건

  • 개체 집합 내 모든 개체가 관계에 참여하는지 유무에 따라 전체 참여,부분 참여로 구분
  • 전체 참여는 개체 집합의 모든 개체가 두 줄, 부분 참여는 일부만 한 참여함.
  • 전체 참여를 (최솟값, 최댓값)으로 표현할 경우 최솟값이 1 이상으로 모두 참여한다는 뜻,
    부분 참여는 최솟값이 0 이상

⚡ EX. 학생의 경우 교환, 휴학 사유로 수강을 안 할 수도 있다.
강좌의 경우 폐강 되는 과목 없이 수강 신청을 하는 학생이 반드시 있다고 가정하면 수강 관계와 전체 참여 관계를 맺을 수 있다.

  • 비식별 관계 = 강한 개체[포함관계가 약함]
  • 식별 관계 = 약한 개체[포함관계가 강함]

⚡ 도서 하나를 주문 시 주문이 여러 번 들어 갈 수 있고, 한번만 들어갈 수 있고, 안들어갈 수도 있기 때문에 1:N 관계
고객 한 명당 주문을 안 하거나, 한 번만 하거나, 여러 번 할 수 도 있기 때문에 1:N 관계

엔터티

  • 정의가 가능한 사물을 의미
  • 테이블이 엔터티로 표현

학생 엔터티

엔터티 분류

  • 어떤 데이터를 저장하느냐? 종류 분류
  • 유형 엔터티
    • 고객, 상품, 거래처, 도서, 학생, 교수, 학과
  • 무형 엔터티
    • 찜, 팔로우, 팔로잉, 부서조직, 장바구니, 구매이력
  • 문서 엔터티
    • 거래 명세서, 주문서, 사진
  • 코드 엔터티
    • 주소코드, 우편번호 코드, 국가코드, 지역번호코드

⚡ 학생 한 명은 취미가 없을 수도 있다. O
학생 한 명은 취미가 여러 개 있을 수 도 있다.

식별자 관계 : 실선으로 표현한다.
학생별 취미가 학생의 학번을 자신의 주 식별자로 설정한다.

비식별 관계 : 점선으로 표현한다.
사원정보가 부서정보의 부서코드를 일반 속성으로 두었다.

⚡ SHOP 1 1 FOOD

  • 하나의 음식만 팔 수 있음
    1 : N
  • SHOP은 여러 개의 음식을 팔 수 있음
    N : M
  • 다양한 상점들과 다양한 음식들
  • 모델링 하면서 생각하기

학생은 담당교수와 소속학과 무조건 있어야 함 교수는 여러 명의 학생을 둘 수도 안 둘수도 있다. 0도 포함해야 하며 1: N 선택 관계
교수는 소속학과가 있어야 하고 학생을 담당할 수 있어야 하기 때문에 위와 같이 되며, 강좌에 대한 강의를 무조건 해야하나 봄 ⇒ 강의가 필수이기에 1이상이고 교수 한 명 당 여러 개의 강의를 할 수 있기 때문에 교수 : 강의 1: N이나 필수
현재 학년/학기 정보를 어떻게 포함해야 하며… 교수 또한 학생번호를 가져야 하네?
강좌의 경우 강의하는 교수도 있어야 하고 학생이 수강을 해야 하며, 강좌를 진행할 학과도 있어야 함 강좌의 경우 학생이 여러 명 들을 수도 안들 수도 있기에 선택이며, 학생 한명이 여러 개의 강좌를 들을 수도 있으니 다 대 다 1:N
학생은 수강 내역을 여러 개 가질 수 있다. 수강은 무조건 해야 한다 필수이고 수강은 기본키가 다 참조?
수강의 경우 기본키가 전부 다른 테이블을 통해 가져와야 하기 때문에 식별 관계로 연결함..근데 따로 기본키를 또 설정해야 할까..?

회고

생각보다.. 테이블 만들면서 테이블들 간의 관계 설정하는 게 너무 헤갈린다ㅜㅜㅜㅜ 어떻게 생각하면 정화하게 설정할 수 있을까 고민되네... 개념적으로는 알겠는데 설정하려고 하면 헤갈림... 연습하면 나아지겠지?

profile
내 지식을 기록하여, 다른 사람들과 공유하여 함께 발전하는 사람이 되고 싶다. gitbook에도 정리중 ~

0개의 댓글