2014-05-18 1 views
0

Contexte: Les utilisateurs créent des défis pour un sujet, niveau, dans une ville, un certain jour à un moment donné.Avoir des enregistrements en double sur une base de données, est toujours faux?

L'utilisateur peut avoir plus d'un défi du même sujet, du même niveau, dans la même ville, le même jour et le même temps (les défis étant joués simultanément).

Les défis peuvent être créés un à la fois.

Sur ma table actuelle, j'ai des enregistrements en double pour cette situation (avec une valeur de clé primaire différente). Est-ce mal? Comment devrait-il être?

Tableau défis:

id_challenge INT (pk auto increment) 
id_subject INT 
id_level INT 
id_city INT 
id_user INT 
date DATE 
time TIME 
comment VARCHAR(100) 
+0

En réalité, les entités que vous essayez de modéliser sont des éléments individuellement identifiables et les faits que votre base de données enregistre à leur sujet sont des faits distincts. Si une table duplique ces faits, alors ce n'est pas une représentation vraie et précise de la réalité. – sqlvogel

+0

Si les valeurs de clé primaire diffèrent, les lignes ne sont pas techniquement "dupliquées". La vraie question, bien sûr, est de "replier" plusieurs lignes de ce genre en une, et cela est déterminé par vos règles métier (c'est-à-dire qu'aucune des deux options n'est "absolument" erronée - cela dépend de ce que vous essayez d'accomplir). –

Répondre

1

Techniquement, je ne crois pas que ces documents sont « en double » en soi, comme ils font référence à deux entités distinctes - même si les comment sont identiques. Je fais bien sûr référence au cas où les contestations n ° 79 et n ° 80 sont traitées séparément, même si elles contiennent les mêmes données. C'est-à-dire, sur une liste des défis d'un utilisateur auquel ils participent, ils pourraient énumérer les deux défis comme deux lignes séparées. La même métaphore s'étend à une liste de défis dans une ville.

Si, toutefois, vous vous retrouvez à regrouper, compter ou trier ces lignes pour supprimer les doublons, c'est une odeur. Même si l'interface vous permet seulement de créer un à la fois, chaque nouvelle combinaison serait plus un "profil" qui peut être invoqué plusieurs fois. Stocker une quantité ou avoir un parent "profil de défi" table peut être une meilleure option. En outre, si le nombre de lignes "en double" est exprimé en millions pour chaque combinaison donnée, vous pouvez constater une certaine taille en forçant le problème, en les déclarant en double et en normalisant. Mais même alors, le stockage est bon marché et avec une table ce petit un million de disques est seulement quelques MB.


Mais ... à mon humble avis le fait que les utilisateurs créent plusieurs lignes une par une de cette façon peut indiquer quelque chose qui doit être repensée - peut-être à la fois à l'avant et à l'arrière extrémités.

Questions connexes