這是一個數據結構/映射問題。我正在使用MSSQL,與.NET和EF(和MVC,如果這很重要)。我有一張表,代表一副撲克牌。卡片的狀態是:數據結構 - 卡的表示形式
- 面朝下甲板
- 面朝上甲板(丟棄)
- 在玩家
- 前在玩家手中
...可以有X個球員。我有一張表格,代表球員,並擁有自己獨特的關鍵。假設每個玩家都在一場比賽中,並且一副牌是在一場比賽中。
起初,我以爲會有玩家和卡之間的一個一對多的關係,通過在數據庫中的外鍵執行。玩家1P具有牌1C,2C和4C,所以牌1C,2C,4C和玩家ID下的「1P」。然後有一個字段來表示卡片是面朝上還是面朝下。該工程爲國家3和國家4
我應該如何處理狀態1和2?一些選項:
- 使卡表上的玩家ID可以爲空。當我使用EF時,我遇到了外鍵約束。 編輯:我遇到了外鍵約束,但是當我現在嘗試它時,它看起來像它所期望的那樣工作。
- 創建名爲「Deck」的虛擬播放器,並將狀態1和2中的所有卡分配給該播放器。但是,這看起來並不高雅。甲板球員有很多我不想處理的其他包袱,如果我開始做多個遊戲,我需要多個甲板球員。
- 廢棄數據庫中的外鍵,並使PlayerID爲空。在代碼中強制約束。但是,我不能像Player.Cards()那樣做一些沒有額外擴展代碼的東西。
- 有兩條以上的位字段:「IsInDeck」和「IsDiscarded」(或一些字段,它表示多個狀態,像一個int是0:在甲板; 1:在手; 2:在播放機的前面; 3:丟棄)。這樣,如果卡處於「丟棄」狀態,我們並不關心PlayerID是什麼。
- 其他一些我沒有想到的選項。
想法?提前致謝。
什麼用點1的問題?該關係將是EF支持的玩家和卡之間的0..1對多關係(卡有*可選*玩家)。第1點與第4點相結合對我來說看起來很合理。 – Slauma
你知道,我最初嘗試過並遇到問題。但現在運行,它看起來像它的作品。 – bryanjonker