Moteur de recherche

Moteur de recherche - SQL/NoSQL - Programmation

Marsh Posté le 15-06-2007 à 15:12:11    

Bonjour,
 
Je compte faire un site qui recense des recettes de cuisine avec un moteur de recherche en fonction des aliments et je me demande pour quelle solution opter pour la base de données (MySQL, et le site utilisera du PHP) entre les 2 suivantes :
 
- mettre la liste des ingrédient de la recette entière dans un champ text et ensuite pour rechercher par ingrédient on fais une recherche tout bête dedans.
 
ou bien  
 
- faire une table ingrédients (id, nomIngrédient), une recette (id, texteRecette) et une table d'association Ingredient_Recette (idRecette, idIngrédient, quantité). Ainsi quand on fait une recherche sur un aliment on récupère son id et on cherche dans la table d'association toutes les recettes qui ont cet ingrédient.
 
La dernière solution me semble plus efficace mais la table Ingredient_Recette risque de contenir énormément d'enregistrements et je ne sais pas si ça peut poser problème, s'il y a une limitation. De plus cette solution est plus complexe à gérer pour la partie où on ajoute des recettes car il faudra rentrer les aliments séparement et séparer également quantité et aliment.
 
Donc voilà laquelle est mieux ? Si la 2eme est vraiment plus efficace vaut-elle le coup d'etre implémentée avec les difficultés qu'elle comporte ?
 
Merci de me répondre.

Reply

Marsh Posté le 15-06-2007 à 15:12:11   

Reply

Marsh Posté le 15-06-2007 à 15:46:38    

la deuxième, sans hésiter un quart de seconde, la première est affreuse pour la recherche.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 15-06-2007 à 18:19:42    

ok et donc il faut que je crée ensuite un index sur idRecette et idIngrédient de la table d'association pour optimiser la recherche c'est ça ?

Reply

Marsh Posté le 16-06-2007 à 11:02:43    

Deamon a écrit :

ok et donc il faut que je crée ensuite un index sur idRecette et idIngrédient de la table d'association pour optimiser la recherche c'est ça ?


étant donné que ce couple est la clé primaire de la table en question, ça me parait évident.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 16-06-2007 à 12:15:18    

Ok merci bien.
 
Et autre question : est-ce possible de gérer facilement les ingrédients dont le nom est parfois au pluriel et parfois au singulier ? Par exemple si on rentre une recette avec 1 pomme et une autre avec 2 pommes il faudrait que les deux soient reliés à l'aliment "pomme". Et si oui comment car là j'avoue que j'ai un peu de mal à voir comment mettre ça en place.

Reply

Marsh Posté le 16-06-2007 à 12:29:07    

bah tu 2 champs dans ta table ingrédients, un pour le singulier, un pour le pluriel...ou alors tu te contentes de mettre un (s) à l'affichage si tu t'en fiches un peu...;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-06-2007 à 10:29:57    

Solution subsidiaire : tu proposes une liste des ingrédients connus plutôt que de laisser la main à l'utilisateur.
 
Du coup, pour simplifier, tu rajoutes une table "catégorie" pour les ingrédients, histoire de pouvoir séparer dans la liste les viandes, les légumes, les condiments, etc.

Reply

Marsh Posté le 18-06-2007 à 18:37:17    

MagicBuzz a écrit :

Solution subsidiaire : tu proposes une liste des ingrédients connus plutôt que de laisser la main à l'utilisateur.


c'est un des intérêts de la 2nde méthode.  :)


Message édité par Deamon le 18-06-2007 à 18:39:47
Reply

Marsh Posté le 18-06-2007 à 19:01:20    

Oui, et ça résoud ton problème de "avec ou sans S" ;)

Reply

Marsh Posté le 18-06-2007 à 23:50:05    

MagicBuzz a écrit :

Oui, et ça résoud ton problème de "avec ou sans S" ;)


non le problème du "s" c'était pour l'affichage de la recette pas pour la recherche.

Reply

Marsh Posté le 18-06-2007 à 23:50:05   

Reply

Marsh Posté le 19-06-2007 à 09:51:54    

Si c'est pour l'affichage, un bête test au niveau de php permettra d'afficher le 's' ou pas selon la quantité.
 
Sur le principe :
 
Si ( quantité > 1 ) alors
  ingrédient = valeur_BDD;
sinon
  ingrédient = valeur_BDD + "s"
Fin si


---------------
Mon blog séduction
Reply

Marsh Posté le 19-06-2007 à 10:21:02    

il faudra quand même un peu plus que ca sinon il va se retrouver avec des 100 gr de sels

Reply

Marsh Posté le 19-06-2007 à 12:10:34    

Exact :jap:


---------------
Mon blog séduction
Reply

Marsh Posté le 19-06-2007 à 12:47:09    

La où ça devient coton, c'est aussi faire la différence entre :
 
1 olive
1 kg d'olives

Reply

Marsh Posté le 19-06-2007 à 13:01:24    

MagicBuzz a écrit :

La où ça devient coton, c'est aussi faire la différence entre :
 
1 olive
1 kg d'olives


 
olives : 1
olives : 1 kg
 
[:doc petrus]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-06-2007 à 14:04:22    

c'est vrai que le choix de tout taper au pluriel: c'est pas bete, sinon faut carrement se garder une table de regle grammaticale, le truc completement con a modéliser ^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed