Comment puis-je éviter toute redondance des champs de données dans le jeu de résultats lors de l'utilisation de Jointures?

De jointure suivante est censé récupérer les infos de l'utilisateur ainsi que leurs messages pour les utilisateurs avec un certain statut:

SELECT * FROM user, message WHERE message.user_id=user.id AND user.status=1

Le problème est que toutes les lignes d'un joueur dans le jeu de résultats contient redondant colonnes que répéter les mêmes données sur l'utilisateur (ces champs extraits de l'utilisateur table), uniquement les champs de la table de messages contiennent des informations redondantes. Quelque chose comme ceci:

user.id  username email            message.id  subject
1        jane     jane@gmail.com   120         Notification 
1        jane     jane@gmail.com   122         Re:Hello 
1        jane     jane@gmail.com   125         Quotation
2        john     john@yahoo.com   127         Hi jane
2        john     john@yahoo.com   128         Fix thiss 
2        john     john@yahoo.com   129         Ok
3        jim      jim@msn.com      140         Re:Re:Quotation

Comme vous pouvez le voir beaucoup de données sont redondantes et nous ne voulons pas d'abord trouver les utilisateurs et ensuite aller sur leurs messages en boucle comme des structures ou quelque chose comme ça. Les boucles qui provoquent des micro-requêtes doivent être évités à tout prix.

Je ne m'inquiète pas à propos de la sortie de mon programme, qui est très bien géré dans l'INTERFACE utilisateur. Je pense peut-être le trafic réseau produit en retournant le résultat de cette requête pourrait être sensiblement réduit si d'une certaine façon je peux réussir à éliminer la répétition des données de l'utilisateur dans toutes les lignes relatives à cet utilisateur.

Dans ce contexte ou le format de sortie? Dans quel environnement?
Pardonnez-moi, mais c'est la façon dont les bases de données de travail. Chaque message est différent, de sorte que votre INTÉRIEUR se JOINDRE à l'opération va concerner chaque message à l'utilisateur qui l'a écrit. Les données ne sont pas physiquement redondant, vous êtes seulement de voir le résultat de la JOINTURE INTERNE. Vous devez retourner le résultat tel qu'il est et ensuite de voir comment vous souhaitez afficher partout où vous l'utilisez (UI, rapport, etc.).
Qu'est-ce que votre middleware de base de données access? Plutôt que d'un seul jeu d'enregistrements' de lignes et de colonnes, il peut prendre en charge ğ relationnel ğ jeux de résultats (les jeux de données avec des relations dans ADO.NET) ou hiérarchique, des jeux de résultats (jeu d'enregistrements hiérarchique dans ADO classique).
C'est en effet une bonne façon d'aller. À l'aide de jeux de données, ou (N)Hibernate, iBATIS ou(.NET) ferait tous du groupement et hiérarchique résultat de la création pour vous.

OriginalL'auteur | 2010-07-05