2011-06-23 60 views
0

我正在设计一个模式来在基于浏览器的游戏中保存玩家数据。关系数据库理论和密钥

我有三个关系。其中两个至少有两个候选键,但是第三个只有三个属性:{playerId,message,date}

这个关系不会保留唯一的行,因为有1..1:0 .. *关系,这意味着每个玩家可以有任意数量的新闻元组。无论如何,我不需要能够唯一地识别任何元组,也没有任何属性实际上可以成为候选者。

我的问题是:我明白关系模型指出不能有重复的元组,每个关系都必须有一个关键字。我的上面的模式与这两个约束相矛盾,但是适用于我的目的。我知道我可以简单地添加一个索引属性(如ID),这是唯一的,但似乎没有必要。我错过了什么吗?

谢谢你的时间。

回答

1

我觉得你缺少的是一个复合主键

在你的情况下,如果你保存得到没有dublicate条目你想要使用复合主键。

但想想同一个玩家在同一日期发送相同的消息.... 在这种情况下,您将与复合主键发生冲突。 作为主键的虚拟唯一ID是一种节省方式。

+0

是的,你说得对。我想过一个复合键,但是当没有属性是候选键时,这是不可能的。在这种情况下,是否有任何真正的优点,使每个元组唯一的ID主键? – Lee

+0

主键的优点是能够识别每个元组。如果你不需要能够识别删除或编辑的原因,那么你不需要它来让你的应用程序运行。但是我总是会定义一个主键来拥有一个“干净”的设计。 – steven

+0

好的史蒂文,这很有道理。感谢您的输入。 – Lee

0

棘手的问题!我没有一个明确的答案,但是我认为如果你对整个元组没有至少一个唯一性限制,你可能会遇到麻烦:想象一些应用程序运行不稳定,并试图将1.000.000.000倍的相同元组插入你的桌子...