2012-04-24 3 views
1

J'exécute une tâche planifiée qui vérifie la valeur d'un attribut à une heure donnée chaque nuit. Mon plan est de construire un frontend basé sur les valeurs retournées.Comment attribuer un ID à un groupe SQL Server

Pour le moment, je renvoie plus de 800 lignes dans ma base de données par nuit car il y a une telle quantité de données à retourner. L'une de ces colonnes est la date à laquelle la requête a été exécutée - il m'a semblé redondante car, pour chaque groupe d'attributs (c.-à-d. Chaque nuit où la tâche planifiée est exécutée), cette valeur dateTime sera la même.

Quelle est la meilleure approche pour supprimer cette date redondante/répétée de ma base de données?

Au moment où j'ai colmn rubriques:

Id -- Name -- AttributeIMeasure -- dateRan 

Merci pour l'aide!

+0

Que faites-vous avec les données renvoyées par la requête? Le stockez-vous dans la base de données, l'écrivez-vous dans un fichier ou faites-vous quelque chose de similaire? – dasblinkenlight

+0

Les données renvoyées par la requête constituent les données stockées dans Name et AttributeIMeasure. Donc je le copie d'une base de données à une autre (la base de données que je copie est dynamique et je souhaite la suivre au fil du temps). –

Répondre

3

Je serais tenté de créer une table séparée, RunInformation, avec une colonne de clé primaire, Id, et une colonne RunDate:

Id -- RunDate 

Vous pouvez ensuite remplacer la colonne dateRan de votre table avec une référence au tableau RunInformation. Cela vous permettra de stocker des informations supplémentaires sur la course à l'avenir, si les besoins se présentent.

Id -- Name -- AttributeIMeasure -- RunInformationId 
+0

Je vois, mais cela ne réduirait pas les données redondantes stockées, n'est-ce pas?Puisque, un jour donné, chaque exécution de ma requête retournera une liste de lignes avec Name et AttributeIMeasure, mais pour toutes les lignes retournées, le RunDate sera le même! :) –

+0

Ahh je vois ce que tu veux dire maintenant. Cela réduirait les redondances. Quel type de référence dois-je ajouter au tableau RunInformation? –

+1

Vous devez ajouter "RunInformationId" en tant que clé étrangère dans votre table existante. – weenoid

1

Je ne supprimerais pas cette redondance.

Pouvez-vous être certain que vous mettrez à jour jamais seulement une partie d'un groupe?
- Une erreur ou une erreur quelconque?
- Une modification des exigences dans le futur?

En outre, quel est le réel inconvénient de la redondance? Quelle est la question essayez-vous de résoudre?


Si vous vraiment besoin de faire cela, alors vous devez simplement une façon de cartographie attribue à des groupes.

Créez une table attribute_groups (avec les champs id et dateRan au minimum) et ajoutez un champ attributeGroupID à la table d'origine.


Mais je ne vois toujours pas comment l'augmentation de la complexité du schéma, joignez-vous besoin supplémentaire pour obtenir la valeur DateRan, et l'augmentation des contraintes, valent la peine dans ce cas.

+0

Merci pour la réponse. Je souhaite construire un frontal basé sur les valeurs que j'ai stockées dans ma base de données. Il sera en cours d'exécution tous les soirs pour probablement les deux prochaines années, en retournant ~ 800 résultats par nuit. Toutes ces données sont nécessaires, sauf pour le dateTime. J'ai très peu d'expérience dans la programmation à grande échelle de cette nature, mais je supposais que, avec toutes les données stockées, il serait important si je pouvais supprimer une colonne de chaque donnée si possible :) –

+1

Je voudrais mettre en garde vous de ne pas vous soucier de stockage comme ça. Cela ne vaut probablement pas la peine de se préoccuper de l'espace et de l'efficacité à une si petite échelle. Sauf si vous l'agrandissez à des millions d'enregistrements, la différence d'espace sera négligeable. – Sorpigal

+0

Merci beaucoup pour les conseils, c'est très utile à savoir :). –

Questions connexes