DB ERD 모델링

BackEnd_Ash.log·2020년 5월 19일
8

database

목록 보기
6/31

2020.09.04 업데이트 다차원 데이터

모델링에 사용법에 대해서는 이전에 한번 적은적이 있다.
https://velog.io/@ash3767/%EB%AA%A8%EB%8D%B8%EB%A7%81-Richard-Barker

다시 정리하고 싶어서 또 적습니다.

참고자료 :
https://yesdoing.github.io/%EC%84%B8%EB%AF%B8%EB%82%98/2017/09/10/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%EB%A5%BC-%EB%8D%94-%EC%9E%98%EB%A7%8C%EB%93%A4%EA%B8%B0%EC%9C%84%ED%95%9C-ER%EB%AA%A8%EB%8D%B8%EB%A7%81.html

모델링이란 ?

  • DB모델링은 데이터베이스를 만들때 데이터가 시각적으로 보일수 있도록 모델링 하는것
  • 모델링이란 우리가 소프트웨어에서 본질적으로 다루고 있는 데이터에 대한 모델을 만드는 과정이다.

시퀀스 다이아그램

이러한 동작순서에 대한 데이터를 시각적으로 볼 수 있습니다.

모델링의 이점

  • 시각화 시킨다는 것은 전체적 설계의 구조를 좀 더 명확하게 이해할 수 있게 된다.
  • 남에게 자신의 소프트웨어의 의도를 잘 전달할 수 있다.(혼자서 개발하는것이 아니기 때문에 )
  • 자신의 생각을 표현해서 산출물이 나온다는것은 개발자에게 큰 영향을 미친다.

데이터베이스 설계 필요성

  • 데이터를 보다 잘 다루기 위해서 설계가 필요하며 소프트웨어 전체에 영향을 미친다.
  • 테이블을 보여주는 것보다 ERD 를 보여주는 것은 처음 개발을 시작하는 사람의 이해력을 높일 수 있다.

ERD 그려서 얻는 이점

  • mysqlworkbench 를 툴이 있는데 설치하면 좋다.

ERD 도구

  • ER-win - Oracle 를 지원 , 대기업에서 자주 사용
  • MySQL Workbench - 전세계적으로 유명
  • 다른 툴도 많다. ( ERD Tool , DB Design Tool 등등)

동그라미 없는 것과 있는것의 차이 ( 동그란것은 Optional 이라고 한다 )

  • CHAR - 고정된 길이의 문자
  • VARCHAR - 가변적인 길이의 문자
  • TEXT - 많은 양의 문자
  • INT - 음수이거나 양수인 모든 숫자
  • FLOAT , DOUBLE - 소수점을 가질 수 있는 숫자
  • BLOB - 바이너리 데이터

실습

  • 스키마가 데이터베이스를 의미한다.
  • 실선은 null 값이 있으면 안된다 .
  • 점섬은 null 값이 있어도 된다. ( optional )
  • 용어
    • Identifying Realtionship : "식별 관계" -실선 , 점선
      • Identifying <->non Identifying
    • Mandatory : 필수
      • NULL 을 허용할거냐 안할거냐의 참고 대상의 존재 여부를 의미한다.
    • Cascade : 폭포란 사전적 뜻을 가지고 있으며 데이터베이스에서는 연쇄작용이 일어나는 것을 가르킨다.
    • Foreign key options
      • RESTRICE : 참고 테이블의 값의 변경을 거부한다. ( 일단거절)
      • CASCADE : 같이 삭제 또는 수정
      • SET NULL : NULL 로 변경
      • No ACTION : RESTRICT 랑 동일한 결과 ( 나중에 거절)
  • mysql 은 소문자로 만드는게 관행
  • mysql 에 password 명령어가 존재해서 passwd라 한다.
  • 테이블은 여러개의 데이터가 모여있기 때문에 복수형이 컨벤션이다.

쇼핑몰

  • 로그인 이후 구매 가능
    1. 로그인 ( 유저의 정보 필요 )
    2. 상품 ( 상품에 대한 정보 필요 )
    3. 상품의 구매에 대한 정보

  • 유저는 여러개의 주문을 가질 수 있기 때문에 users 와 orders 는 1 : N 관계 입니다.

  • 상품 은 여러개의 주문에 주문되어질 수 있기 때문에 products 와 orders 는 1 : N 의 관계입니다. 그리고 , 주문은 여러개의 상품을 가질수 있기 때문에
    orders 와 products 는 N : N 관계로 변경합니다.

  • Many to Many 의 관계는 직접적인 관계를 연결 할 수 없기때문에 ,
    orders_has_products 라는 중간테이블을 만듭니다.

  • 여기까지만 다이어그램을 그려도 쇼핑몰의 윤곽이 잡힌다.

      1. 유저는 로그인을 해야 주문을 할 수 있다.
      1. 유저는 상품을 고르고 주문 목록에 넣을 수 있다 (orders_has_products) - 장바구니의 역할을 하게 됨.
  • 주문을 하기위해서는 유저의 집주소가 필요하다. orders 에 users 의 address 가 있긴 하지만 쇼핑몰에서 주문을 할때 배달장소를 입력받게 한다.
    이것을 위해 address_book 테이블을 추가한다.

  • 이제 배송에 관련된 테이블을 추가해야합니다.
    왜냐하면 우리가 쇼핑몰에서 주문을 하면 한번에 배달받을 수도 있고 , 여러개의 상품을 주문했을때는 한 주문을 여러번 나누어서 배송을 받을 수 있습니다. 그래서 여기서 배송이라는 테이블을 추가해서 address_book 과 orders 테이블을 연결합니다.

  • 위까지는 장바구니에 등록된 상품들을 배송할 배송지의 정보까지의 설계이다 .
    주문은 결제를 해야 완료가 되기때문에 , 결제를 위한 테이블을 추가해야합니다.

ORM 에 대해

  • 보통 스타트업에서 ORM 을 많이 사용하는데 , ORM 을 사용하지 않게 해보는것도 중요하다
  • ORM 을 사용하는 경우에는 최대한 빨리 프로토타입을 생성해야할때 , 아직 사업의 궤도가 오르지 않았을때 빨리 만들기 위해 사용하고 사업이 안정화가 되면 걷어내는것이 좋다고 생각한다.

DBMS 를 선택하는 기준

  • 다른디비 보다 오라클이 좀더 완성도 높은 DB라 성능적인 측면 , 데이터에 대한 안정성 측면에서 오라클 만큼의 성능을 내는 DBMS가 잘 없다.

  • NoSQL 은 데이터에 대해 DBMS 가 보장하지 않는다. (insert) 그래서 로그를 쌓는다던가 데이터의 통계를 내야하는 데이터를 쌓아야하는 경우에 사용하지 금융정보나 개인정보같은것을 저장해야하는 상황에서 사용하면 안된다 생각한다.

https://medium.com/@khwsc1/%EB%B2%88%EC%97%AD-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%84%A4%EA%B3%84-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-b25792a0aa86

다차원 데이트 ( Multidimensional data )

어떤 사람들은 단일 데이터 유형의 복수의 차원에 접근하고자 합니다. 특히 OLAP 데이터베이스에서 말이죠 .
예를들어 , 고객 당 판매량 ( sales by customer ) , 현재 상태 ( state ) 그리고 판매 월( month ) 을 알고자 한다고 합시다.
이런 상황에서는 , 중앙 테이블 (central facet table ) 을 만들어 다른 고객 ( customer ) , 상태 ( state ) , 그리고 판매 월 ( month ) 테이블이 참조 할 수 있도록 합니다.

profile
꾸준함이란 ... ?

0개의 댓글