티스토리 뷰
참고사이트 : Manchester United Mens Clothing, Man Utd Mens Kits, Mens Shop, Clothing | store.manutd.com
맨유 공식 쇼핑몰을 보고 간략한 ERD를 만들어 보기로 했다.
내가 만든 ERD 링크 :MU ERD (erdcloud.com)
※ 전제조건 : 간략하게 만들기 위해 여러개 주문해도 같은 조건의 물품만 여러개 주문가능
차례
테이블
Products
Personalisation
Code
Images
Players
Main Category
Sub Category
Brands
관계도
Products N Pesonalisation
Products N Code
Products N Images
Players N Personalisation, Players N Sub Category
Main Category N Sub Category
Products N Sub Category
결론
테이블 Products
제품들의 카테고리가 왼쪽에 나눠져 있어서 왼쪽 카테고리들을 물건의 고유 칼럼으로 썼다.
또한 KITS 타입에 들어가면 보이는 Personalise 분류가 있기 때문에 이것은 다른 테이블로 썼다.
테이블 Personalisation
Personalisation 테이블 안에는 League와 Cup Printing으로 나눠져 있는데
is custom으로 TRUE, FALSE만 판단해서 TRUE면 직접 새기도록 만든다.
Arm Badge 칼럼에 추가해 주면 될 것이다. 또한 Front-end에서는 리그와 컵으로 나눠져 있지만 Arm Badge는 합쳐도 무관하다고 판단해서 하나의 칼럼으로 통일할 것이다.
Players는 따로 테이블로 만들면 중복해서 쓰지 않아도 된다.
![]() |
![]() |
테이블 Code
쇼핑몰에 쿠폰도 있다. 따라서 쿠폰들이 여러 개 있을 경우를 대비해서 테이블로 추가한다.
쿠폰코드 이름, 쿠폰이 적용가능한지, 쿠폰 할인율을 칼럼에 추가했다.
테이블 Images
물건들마다 이미지들이 여러개 있으므로 이미지 테이블을 따로 만든다. 또한 이미지들 중 대표 이미지인지를 불값으로 준다.
이미지가 썸네일인지, 또는 여러 url을 담기 위해 테이블로 나눴다.
ProductID의 관계는 추후 설명
![]() |
![]() |
각 물건들에는 여러 이미지가 있다. | 대표 이미지들이 있다. (후엔 불값을 주지 않고 이미지들 중 맨 처음 이미지를 대표이미지로 만들 예정이다) |
테이블 Players
선수테이블을 따로 만든 이유는 카테고리가 선수마다 나눠져 있고 Personalisation에도 각 선수들 따라 만들게 되어 있으므로,
Products, Personalisation 테이블에 중복으로 쓰지 않고 효율적으로 쓰기 위해 따로 테이블로 만들었다.
테이블 Main Category
메인카테고리테이블을 만들었다. 메인 카테고리 테이블에 들어갈 것들은
KITS, PLAYER, MEN, WOMEN, KIDS, GIFTS&ACCESSORIES, CLEARANCE 등이 있다.
테이블 Sub Category
메인카테고리테이블을 만들었다. 서브 카테고리 테이블에 들어갈 것들은
KITS :
Player : 선수들 이름
MEN :
WOMEN :
KIDS :
GIFTS&ACCESSORIES :
CLEARANCE : 없다
테이블 Brands
브랜드 테이블을 만들었다. 브랜드 이름을 담고 있다.
관계도 Products N Pesonalisation
둘을 식별관계로 만들었다. 그 이유는 Personalisation은 물품이 있어야 존재하기 때문이다.
또한 1:1 관계로 만든 이유는 한 물품에는 한 Personalisation만 가능하기 때문이다.
관계도 Products N Code
둘을 비식별관계로 만들었다. 그 이유는 Code은 물품이 없어도 존재하기 때문이다.
또한 1:N 관계로 만든 이유는 한 물품에는 여러 Code가 중복으로 적용 가능하게 만들었기 때문이다.
관계도 Products N Images
둘을 비식별관계로 만들었다. 그 이유는 Images은 물품이 없어도 존재할 수 있기 때문이다.
예를 들어 이미지만 쇼핑몰 메인 이미지로 쓸 수도 있다. 기회의 의도에 제약을 없애기 위해 비식별로 만들었다.
또한 1:N 관계로 만든 이유는 한 물품에는 하나 또는 여러 Images가 있기 때문이다.
관계도 Players N Sub Category, Players N Personalisation
table | Sub Category | Personalisation |
비식별 | O | O |
비식별 이유 | 선수가 없어도 Sub Category엔 지장이 없으므로 | 선수 프린팅 상관없이 커스텀하면 되므로 |
1:1, 1:N, N:N | 1:N | 1:1 |
1:1, 1:N, N:N 이유 | 없거나 카테고리에 여러 선수가 들어가도 되니까 | 없거나 커스텀으로 보통 한 선수만을 선택하므로(선수 선택 안해도 됨) |
관계도 Main Category N Sub Category
둘을 식별관계로 만들었다. 그 이유는 Sub Category는 Main Category가 없으면 존재할 수 있기 때문이다.
예를 들어 메인카테고리인 KIT의 Away, Goalkeeper, Home, Third들은 서브카테고리이며 KIT가 있어야만 존재한다.
또한 1:N 관계로 만든 이유는 Main Category에는 없거나 하나 또는 여러 Sub Category가 있기 때문이다.
관계도 Products N Sub Category
둘을 식별관계로 만들었다. 그 이유는 Products는 Sub Category가 없으면 존재할 수 있기 때문이다.
예를 들어 물건은 특정 카테고리에 포함이 안되어 있어도 '기타' 또는 '종합' 물품으로 들어가기 때문이다.
또한 1:N 관계로 만든 이유는 Sub Category에는 없거나 하나, 또는 여러 Products가 있기 때문이다.
결론
쇼핑몰 중엔 메인카테로리, 서브카테고리로 탑다운으로 보여주는 게 아니라, 기획 의도대로 보여주는 사이트도 있기 때문에 쇼핑몰을 보면서 ERD를 역설계를 하는 것은 쉬운 일이 아니었다. 메뉴에는 Men, Women, Kids가 있었지만 메인 카테고리는 아니었다. 이들을 하나로 묶는 메인 카테고리가 있겠지만 노출되지 않아서 이 셋의 메인 카테고리를 어떻게 명명해야할지 확신이 서지 않았다.
또한 카테고리 안에 중복되는 것들도 있었다. Men, Women, Kids 카테고리에는 서로 공통적으로 들어간 것도 있었다. 하지만 불규칙해서 테이블로 따로 빼기보단 각각 카테고리에 유지하는게 낫다고 판단했다. 남자 고객 중에 드레스 스커트를 찾는 사람은 극히 일부라 예상한다. 또한 한 번 지정하면 카테고리의 변경도 잘 일어나기 않는다.
Products와 Sub Category를 식별, 비식별 어느 것으로 연결할지 고민했다. 비식별로 연결하면 물품은 카테고리에 분류되지 않아도 존재할 수 있다. 그것이 장점이 될 수도 있지만 카테고리로 물건을 조회할 때 문제가 생길 수도 있으므로 식별연결했다.
Players 테이블은 카테고리에도 있고 Personalise에서도 쓰인다. 중복해서 쓰이기 때문에 따로 테이블로 만들었다.
ERD 역설계를 할 때 메인 카테고리가 잘 정비되어있는 사이트를 선정해야겠다.
'개발자 > DataBase[TypeORM]' 카테고리의 다른 글
Procedure란 (0) | 2022.03.02 |
---|---|
[TypeORM]Repository save vs create 차이 (0) | 2022.02.17 |
식별 vs 비식별 관계 (0) | 2022.02.02 |
- Total
- Today
- Yesterday
- 백틱
- Playground
- 명령어
- elasticsearch
- 도커
- 공부법
- error
- Rest
- js
- yarn
- Callback
- 호이스팅
- 독커
- 코딩습관
- docker
- nodemon
- axios
- 코드캠프
- postman
- 프로그래머스
- Console
- arrowfunction
- 콜백
- 에러
- GraphQL
- function
- arrow
- typeorm
- Spread
- NPM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |