2016-12-22 10 views
0

私はオンラインカードゲーム(ハートストンのようなもの)のためのデッキビルダーで作業しています。私は自分のデータベースをどのように扱うべきかについてアドバイスを求めています。デッキビルダーのデータベースへのアドバイス

すぐに要約すると、各カードはコモン/アンコモン/レア/伝説/無限になります。

私は1つのテーブルを作成する必要がありますが、私は私はこのような各カードのために無限/伝説的/レア/珍しい/共通を書くつもり列珍しい(VARCHAR)を追加するカードと呼ばれますか?

card -> id, name, class, type, rarity (VARCHAR), cost, attack, defense 

または私は2つのテーブルを作成する必要があり珍しい(INT)カードと呼ばれ、別のテーブルには、私はすべての希少性をリストアップし、私のカード表に自分のIDを使用希少と呼ばれますこのような ?

card -> id, name, class, type, rarity (INT), cost, attack, defense 
rarity -> id, name 

また、これらのオプションのいずれかは、多言語の目的に適しているのでしょうか、それとも基本的に同じですか? (私は前に自分で多言語ウェブサイトを作成したことがないので、それはばかな質問だ場合、私はごめんなさい)読書:)

答えて

0

ため

おかげでフラットな構造が高速で、かつ2番目のオプションがないことを考えてみましょう本当に何かをして、最初のものと一緒に行く。

card -> id, name, class, type, cost, attack, defense 
rarity -> id, name 
Card_rarity --> card_id, rarity_id 
+0

したがって、追加のタブがあるにもかかわらず、あなたのソリューションは私がリストした2番目のものよりも速くなりますか? また、他の要因(クラス、生き物の種類など)があるため、1要因につき2つのテーブルが増えることになります。 – Tokipudi

+0

@Tokipudiいいえ、最初のフラットな構造は速いです。正規化されたアプローチは、データの完全性の点で優れています。 [this](http://sqlmag.com/database-performance-tuning/sql-design-why-you-need-database-normalization)を参照してください。正規化されるための完全な理由 – JohnHC

+0

この記事(および上の関連するもの)、たとえフラットが高速であっても、それは十分に「信頼できる」ものではなく、頻繁に使用すべきではありません。だから私はあなたが説明したように、感謝します。 – Tokipudi

0

あなたがCHARとして希少性を途中で行くと、セットアップすることができます(3)その後、省略形を使用します:COM UNC RAR LEG INF

あなたの第二のテーブルがあるべきあなたが試みることができる、と述べた

他の列挙値のための普遍的なルックアップテーブル(クラス、タイプ)

LOOKUP_ID CHAR(8)  -- PK class,type,rarity 
CODE CHAR(3)   -- PK key code 
LANG VARCHAR(10)  -- PK e.g. en-US 
LABEL VARCHAR(255) -- Short label for UI components 
FULLTEXT VARCHAR(255) -- Full description for help etc... 

サンプル・データ

RARITY COM  en Common Common card 
RARITY COM  fr Commune Carte commune 
CLASS  COM  en Combat Combat has both defence and offence stats 
CLASS  COM  fr Combat Les cartes combat possèdent des stats défence et offence 
+0

私は実際にあなたが言っていることを理解していません(私が学校でsqlを持ってからしばらくしていました^^) これは基本的に私が説明したのと同じですが、INTの代わりにabreviations、 LANGは私にどの言語を選んでもらうことができます。しかし、私はこの2番目の表から他のすべてを理解しているとは思わない。 'LOOKUP_ID'と' CODE'は何ですか? また、正規化された方法で@JohnHCを記述し、後で多言語の部分を処理できますか? – Tokipudi

+0

クラス= COMbatと希少= COMmonがあるとします。あなたは "辞書"テーブルの両方でそれらを区別する必要があります – Stavr00

+0

ああ大丈夫。だから、私は必要なすべての言語であらゆる希少性/クラス/タイプの1つのテーブルになります。 私の**カード**テーブルでは、それらをフランス語と英語にしたい場合は、LANGの列で2枚すべてのカードを作成する必要がありますか? ご迷惑をおかけして申し訳ございません。 – Tokipudi

関連する問題