【发布时间】:2011-09-05 10:58:41
【问题描述】:
我正在编写一个应用程序来对在线扑克手牌进行分析。我代表一张数字为 1-52 的扑克牌。我这样做的方式可以让我轻松提取卡片的花色和面额。
我正在使用 Java 编写并使用 MySQL 作为数据库。
下面描述了我面临的问题的一个示例。
我将持有超过 100 万手牌,每手牌最多有 10 名玩家,每手牌开始时都有两张牌。
因此仅就起始卡而言,可能存储了 2000 万个值。我需要做以下事情:
- 找出其中一名玩家持有特定牌(比如红桃七)的每一手牌
- 识别玩家持有的两张牌属于特定系列的每一手牌(例如同花连牌、同花牌、至少一张 A 等)。
我认为正确的做法如下:
- 我将有一个表(表 A),它存储游戏中玩家详细信息的详细信息。每位玩家每手一排。
- 要为给定玩家定义两张底牌,我将与表 A 与表(表 B)建立一对多关系,表的结构如下:
- 在表 A 中有一个外键索引来定义与给定手牌和玩家对应的行
- 表 A 中的每一行在表 B 中有两行,每张底牌对应一个。
- 这样我可以在表 B 中搜索我要查找的牌,然后使用关系来查找出现牌的玩家和游戏。
所以这似乎是正确的,但我有效地将表 B 用作索引以方便搜索。
另一种方法是将起始卡片直接存储在表 A 中,作为两个字段,卡片 1 和卡片 2,每个字段都是整数。这样做的一个大问题是搜索会更加复杂,因为我总是必须将两张卡作为不同的字段进行专门检查。还要记住,底牌只是我需要存放卡片的一个地方。实际上,游戏中还有很多其他牌,我需要存储和搜索所有这些牌。这就是为什么我觉得我的方法可能是正确的,因为它已正确规范化。
我的方法有什么缺点吗?
【问题讨论】:
标签: database-design