Liaison table mysql

vqlee Messages postés 3 Statut Membre -  
mamiemando Messages postés 34188 Statut Modérateur -
Bonjour à tous,

Voilà je bloque aujourd'hui car je voudrais effectué une relation entre deux 3 tables dans une base de donnée Mysql.
J'ai un table articles//entree//sortie : je voudrais que la table entree s'ajoute sur la table articles et que la table sortie se retire de la table articles (c'est pour une gestion de stock via formulaire)

Il y à surement des erreur je sais! (je débute..)
Petite précision je veux juste une liaison entre les tables de quantités.

Je vous met ma base complète et le formulaires de sortie (celui d'entrée et le même):

-- phpMyAdmin SQL Dump
-- version 3.4.10.1deb1
-- https://www.phpmyadmin.net/

1 réponse

mamiemando Messages postés 34188 Statut Modérateur 7 890
 
Si j'ai bien compris ton problème, il faut en fait décomposer ton code en deux fonctions :
- une qui gère les entrées (qui transvase un record de la table entree vers la table article)
- une qui gère les sorties (qui transvase un record de la table entree vers la table sortie)

Dans les deux cas tu vas faire des opérations sur deux tables alors que c'est une opération "atomique" (comprendre : les opérations sur les deux tables doivent toutes les deux absolument être faites, sinon un article a "disparu" ou est "apparu" et tes données seront incohérentes). En base de données, ceci se fait au travers d'une transaction. Dans mysql, le moteur par défaut (myisam) ne supporte pas les transaction, mais il est possible de créer ta table avec le moteur innodb.
http://docs.postgresqlfr.org/8.3/sql-createtable.html

Maintenant, je pense qu'il y a une approche bien moins coûteuse en terme de requêtes, qui évite de faire une transaction, et qui te gagne de la place.

Il suffit simplement créer juste une table article à laquelle tu vas ajouter une colonne (appelons là "state") qui stocke une énumération (ça revient à créer un type que tu utiliseras dans ta table pour décrire la colonne "state") pouvant valoir une constante définie dans l'enum (tu définis les noms que tu veux, par exemple : ENTREE, SORTIE, EN_STOCK).
http://docs.postgresqlfr.org/8.3/sql-createtype.html

Autre chose : évite les varchar(255), ça coûte beaucoup de place et il y a sans doute des types sql bien plus adaptés (integer pour les entiers, real pour les réels, timestamp without time zone pour les dates, énumérations comme on vient de le voir pour les "états", etc...).

Bonne chance
0