2011-06-23 95 views
0

我正在設計一個模式來在基於瀏覽器的遊戲中保存玩家數據。關係數據庫理論和密鑰

我有三個關係。其中兩個至少有兩個候選鍵,但是第三個只有三個屬性:{playerId,message,date}

這個關係不會保留唯一的行,因爲有1..1:0 .. *關係,這意味着每個玩家可以有任意數量的新聞元組。無論如何,我不需要能夠唯一地識別任何元組,也沒有任何屬性實際上可以成爲候選者。

我的問題是:我明白關係模型指出不能有重複的元組,每個關係都必須有一個關鍵字。我的上面的模式與這兩個約束相矛盾,但是適用於我的目的。我知道我可以簡單地添加一個索引屬性(如ID),這是唯一的,但似乎沒有必要。我錯過了什麼嗎?

謝謝你的時間。

回答

1

我覺得你缺少的是一個複合主鍵

在你的情況下,如果你保存得到沒有dublicate條目你想要使用複合主鍵。

但想想同一個玩家在同一日期發送相同的消息.... 在這種情況下,您將與複合主鍵發生衝突。 作爲主鍵的虛擬唯一ID是一種節省方式。

+0

是的,你說得對。我想過一個複合鍵,但是當沒有屬性是候選鍵時,這是不可能的。在這種情況下,是否有任何真正的優點,使每個元組唯一的ID主鍵? – Lee

+0

主鍵的優點是能夠識別每個元組。如果你不需要能夠識別刪除或編輯的原因,那麼你不需要它來讓你的應用程序運行。但是我總是會定義一個主鍵來擁有一個「乾淨」的設計。 – steven

+0

好的史蒂文,這很有道理。感謝您的輸入。 – Lee

0

棘手的問題!我沒有一個明確的答案,但是我認爲如果你對整個元組沒有至少一個唯一性限制,你可能會遇到麻煩:想象一些應用程序運行不穩定,並試圖將1.000.000.000倍的相同元組插入你的桌子...