36865
現在、以下のページのようなWEBブラウザゲームを作成しています。  
<http://strawberry-magic.com/play.html>  
シーン内にレンガや、敵キャラを配置することで自分でステージを作っていくゲームです。  
RPGツクールやMinecraft、マリオメーカーのような方向性を目指しています。

今後、サイト内にユーザー認証機能を実装して、データベースと接続することで  
ユーザーごとに作ったステージを保存できるようにしたいと思っています。

そこで、データベース設計の壁にぶつかっています。  
このようなゲームの場合、ステージが何十個、何百個も作られることになると思うのですが  
ステージ内のアイテムの情報も何百、何千と膨大になるかと思います。  
こういった場合、1つのステージごとにデータベースのテーブルを1つ作るのか  
それとも複数のステージの情報を1つのデータベースのテーブルの中に入れてしまうのが良いのか  
どちらなのでしょうか？それとも全く別のアプローチが良いのでしょうか？

使用しているデータベースはPostgreSQLで  
sequelizeやNodeJSと組み合わせて使用するつもりでいます。

設計しようと思っているテーブルは以下のような形です。  
ステージ内の全ピクセルに対して01010111100といった形で情報を埋め込むと  
データ量が多くなりすぎるかと思ったので  
ステージ内に配置した敵キャラクターの位置情報やブロックの位置情報は  
配列の奇数ケタにx座標、配列の偶数ケタにy座標、というように入れていこうかと思っています。

[![画像の説明をここに入力](https://i.stack.imgur.com/HAuYz.png)](https://i.stack.imgur.com/HAuYz.png)
CC BY-SA 3.0
2017-08-01T11:39:44.120
36854
2017-08-03T01:38:58.477
2017-08-03T01:38:58.477
22541
22541
question
postgresql database
WEBブラウザゲームのデータベース設計について
ステージごとに根本的な違いがあるなら別テーブルでもいいと思いますが  
ただステージ数が違うというだけであれば、グループ項目等を設けてまとまりで取得できるような構造にしておけば、ステージテーブルとしては１つで良いのではないかと思います。

別の方法としては、もう全部JSONで持ってしまうとかですかね？
CC BY-SA 3.0
2017-08-02T02:06:13.097
36865
2017-08-02T02:06:13.097
20906
36854
answer
postgresqlを使っているなら、ステージ情報を varbit や varchar で持つのがいいと思います

varbit は varchar よりもDBの容量的に得ですが、DB から値を引き出すときに 0/1
の文字が送られてしまうことが多いので、通信帯域的には損するかもしれません

varbit は ORM mapper など、ライブラリとの相性が悪そうなので、そこも検討材料になると思います

* * *

いずれにせよ

空気 = 00000000  
自機 = 00000001  
レンガ = 00000002  
...

のように各ブロックに1つの値を割り当て、それらを連結したものを保存する、という方針をとるのが一般的ではないでしょうか
CC BY-SA 3.0
2017-08-02T10:05:21.813
36883
2017-08-02T10:05:21.813
9796
36854
answer