# DB 선택 이유 및 구조
디비를 선택을 하기 전에 미리 데이터베이스에서 필요한 데이터와 데이터 구조를 작성해보았다.
## Mysql

### 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: `의논사항`