2009-07-28 8 views
0

Je crée un site avec PHP et MySQL. La grande idée est que vous pouvez vous inscrire et vous pouvez ajouter des objets à votre profil. Vous ne pouvez avoir qu'un seul profil, vous pouvez avoir plusieurs objets (en théorie, infinis) et chaque objet peut avoir plusieurs images (en théorie, infinies). Je me demande comment mieux implémenter ceci dans MySQL. J'ai eu une formation de base sur MySQL, en ce que je sais comment faire une table, quels sont les différents types de données, mais des choses comme les clés étrangères sont quelque chose qui est enterré dans le dos de ma mémoire. J'ai regardé ça, mais la compréhension est un peu lente.Meilleur moyen de lier plusieurs éléments à des éléments individuels dans MySQL

Je pourrais simplement faire 3 tables:

  1. USERS_NAME + user_id
  2. ITEM_ID + user_id
  3. ITEM_ID + Picture_ID

Inconvénient est que pour chaque action de recherche unique, ou vue de profil ou même la vue de l'article, je serais interroger tout le contenu des deux dernières tables, ce qui semble être exagéré.

Quelqu'un peut-il m'aider ici?

Répondre

2

Votre schéma est plutôt bon. Maintenant, vous craignez que vous interrogiez tout le contenu des tables. Ce n'est pas du tout vrai, compte tenu d'un bon index sur vos clés primaires et étrangères!

select 
    u.users_name, 
    i.itemid 
from 
    users u 
    inner join items i on 
     u.user_id = i.user_id 
where 
    u.user_id = 1234 

Cet ensemble de lignes retournerait très rapidement, même avec des centaines de milliers de lignes! La raison en est que la requête utiliserait un index pour rechercher la ligne usersuser_id est. De même, une fois que vous le joignez à la table items. Par conséquent, il suffit de deux recherches très rapides pour trouver tous les éléments que vous recherchez, et il ne sera jamais nécessaire d'analyser les tableaux.

SQL est absolument optimisé pour ce genre de choses. S'il vous plaît en profiter!

+0

oooo, une jointure interne ... Je n'ai jamais été aussi loin dans l'apprentissage de SQL – KdgDev

0

Est-il juste de supposer qu'un élément ne peut être associé qu'à un seul utilisateur? Si oui, votre solution est correcte. Une relation un-à-plusieurs doit être définie avec celle (utilisateurs) listée dans une table et les nombreux (éléments) listés dans une autre mais identifiés en utilisant l'identifiant de plusieurs et l'identifiant de chacun. Parce que, ce faisant, vous avez limité les lignes que SQL doit rechercher pour trouver l'élément, disons, lié à un utilisateur, vos requêtes devraient être relativement rapides.

En bref, vous avez raison.

+0

En effet, aucun article ne peut appartenir à plusieurs personnes. Un article a 1 utilisateur, période. Si des éléments identiques existent, c'est une coïncidence et ils sont séparés par des ID de toute façon. – KdgDev

Questions connexes