Bonjour,
Voici le cahier des charges : Je dispose d'une base de données pour gérer les données d'un jeu. Dans ce jeu il y a des cités et des ressources et des batiments. Chaque cité est composé de constructions et de stock.
Mon schéma est celui-ci
Pour la quantité de ressource stockée dans chaque cité, je mémorise cela dans la table stock. Et pour les batiments de chaque cité, je mémorise cela dans la table construction.table cite(id_cite,...)
table ressource(id_ressource,cod_ressource)
table batiment(id_batiment,cod_batiment)
Pour connaitre le cout de construction d'un batiment en ressource, je fais appel à la table couttable stock(id_cite,id_ressource,n_stock)
table construction(id_cite,id_baiment,n_construction)
Pour le moment quand la cité 47 construit le bâtiment numéro 3, la méthode est la suivante :table cout(id_batiment,id_ressource,n_cout)
Une première requête vérifie que la cité possède toutes les ressources nécessaires.
Une requête récupère la quantité de chaque ressource nécessaire pour la construction.
(exemple : 24 bois (id 1), 350 sous(id 2), 17 pierres (id 3))
pour chaque ressource nécessaire, un curseur met à jour la table stock et décrémente l'enregistrement n_stock le stock. Donc dans notre cas cela fait trois requêtes. Mais pour certains bâtiments je peux avoir 20 à 25 ressources nécessaires...
Une dernière requête met à jour (incrémente) dans la table construction le champ n_construction de l'enregistrement ayant pour clef cité 47 et batiment 3.
Donc ma question est : Voyez-vous comment je peux supprimer ce curseur qui génère de nombreuses requêtes et le remplacer par une seule requête de mise à jour (un seul UPDATE sur la table stock en somme).
Mon moteur est MySQL, mais cela on s'en moque, je cherche à toujours suivre les normes SQL.
Partager