0

私は本当に困惑しており、そこにいるすべての賢い人々が私を助けてくれることを願っています!

データベース設計に関する私の知識はせいぜい中途半端です。本当に私を困らせるのに十分です。私は何よりもまずプログラマーです。

Web サイトを構築しようとしていますが、バックエンド データベースの設計に困惑しています。

ここでは、説明のためにやや不自然な例を挙げますが、この例は、私が達成する必要があるものにぴったりです。

カーウォーズなどのゲームの昔ながらのファンのためのデータベースを構築しているとイメージしてください。このゲームでは、プレイヤーはいくつかのベースカーの 1 つを選択し、ゲームで使用するためにカスタマイズできます。

エンジン、トランスミッション、装甲など、プレイヤーがカスタマイズするためにすべてのベースカーにいくつかの属性があります。すべての車にはこれらのスロットがあり、プレイヤーはこれらのスロットに適切なアイテムをドロップできます。これらの共通スロットに加えて、各車には N 個のマウントがあります。これは車ごとに異なりますが、すべての車に少なくとも 1 台あり、大型車には 12 台以上ある場合があります。プレイヤーはこれらのマウントに武器やユーティリティ アイテムを配置できます。プレイヤーが自分の車を構成すると、ビルドとして保存されます。このビルドは基本的に、選択したベースカー、エンジン、トランスミッション、アーマーの選択、および各マウントに配置する武器とアイテムを定義します。これは彼らのパーソナライズされたビルドです。

最初のレベルでは、テーブル レイアウトは非常に単純です。これは私が現在持っているものです:

車の基本的な統計情報用のフィールドと、エンジン、トランスミッション、および装甲に対してサポートできるものを示すフィールドを含む CAR テーブルがあります。(たとえば、小型車は v4 エンジンと軽装甲のみをサポートし、大型車は v8 と重装甲をサポートする場合があります)。

ENGINE、TRANSMISSION、および ARMOR テーブルは、これらのアイテムに対してプレイヤーが利用できるすべての選択肢を定義します。

マウントのサイズ、マウントが属する CAR、CAR 上の物理的な位置を定義する MOUNTS テーブルがあります。

そしてもちろん、WEAPONS テーブルと ITEMS テーブルは、マウントに入れることができる武器とアイテムを定義するだけでなく、どのマウントに入れることができるかを制御するためのサイズなどのデータも定義します。

これは最初のレイヤーで、すべてうまく機能します。問題は、保存された BUILD の場合にこれらすべてがどのように接続されるかを定義する 2 番目の層です。保存されたビルドのコンテキストで、これらのマウントの CAR、MOUNT、および WEAPONS/ITEMS の間のすべてのドットを接続する方法がわかりません。

BUILD テーブルでは、ベース車を指し示すことができ、エンジン、トランスミッション、装甲の選択は簡単です。ただし、選択した武器/アイテムを保存するのは少し難しくなります. それぞれがどのマウントに配置されているかを知る必要があることを今のところ無視しても、N 個の武器/アイテムをマウントできるという事実は残ります。各ビルドの量は可変です。だから私は 1 つ (ビルド) から多 (武器) の関係を持っていますが、ビルドごとに武器やアイテムの一意のインスタンスを作成せずに、その関係をどのように定義しますか? もちろん、プレイヤーが選択した武器やアイテムだけでなく、それらをどの特定のマウントに配置するかも格納する必要があるという事実の複雑さが増します。

各武器またはアイテムの複製インスタンスを作成し、その余分なインスタンスがそれが属するビルドを指し、マウントが格納されている場合、おそらくこの混乱から抜け出すことができますが、それを行うことはすべてのビルドを意味します基本的に、選択したすべての武器またはアイテムの複製を作成する必要がありますが、これはまったくばかげて無駄に思えます。

この問題には簡単な解決策があると確信しています。私は盲目でそれを見逃しているだけか、データベース設計の経験が不足しているため、必要なものを見ることができません。だから、あなたがオビワン・ケノービであり、あなたの唯一の希望であるふりをしてください!

リクエストがあれば、これを編集して詳細を提供します。ありがとう!

編集:なぜそれが問題になるのかわかりませんが、完全な情報のために、私は自分のウェブサイトにdjangoを使用しているため、DBは抽象化されています。開発にはローカルで SQLite を使用していますが、ライブ サーバーでは MySQL を使用しています。

4

1 に答える 1