2017-05-31 8 views
1

これは、SQLまたはSQLiteのモデル設計に関する質問です。 SQL:カードのデータベース設計は良いですか?

あなたは、多くの再利用可能なカードやプレイヤーはそれらのカードのうちのデッキを作る持っているいくつかのカードゲーム(例えばMTG)

当然

あなたはすべてのデッキのためのカードの新しいインスタンスを作成したくないユーザーがいると仮定します作成する可能性があります。それには冗長性がたくさんあります。

したがって、「マスター」カード(すべての関連情報付き)が必要です。

私の質問は、どのようにカード(およびその数量)を所定のデッキに統合するのですか?

(私は実際にこのデータベースを作成していませんが、一般的な在庫からの複数のアイテムの任意の数のコレクションを持つユーザーを持つ設計を強調しています)。

答えて

1

3つのテーブルがあります:1つのテーブルにカードのデータ(名前、コストなど)があります。別のテーブルにはデッキ(デッキ名、作成者など)があります。また、別のテーブルにはデッキ内のカード(deck_cards)があります(card_idとquantityでdeck_idをリンクしています)。

EDIT:補遺:これは、すべてのデータベース設計プライマーで使用されている古典的な例題と同じ設定(および理論的根拠)です:製品、受注、および受注明細です。欠けているのは「顧客」だけです(デッキをプレーヤーやデッキビルダーにリンクさせたい場合に追加することができます)。

+0

これはうまくいきますが、テーブル 'deck_cards'には1つのフィールドしか追加されておらず、管理者の立場から見ると、まずカードがテーブルに入っていることを確認してデッキを作成しなければなりませんデッキとディスクリプションを作成し、最後にデッキを 'deck_cards'に配置します。私は実際にこのデータベースを作っているわけではありません。それは私が持っている問題を強調することを考えた例に過ぎません。 – SumNeuron

+0

SQLを使用している場合は、データベースを作っている人について質問します。だから、答えは自然にデータベースを作ると仮定します。 このパラダイム(3つのテーブル)はdeck_cardsテーブルを使用しないよりも確かに理想的です。カード以外のデッキに関する情報がまったく必要ない場合を除き、デッキの表を省略してdeck_cardsの名前をデッキとすることはできません(これはいい考えです。デッキをdeck_id以外のもので置き換えたもの)。 –

0

私は何かのように想像:

カード - 表のプレイヤーのデッキを詳述、と - プレーヤーを含む表が

Player_ID  Player_ForeName  Player_Surname 
    1    Fred    Smith 

Player_Cardsを詳述 - 表含むカードの詳細

Card_ID Card_Name Card_Dmg Card_Attribute Card_Health 
    123  Fire Mage  20   Fire    100 
    345  Water Man  6   Water   200 
    037  Earth Dwarf 10   Earth   150 

プレーヤーそれぞれのカードの新しい行。例:

Player_ID  Card_ID 
    1   123 
    1   345 
    1   037 
+0

特定のデッキ情報を保存することが重要な場合は、他の回答ごとにデッキテーブルを追加します。 – Dekks

関連する問題