# DB 선택 이유 및 구조 디비를 선택을 하기 전에 미리 데이터베이스에서 필요한 데이터와 데이터 구조를 작성해보았다. ## Mysql ![](https://i.imgur.com/bfMJ3MH.png) ### Mongo ``` User { id, email, password } GameType { gameTypeNumber, name, image, rule } Game room { gameType { gameTypeNumber, name, image, rule } id, title, isPublic, timeLimit, playerList : [ player { isMaster, playerNumber, // 순서 id, team }, ... ], recordList : [ record { order, playerId, position, } ... ] } ``` 가장 복잡하고 가장 중추적인 부분은 게임이 진행될 때의 데이터를 담는 부분이었다. 이 데이터들은 게임이 시작할 때 생기기 시작해서 게임을 하는 도중에 record가 계속 추가가 되고 **게임이 끝이나면 모두 사라지는 데이터였다**. 따라서 ERD를 그려본 결과 mysql에서 관계가 복잡하게 있는 데이터를 모두 찾아가면서 삭제를 하는 것보다 **mongoDB를 이용해서 game room document를 삭제를 한 번에 하는 것이 훨씬 쉽다고 생각**을 했다. 또한 몽고디비의 embeded 방식으로 해도 **게임 도중에 game room 내부의 game type이나 player 정보 같은 것을 바꿀 일은 없기 때문에 데이터 이상이 발생할 일이 없어 몽고디비의 단점이 부각되지 않는다고 생각**했다. 그리고 서비스가 처음에는 오목 게임으로 시작을 하지만 **다른 게임을 추가했을 경우**에 recordList에 들어가는 record의 **스키마가 달라질 수도 있다**고 생각했다. 그래서 mysql보다 스키마가 유연한 몽고디비가 더 적합하다고 생각해 **몽고디비로 최종 결정**을 했다. ###### tags: `의논사항`