这是一个数据结构/映射问题。我正在使用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