質問: 現在、以下のページのようなWEBブラウザゲームを作成しています。 シーン内にレンガや、敵キャラを配置することで自分でステージを作っていくゲームです。 RPGツクールやMinecraft、マリオメーカーのような方向性を目指しています。 今後、サイト内にユーザー認証機能を実装して、データベースと接続することで ユーザーごとに作ったステージを保存できるようにしたいと思っています。 そこで、データベース設計の壁にぶつかっています。 このようなゲームの場合、ステージが何十個、何百個も作られることになると思うのですが ステージ内のアイテムの情報も何百、何千と膨大になるかと思います。 こういった場合、1つのステージごとにデータベースのテーブルを1つ作るのか それとも複数のステージの情報を1つのデータベースのテーブルの中に入れてしまうのが良いのか どちらなのでしょうか?それとも全く別のアプローチが良いのでしょうか? 使用しているデータベースはPostgreSQLで sequelizeやNodeJSと組み合わせて使用するつもりでいます。 設計しようと思っているテーブルは以下のような形です。 ステージ内の全ピクセルに対して01010111100といった形で情報を埋め込むと データ量が多くなりすぎるかと思ったので ステージ内に配置した敵キャラクターの位置情報やブロックの位置情報は 配列の奇数ケタにx座標、配列の偶数ケタにy座標、というように入れていこうかと思っています。 ![画像の説明をここに入力](https://i.stack.imgur.com/HAuYz.png)
回答: postgresqlを使っているなら、ステージ情報を varbit や varchar で持つのがいいと思います varbit は varchar よりもDBの容量的に得ですが、DB から値を引き出すときに 0/1 の文字が送られてしまうことが多いので、通信帯域的には損するかもしれません varbit は ORM mapper など、ライブラリとの相性が悪そうなので、そこも検討材料になると思います いずれにせよ 空気 = 00000000 自機 = 00000001 レンガ = 00000002 ... のように各ブロックに1つの値を割り当て、それらを連結したものを保存する、という方針をとるのが一般的ではないでしょうか