본문 바로가기
카테고리 없음

아이템 시뮬레이터 재시도 시작!

by 엔 터 2024. 9. 30.

아이템 시뮬레이터 과제를 수행하면서 스키마 적인 부분에서 요구사항을 해결하는데 덜 컵 겁을 먹고 그냥 필수 요구 사항만 수행해서 
내 아이템 시뮬레이터의 테이블은 user, character, item 밖에 없었다 
도전 요구 사항도 구현하지 못한 부분이 아쉬움이 남아서 새로 복습 차원에서 만들어 보려고 했다

 

이번 개인 과제의 데이터 베이스 요구사항이였다

 

그래서 이번에는 프리즈마 스키마부터 인벤토리 테이블, 장착 아이템 테이블을 포함해서 작성하였다.

 

유저 테이블 모델이다 그런데 뒤에 나올 질문을 하러 갔을 때 튜터님이 질문한 부분이 있었는데 왜 @map()에 대문자로 작성했냐였다
그래서 내가 SQLD를 공부할 때 SQL은 대문자로 작성한다로 알고 있어서 그렇게 했다고 하니까 
대문자로 작성해도 상관은 없는데 권장사항은 소문자이다 postgreSQL에서는 대문자로 작성해도 다 소문자로 바꿔버린다고 팁을 주셔서 아래에 나오는 테이블들은 전부 소문자로 수정했다 그리고 @@map()을 통해서 매핑하는 테이블 명은 지금 현재 모델명은 user여도 테이블 명은 users로 복수형으로 쓰는 것도 지적해 주셨다

유저 모델

중간 요약
1. 데이터베이스의 테이블 명, 칼럼 명은 소문자 snake case로 작성하는 게 권장사항이다. (ex. user_id)
2. 모델명은 단수지만 매핑되는 테이블명은 복수형을 사용한다. (테이블 안에는 칼럼이 여러 개 들어가니까!)

 

케릭터 모델

 

User 모델과 1대 N 관계를 갖는 Character 모델이다 이 캐릭터 모델은 뒤에 나올 Inventory 모델, Equipment 모델과 1대 1 관계를 맺음

 

그런데 여기서 프리즈마는 null 여부와 optional 여부를 ?로 표시하는데 내가 Inventory에 물음표를 붙이지도 않았는데 저장하니까 알아서 물음표가 생기는 것이었다
그래서 아니 캐릭터가 있으면 인벤토리랑 장비창은 무조건 있어야 하는데... 이러고 있었는데

 

이 럴 수 가!

원래 1대 1 관계에서는 optional 표시를 해줘야 하는 것이었다

 

내가 생각했던 캐릭터가 존재하면 인벤토리랑 장비창이 무조건 존재하게 하려면 트랜잭션을 걸어줬어야 했던 것이다
나중에 캐릭터 생성 api 과정에서 트랜잭션을 사용해 봐야겠다.

 

 아래는 순서대로 Character 모델과 관계를 맺고 있는 Inventory 모델과 Equipment 모델이다.

 

인벤토리 모델과 장비창 모델

 

그리고 마지막으로 Item 모델이다

아이템 모델

 

수정 전 테이블 목록

 

수정 전 테이블 이름이다 전부 대문자로 되어있다

 

이걸 수정하려고 한다

 

수정한 schema.prisma를 반영하려면 터미널에서

yarn prisma db push

를 입력해 주면 반영이 된다.

 

반영 결과

반영 결과로 아이템 시뮬레이터 데이터베이스의 테이블 명이 전부 소문자로 바뀌었다!

 

이제 스키마를 완성했다 
이제 다시 도전 과제까지 만들어야겠다!