これは私がかなり長い間疑問に思っていたことであり、まだ本当の (良い) 解決策を見ていません。これは、多くのゲームが抱えていると私が想像する問題であり、解決方法を簡単に考えることができません (まあ)。アイデアは大歓迎ですが、これは具体的な問題ではないので、詳細を尋ねる必要はありません。(そしてあなたが作ったものを説明してください)。
さて、多くのゲームには (インベントリ) アイテムの概念があり、多くの場合、何百もの異なる種類のアイテムがあり、すべてが非常に多様なデータ構造を持つことがよくあります。非常に単純なアイテム (「岩」) もあれば、持つことができるアイテムもあります。非常識な複雑さ、またはそれらの背後にあるデータ (「本」、「プログラムされたコンピューター チップ」、「より多くのアイテムが入ったコンテナー」) など。
さて、そのようなプログラミングは簡単です。すべてにインターフェースを実装させるか、抽象ルート項目を拡張するだけです。プログラミングの世界のオブジェクトは、内側と外側が同じように見える必要はないため、どのタイプのアイテムでもプライベート フィールドの量と種類に問題はありません。
しかし、データベースのシリアル化に関しては (バイナリ シリアル化はもちろん問題ありません)、ジレンマに直面しています: たとえば、典型的な SQL データベースでそれをどのように表現しますか?
私が見た解決策のいくつかの試みは、満足のいくものではありません:
アイテムのバイナリ シリアル化。データベースは ID と BLOB のみを保持します。
- 長所: 実装に 10 秒ほどかかります。
- 短所: 基本的にすべてのデータベース機能を犠牲にし、保守が難しく、リファクタリングがほぼ不可能です。
項目タイプごとの表。
- 長所:クリーンで柔軟。
- 短所: 多種多様なテーブルが何百もあり、SQL にはテーブル/タイプの「参照」の概念がないため、項目を検索するたびにそれらすべてを照会する必要があります。
すべてのアイテムで使用されていない多くのフィールドを持つ 1 つのテーブル。
- 長所: 実装に 10 秒ほどかかりますが、それでも検索可能です。
- 短所: スペースの浪費、パフォーマンス、使用中のフィールドをデータベースからわかりにくくする。
同様のアイテムが一緒にスローされ、異なるデータに同じフィールドを使用するストレージ用のいくつかの「基本プロファイル」を持ついくつかのテーブル。
- プロの:私は何も持っていません。
- 短所: スペースの浪費、パフォーマンス、使用中のフィールドをデータベースからわかりにくくする。
どんなアイデアがありますか?良くも悪くも機能する別のデザインを見たことがありますか?