데이터 모델링 초안 : 비즈니스 룰에서 ERD까지
·
데이터 분석/06. 데이터 모델링
이번 글에서는 쇼핑몰 서비스를 예로 들어,비즈니스 룰에서 어떻게 Entity와 Relationship을 도출하고, 최종적으로 ERD를 설계하는지 살펴보겠습니다.1. 비즈니스 룰 살펴보기쇼핑몰 서비스에서의 주요 비즈니스 룰은 다음과 같다비즈니스 룰유저는 상품을 주문할 수 있다.동일한 주문 내역은 한 번의 배달로, 3일 안에 유저가 지정한 배송지에 전달돼야 한다.만약 지연될 경우, 유저에게 최대한 빨리 알려야 한다.유저는 상품에 대한 평가를 남길 수 있다.평가는 별점(1~5점)과 200자 이내의 줄글로 작성된다.2. 명사와 동사 추출하기비즈니스 룰에서 명사와 동사를 먼저 추출한다.명사는 Entity와 Attribute 후보동사는 Relationship 후보비즈니스 룰 명사 (Entity/Attribute ..
[데이터 모델링] 모델링의 시작! 비즈니스 룰 이해하기
·
데이터 분석/06. 데이터 모델링
1. 비즈니스 룰 이해하기모델링의 시작은 저장하고 싶은 데이터의 Entity,attribute, relationship을 파악하는 것이다.이를 파악하기 위해서는 해당 서비스의 비즈니스 룰 또는 사업 규칙을 이용해야한다 비즈니스 룰이란, 어떤 조직이 운영되기 위해서 따르는 규칙(정책,절차,원칙)들에 대한 간단명료한 설명이다.즉, 시스템이 어떻게 작동해야하는지, 어떤 조건에서 어떤 행동을 취해야 하는지를 명확히 정의하는 것= 웹사이트라면 여기서 제공하는 모든 기능에 관한 규칙= 간단명료하면서도 필요한 내용을 모두 담고 있어야한다!구분비즈니스 룰 예시회원가입신규 가입 시 3,000원 지급, 30일 후 소멸배송빠른배송은 오후 2시 이전 주문 시 당일 출고리뷰텍스트 리뷰 100P, 사진 리뷰 300P 지급취소/..
[프로그래머스]Oracle SQL_3(Lv4)
·
코딩 테스트/02. SQL
1. 저자 별 카테고리 별 매출액 집계하기https://school.programmers.co.kr/learn/courses/30/lessons/144856?language=oracleSELECT A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY, SUM(B.PRICE * BS.SALES) AS SALESFROM BOOK_SALES BS JOIN BOOK B ON BS.BOOK_ID = B.BOOK_IDJOIN AUTHOR A ON A.AUTHOR_ID = B.AUTHOR_IDWHERE TO_CHAR(BS.SALES_DATE,'YYYY-MM') = '2022-01'GROUP BY A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORYORDER..
[프로그래머스]Oracle SQL_2(Lv4)
·
코딩 테스트/02. SQL
1. 5월 식품들의 매출 조회하기https://school.programmers.co.kr/learn/courses/30/lessons/131117?language=oracle WITH ORDER_DT AS ( SELECT PRODUCT_ID, SUM(AMOUNT) AS TOTAL_AMOUNT FROM FOOD_ORDER WHERE TO_CHAR(PRODUCE_DATE, 'YYYY-MM') = '2022-05' GROUP BY PRODUCT_ID) -- Closing parenthesis for the CTESELECT P.PRODUCT_ID, P.PRODUCT_NAME, (P.PRICE * O.TOTAL_AMOUNT) AS TOTAL_SAL..
[프로그래머스]Oracle SQL_1(Lv4)
·
코딩 테스트/02. SQL
1. 보호소에서 중성화한 동물https://school.programmers.co.kr/learn/courses/30/lessons/59045?language=oracle 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ANIMAL_INS 테이블에 SEX_UPON_INTAKE 컬럼의 고유값을 확인하면 다음과 같이 나옵니다(ANIMAL_OUTS 테이블도 동일함)Intact : 중성화 되지 않은 상태Neutered : 중성화 됨 (수컷)Spayed : 중성화 (암컷)SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAMEFROM ANIMAL_OUTS O JOIN ANIMAL_..
[데이터 모델링] 데이터를 어떻게 저장해야할까
·
데이터 분석/06. 데이터 모델링
1. 데이터 모델링데이터를 사용하려는 목적에 맞게 정리하고 체계화해놓은 모형데이터 베이스를 어떻게 만들고, 수정할 건지에 대한 계획을 세우는 작업따라서 실제로 만든 계획을 반영하는 건 모델링에 포함되지 않는다. 1-1. 데이터 모델링의 개념Entity(개체) : 저장하고 싶은 데이터의 대상, 실제 대상 하나하나(행)Entity type:일반화한 Entity(테이블)Attribute(속성): Entity에 대해서 저장하려는 내용(컬럼)Relationship(관계) : Entity들 사이의 연결점Constraint(제약조건): 데이터의 규칙 "학번은 겹치면 안된다",'수업은 적어도 한명의 지도교수가 있어야한다' 1-2. 데이터 모델링의 목적저장하고자 하는 데이터에서 Entity,Attribute, Rela..
[프로그래머스]Oracle SQL_3(Lv3)
·
코딩 테스트/02. SQL
1. 없어진 기록 찾기https://school.programmers.co.kr/learn/courses/30/lessons/59042?language=oracleSELECT O.ANIMAL_ID, O.NAMEFROM ANIMAL_OUTS O LEFT JOIN ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_IDWHERE I.ANIMAL_ID IS NULLORDER BY O.ANIMAL_ID;JOIN의 종류를 잘 선택해야한다INNER JOIN : 보호소에 들어와서 입양을 간 동물LEFT JOIN: 입양간 동물기준으로 그중 보호소에 있는 동물RIGHT JOIN: 보호소에 있는 동물기준으로 입양간 기록이 있는 동물2. 자동차 대여 기록에서 대여중/대여가능 여부 구분하..
[프로그래머스]Oracle SQL_2(Lv3)
·
코딩 테스트/02. SQL
🔸1. 즐겨찾기가 가장 많은 식당 정보 출력하기https://school.programmers.co.kr/learn/courses/30/lessons/131123?language=oracleSELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITESFROM ( SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES, ROW_NUMBER() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS RN FROM REST_INFO) TWHERE RN = 1 #각 음식 종류 그룹에서 즐겨찾기 1위만 남기기ORDER BY FOOD_TY..
[프로그래머스] Oracle SQL_1(Lv3)
·
코딩 테스트/02. SQL
1. 조건별로 분류하여 주문상태 출력하기https://school.programmers.co.kr/learn/courses/30/lessons/131113?language=oracleSELECT ORDER_ID, PRODUCT_ID, TO_CHAR(OUT_DATE,'YYYY-MM-DD') AS "OUT_DATE", CASE WHEN TO_CHAR(OUT_DATE,'YYYY-MM-DD') '2022-05-01' THEN '출고대기' ELSE '출고미정' END AS "출고여부"FROM FOOD_ORDERORDER BY ORDER_ID; 2. 카테고리 별 도서 판매량 집계하기https://school.programmers.co.kr/learn/cours..
[프로그래머스]Oracle SQL_2(Lv2)
·
코딩 테스트/02. SQL
>🔸1. 가격대 별 상품 개수 구하기https://school.programmers.co.kr/learn/courses/30/lessons/131530?language=oracleSELECT FLOOR(PRICE/10000) *10000 AS "PRICE_GROUP", COUNT(*) AS "PRODUCTS"FROM PRODUCTGROUP BY FLOOR(PRICE/10000) *10000ORDER BY PRICE_GROUP ASC;POINT!TRUNC 함수나 FLOOR함수를 사용하면 특정 단위로 숫자를 내림 처리할 수 있다.TRUNC와 FLOOR의 가장 큰 차이점은 버림할 위치를 정해서 버림할 수 있는지 여부이다 TRUNCATE: 위치를 지정해서 버릴 수 있는 유연성을 가짐.FLOOR: 항..