Conception de database de nouvelles pour une application de bureau

Je fais une application qui traitera une grande partie de l'information. Cette information a été récupérée à l'aide de certains robots d'exploration Web et concerne des nouvelles, contenant des données telles que le titre des nouvelles, l'URL, la date de publication, la catégorie et le contenu. Les données analysées sont au format XML et je chargerai ces informations dans mon application.

A partir de là, 10 users traiteront toutes les nouvelles et marqueront la catégorie des nouvelles manuellement en lisant le titre. J'ai utilisé 9 catégories principales à utiliser, et pour chaque nouvelle, les users décideront de 0 à 5 combien cette nouvelle appartient à chaque catégorie.

Les users searchront également les nouvelles par titre et décideront si cette nouvelle discute du même événement qu'une nouvelle, ou si cette nouvelle est similaire à une autre (comme une nouvelle sur un match de football à 15 heures et des nouvelles sur un match de football à 17 heures).

Je n'ai aucun problème à faire l'application elle-même, j'ai juste besoin d'aide pour concevoir une / plusieurs tables qui peuvent relier les nouvelles qui parlent d'events similaires ou du même événement, car il peut y avoir beaucoup de nouvelles qui peuvent parler du même événement.

Jusqu'à présent, j'ai fait quelque chose comme ça:

Nouvelles de la table

ID Title URL PublicationDate NewsContent 

Catégorie de tableau

 NewsID User_ID Economy Politics Present_Day Sport Technology Showbiz Culture Region World 

Utilisateur de table

 ID FirstName LastName 

Chaque champ de catégorie dans la table Catégorie contient un type de données tinyint (j'utilise SQL Server ) et j'ai limité les valeurs que l'user peut saisir via une contrainte de vérification afin de permettre des valeurs de 0 à 5. Je ne sais pas si c'est la bonne approche jusqu'ici pour la design de la database, et j'ai besoin d'append la / les table (s) qui permettent d'append des informations sur des events similaires, comme une table Similar_News contenant des champs comme News_ID, SimilarNews1_ID, SimilarNews2_ID et ainsi de suite, et doivent contenir les informations sur l'user "dit ceci", mais cela me semble un design imparfait.

Toute aide est appréciée, merci.

Voici quelques suggestions. Dans la table CATEGORY, vous avez créé 9 colonnes différentes (économie, politique, etc.). Et si quelques jours / mois / années en bas de la ligne il y a une nouvelle catégorie. Dans ce cas, vous devrez modifier la design de votre database. Au lieu de cela, vous pouvez avoir la structure suivante de votre table CATEGORY.

 CategoryId Category 

Et disposez d'une autre table pour stocker la catégorisation des nouvelles.

 Table: NewsCategory NewsId CategoryId CategoryWeight (This will store the rating from 1-5) 

Si l'user estime qu'une nouvelle n'appartient pas à une catégorie particulière, aucune ligne ne sera insérée dans cette table pour cette catégorie. Une telle structure vous donnera plus de flexibilité pour insert de nouvelles catégories à l'avenir sans changer la design de la database. Il vous suffit d'insert de nouvelles lignes dans la table Category.

Pour stocker des nouvelles similaires, je reorderais l'une des approches suivantes.

Créez un événement de table et stockez les détails de l'événement dans cette table.

 EventId EventDescription Sample Data EventId: 55 EventDescription: Euro 2016 Belgium vs Italy 

Vous pouvez maintenant inclure cet EventId dans votre table News. De cette façon, vous pouvez tirer toutes les nouvelles qui sont liées à cet événement.

Créer une table Similar_News avec n champs pour stocker le News_Id similaire ne semble pas une bonne idée. Combien de champs souhaitez-vous créer? 3? dix?

Vous êtes en train de modéliser une relation de type m, donc je n'utiliserais que deux champs (trois si vous voulez stocker l'identifiant de l'user). Par exemple, si Nouveau 1 est similaire aux nouvelles 2 et 3. Et 3 est similaire à 4, vous insérez les lignes:

 New_ID SImilar_New_Id -------------------------- 1 2 1 3 3 4 

Une autre approche consisterait à utiliser une database NOSQL pour stocker des structures flexibles, par exemple:

 "News":{ "User_Id":1, "Category"{ "Economy":3, "Politics":4 }, "Similar_News":[1,2,3] }