2013-05-10 202 views
0

我正在为卡片游戏创建一个基于Java的服务器,客户端可以通过它连接到“玩”。每个“游戏”(Java级)拥有一副104张牌(一张正常牌组成两倍)。所以我得到的基本课程是:游戏,卡组,卡片。一场比赛将有一个甲板,一个甲板最多有104个牌。我用Hibernate和PostgreSQL数据库为服务器制作了基础结构。我的问题在于如何建模数据库。如何使用卡片和卡片设计游戏数据库

由于只有52张不同的卡牌,所以没有必要为每张制作52张卡牌“卡座”表格中的甲板。但是,甲板需要洗牌。我想这样做有一些聪明的方法,但数据库建模不是我的强项。

在我的头顶,我想我可以有一个表“卡”有52行,每一行对应一个卡。然后,另一个桌面“Deck”将在每次创建游戏时创建一行,并保存一张数字列表(104个数字),该列表在Card-Table中引用每个卡片ID两次。这听起来像是个好主意吗?我怎么用Java和Hibernate来完成这个任务?

或者是否有其他方式应该这样做?由于有很多纸牌游戏,我猜这已经做过一百万次了,并且有一些解决此问题的最佳实践,但是我一直无法找到它。我很感谢有关此事的任何投入。提前,谢谢!

编辑:我是否已经解决了这个问题,并且应该使用Hibernate插入一个Deck到数据库并让其他数据库处理?

回答

0

我没有看到在存储卡在数据库中的一个点,它只是使事情太复杂。 我会做的只是在名为CardDistribution的java应用程序中创建另一个类,其中包含102个元素的数组。给每个元素一个它所持有的卡的ID。

当你想保存游戏,系列化你CardDistribution对象转换为JSON并在您的游戏表中的列坚持它。

而当你从数据库中读取刚反序列化的CardDistribution JSON成一个Java对象,并使用它。

0

关于RDBMS的一个关键问题(基本上每个JPA提供者都会抱怨,如果你不这样做的话)是,你通常希望为表提供某种唯一键(即使它最终每一个柱)。
此外,SQL有一个“保证”,即如果没有订单明确要求,返回的行会“随机”(这是使优化采取任何快捷键就可以了,这意味着排序可能会意外更改)。

考虑到这一点,Deck可能是最好设置为:

Deck 
----------------- 
gameId -- fk reference to Game.id 
cardId -- fk reference to Card.id 
deckOrder -- order of card in deck for this game 

整个行包括唯一键。

,作为添加行到甲板上......你会发现它最简单的(和“正确随机”),以所有卡添加到一个数组和随机它在Java中 - 随机订购的东西是相当困难的。