これはデータ構造/マッピングの質問です。私はMSSQLを使用していますが、.NETとEF(そしてそれが重要であればMVCもあります)。私はカードのデッキを表すテーブルを持っています。カードの状態は、次のとおりです。データ構造 - カードの表現
- フェイスダウンデッキに (破棄)デッキで
- フェイスアッププレイヤーの手でプレーヤー
- の前で
... Xプレーヤーがいます。私は自分のユニークなキーで、選手を表すテーブルを持っています。各プレイヤーは1つのゲーム内にあり、1つのデッキは1つのゲーム内にあるものとします。
最初は、プレイヤーとカードの間に1対多の関係があり、データベースの外部キーによって強制されると考えました。プレイヤー1Pは、カード1C、2C、および4Cを持っているので、PlayerIDの下にカード1C、2C、4Cおよび1Pがあります。次に、カードがフェイスアップかフェイスダウンかを表すビットフィールドがあります。これは状態3と状態4で機能します。
状態1と状態2はどのように処理する必要がありますか?いくつかのオプション:
- カードテーブルのPlayerIDをヌルにします。私がEFを使用していたとき、私は外部キーの制約にぶち当たっていました。 編集:私は外部キーの制約に遭遇していましたが、今試したところ、期待通りに動作しているように見えます。
- 「デッキ」と呼ばれるダミープレーヤーを作成し、このプレーヤーに状態1と2のすべてのカードを割り当てます。しかし、これは優雅に見えませんでした。デッキプレイヤーには私が扱いたくない荷物がたくさんありました。複数のゲームをやり始めると、複数のデッキプレイヤーが必要になります。
- データベース内の外部キーをスクラップし、PlayerIDをヌル可能にします。コードに制約を適用します。しかし、私はPlayer.Cards()のようなものを特別な拡張コードなしで行うことはできません。
- "IsInDeck"と "IsDiscarded"(または複数の状態を表すいくつかのフィールド、0の場合:デッキ内、1:手前、2:プレーヤーの前、3:破棄)。そうすれば、カードが「破棄」状態の場合、PlayerIDが何であるかは本当に気にしません。
- 私が考えていない他のオプションもあります。
アイデア?前もって感謝します。
ポイント1の問題は何ですか?この関係は、EFでサポートされているプレイヤーとカードの間の0..1対多(カードは*オプションで*プレーヤー)です。ポイント1と4を組み合わせることで、私には妥当なものに見えます。 – Slauma
あなたは知っています、私は元々それを試み、問題に遭遇しました。しかし、今、それを実行すると、それは動作するように見えます。 – bryanjonker