2010-12-15 88 views
0

Je construisais un lecteur RSS, qui stocke les articles tirés dans une base de données (SQLite en particulier, mais je ne pense pas que cela compte). Quoi qu'il en soit, quand je l'ai conçu et codé à l'origine, l'idée était de créer une nouvelle table pour chaque flux auquel l'utilisateur est abonné, et d'avoir une grande méta-table. Après avoir lu un peu plus sur la gestion de base de données, j'ai trouvé une autre façon de gérer cela était d'avoir deux tables, la table meta, et une table pour chaque élément du flux rss, et dans cette table, une colonne avec l'ID du nourrir d'où il vient.Gestion de base de données (SQLite) et génération de tables

Alors, y a-t-il une raison majeure pour laquelle je devrais changer le modèle que j'utilise pour être une grande table d'éléments, plutôt que d'en avoir un pour chaque flux auquel l'utilisateur est abonné?

+0

Je pense que votre question a une faute de frappe. Il devrait lire "une autre façon de gérer cela ... la table meta, et une ligne pour l'élément de tous les flux rss ... et une colonne indiquant de quel flux RSS il vient". – Tim

Répondre

2

D'après ce que vous avez écrit:

pour créer une nouvelle table pour chaque flux l'utilisateur est abonné à

Dans un monde de base de données, au moins pour moi, c'est fou. Il suffit d'essayer d'imaginer que l'utilisateur veut s'abonner à 1.000 flux rss, créerez-vous 1.000 tables? En aucune façon.

Vous pouvez mettre vos données en relation grâce à la clé primaire et aux clés étrangères pourquoi n'utilisez-vous pas cette force.

D'abord, il vous sera plus facile d'écrire votre requête. Vous n'aurez pas à vous soucier du nom de la table. vous aurez une table rssfeed et un poste de table alors tout sera lien togheter.

Passez du temps à modéliser votre base de données. Dans votre cas, ce ne sera pas si difficile.

Vous pouvez avoir besoin de 3 à 4 tables pour gérer rssfeeds, post et metadatas. Posez une autre question ici: Comment concevoir une base de données pour ce besoin?

Les gens vont vous aider avec plaisir.

Posez votre question, vous économiserez du temps, de l'argent (même si ce n'est pas à son sujet), et les meilleures pratiques (en évitant la conception moche).

+0

+1 et je ne lis que le mot «fou». –

1

Il s'agit d'une question de simplicité de codage par rapport à l'avantage probablement faible d'avoir une table par flux RSS. Avoir une table (plutôt qu'une par flux) signifie que votre code n'a pas à faire de DDL et que vous pourriez plus facilement faire une recherche croisée RSS; mais les requêtes et les mises à jour peuvent être un peu plus lentes. J'opterais probablement pour une seule table avec une colonne Feed (indexée) pour simplifier les recherches.

1

La manière typique de stocker de telles données (en supposant que la structure des données est la même pour tous les flux) est en effet d'avoir une seule table pour tous les flux.

Pourquoi? Parce que cela vous permettra d'accéder à tous les flux de la même manière. Par exemple, disons que vous voulez combiner tous les flux dans une seule vue, ou calculer un type de statistique sur tous vos flux. En les plaçant tous dans un seul tableau, cela sera extrêmement simple; les avoir tous dans des tableaux différents rendra cela beaucoup plus complexe, sans aucune valeur ajoutée (pour autant que je puisse voir).