2009-04-09 9 views
2

L'application gère les utilisateurs et les objets, les utilisateurs évaluent les objets avec 3 caractéristiques (un taux par fonctionnalité).Création d'une base de données pour un système de classification

EDIT: la dernière phrase est peu claire: par des caractéristiques que je veux dire critères partagés par tous les objets

Comment concevoir efficacement une base de données pour un tel système? Quelles sont les meilleures pratiques pour concevoir une base de données traitant d'un système de notation?

ce que je pensais:

Tables:

  • utilisateurs
  • objets
  • feat1rates
  • feat2rates
  • feat3rates

et relations: Un objet a beaucoup

  • feat1rates
  • feat2rates
  • feat3rates

Un utilisateur a beaucoup

  • feat1rates
  • feat2rates
  • feat3rates

Répondre

8

En supposant que vous n'allez pas augmenter ou diminuer le nombre de fonctions de notation pour évaluer, je ferais une seule table des notations qui permettrait de suivre l'utilisateur, le produit, et trois colonnes (une pour chaque fonctionnalité)

Vous avez donc votre table Utilisateurs, une table Objets et votre table des classifications qui a les ID utilisateur et ObjectID comme clé primaire combinée, de sorte que vous appliquez la classification par objet par utilisateur.

4

Conception très étrange, je dois dire. Considérez:

Object: ID, ... 

// Provided features cannot be shared between objects 
ObjectFeature: ID, ObjectID, ... 

User: ID, ... 

UserObjectFeatureRating: UserID, ObjectFeatureID, Rating 
+0

il n'était pas clair mais les caractéristiques sont partagées par tous les objets, je viens de mettre à jour la question, merci quand même pour la réponse complète –

7

Vous souhaitez encapsuler des données de telle sorte que chaque table contienne uniquement des informations directement liées à ce dont vous avez besoin. Créez des tables de liaison pour fournir des relations entre différents ensembles de données (dans ce cas, les utilisateurs et les objets).

je créerais les tableaux suivants:

utilisateur - les informations de base de l'utilisateur: login, mot de passe, ID utilisateur, tout ce que vous avez besoin.

Objet - l'objet à évaluer: son nom/ID et ses attributs.

Fonctionnalité - une table décrivant un type de fonction, avec un nom/identifiant de fonction quelconque. Cela peut commencer avec vos trois types principaux, mais vous pouvez toujours développer/modifier ceci. Vous pouvez également personnaliser les fonctionnalités que chaque objet aura à sa disposition.

ObjectFeature - une table de liaison pour l'objet et la fonction. Contient la clé primaire de chaque table, créant une relation plusieurs-à-plusieurs entre les deux.

UserRating - une autre table de liaison, entre ObjectFeature et l'utilisateur. Contient les clés primaires de ces deux tables, ainsi que la note attribuée. D'un point de vue relationnel, c'est une meilleure façon d'organiser les données que ce que vous avez présenté. Grâce à sa conception, il indique clairement comment chaque ensemble de données est connecté et rend l'évolutivité (par exemple en ajoutant des caractéristiques supplémentaires à évaluer, ayant différents objets ayant des caractéristiques différentes à évaluer) beaucoup plus propre.

+0

merci pour la réponse mais les caractéristiques sont les mêmes pour tous les objets, je viens mis à jour la question –

Questions connexes