2011-06-23 9 views
0

Je suis en train de concevoir un schéma pour contenir les données des joueurs dans un jeu basé sur un navigateur.Théorie de la base de données relationnelle et clés

J'ai trois relations. Deux d'entre eux ont au moins deux clés candidates, cependant la troisième n'a que trois attributs: {playerId, message, date}

Cette relation ne contiendra pas de lignes uniques car il existe une relation 1..1: 0 .. * , ce qui signifie qu'il peut y avoir n'importe quel nombre de tuples de nouvelles pour chaque joueur. Je n'ai pas besoin d'être capable d'identifier de manière unique un tuple et aucun des attributs ne peut en fait être candidat, de toute façon.

Ma question est la suivante: Je comprends que le modèle relationnel stipule qu'il ne peut pas y avoir de tuples en double et que chaque relation doit avoir une clé. Mon schéma ci-dessus contredit ces deux contraintes mais fonctionne pour mon but. Je sais que je pourrais simplement ajouter un attribut d'index (comme un ID) qui est unique, mais cela semble inutile. Est-ce que je manque quelque chose?

Merci pour votre temps.

Répondre

1

Je pense qu'il vous manque une clé primaire composite .

Dans votre cas, si vous enregistrez pour n'obtenir aucune entrée dubloque, vous souhaitez utiliser une clé primaire composite.

Mais pensez à ce que le même joueur envoie le même message à la même date .... Dans ce cas, vous aurez un conflit avec une clé primaire composite. Un identifiant unique virtuel en tant que clé primaire est un moyen d'économiser.

+0

Oui, vous avez raison. J'ai pensé à une clé composite mais quand aucun attribut n'est une clé candidate, ce n'est pas possible. Y at-il un réel avantage à rendre chaque tuple unique avec une clé primaire id, dans ce cas? – Lee

+0

L'avantage de la clé primaire est de pouvoir identifier chaque tuple. Si vous n'avez pas besoin d'être capable de vous identifier pour la suppression ou l'édition des raisons, alors vous n'en avez pas besoin pour faire fonctionner votre application. Mais je définirais toujours une clé primaire pour avoir un design "propre". – steven

+0

OK steven, ça a du sens. Merci pour votre contribution. – Lee

0

Tricky question! Je n'ai pas de réponse claire, mais je pense que vous pourriez avoir des problèmes si vous n'avez pas au moins une contrainte d'unicité sur tout le tuple: imaginez qu'une application fonctionne de manière intempestive et essaye d'insérer 1.000.000.000 fois le même tuple dans votre table ...

Questions connexes