Je fais un petit projet perso et je me heurte à un problème que j'arrive pas à résoudre.
Voici ma bdd:
Ce que j'aimerai faire, et je sais pas si avec ma bdd actuelle c'est possible, c'est de simuler une "facture". J'ai une interface graphique :
Et j'aimerai pouvoir insérer dans la bdd tous les articles que le client a choisi (qui seront affiché dans le tableau que vous pouvez voir dans l'interface graphique). Avez-vous des suggestions ? (detail_article dans facture est une clé étrangère qui se réfère à Article, mais je crois pas que c'est la bonne solution..)
Justement, c'est ma question, j'ai ce soucis et je vois pas comment faire :/ Car une facture peut contenir 1 ou x nombres d'articles, et je sais pas comment le représenter :/
En fait il faut s'imaginer que je suis caissier, et que j'entre chaque article dans la facture (le ticket de caisse). Sur la photo de mon interface graphique, c'est ce que je fais avec la partie de gauche, et lorsque j’appuie sur "Ajouter l'article", ça le mets dans le tableau en bas de la photo.
Je vais essayer de faire ça dés que je rentre, et je vous tiens au courant.
Merci !
NB: Ce qui est total de la facture, et quantité, je les mets dans la nouvelle table "facture_article" ?
NB2: Comment créer 2 clés primaires dans une même table ? Je n'ai jamais fait ça ^^'
Ce qui est total de la facture, et quantité, je les mets dans la nouvelle table "facture_article" ?
Quantité oui, je l'ai d'ailleurs précisé ainsi.
En revanche, total non ... c'est un calcul qui n'a pas à être stocké en base de données, mais calculé au besoin dans ta requête SQL de sélection ...
Exemple pour calculer le total d'une facture :
SELECT SUM( FA.quantite * A.prix ) AS total
FROM
facture_article FA
INNER JOIN article A
ON FA.id_article = A.id
WHERE FA.id_facture = 'id facture souhaité'
J'ai fais cette approche: (j'ai crée la table au préalable)
ALTER TABLE `facture_article`
ADD KEY `id_facture` (`id_facture`,`id_article`),
ADD KEY `id_article` (`id_article`);
Et ensuite
ALTER TABLE `facture_article`
ADD CONSTRAINT `facture_article_fk1` FOREIGN KEY (`id_facture`) REFERENCES `facture` (`id_facture`),
ADD CONSTRAINT `facture_article_fk2` FOREIGN KEY (`id_article`) REFERENCES `article` (`id_article`);
Voici le resultat:
C'est correct ?
EDIT:
Je ne te cache pas que je suis vraiment perdu. Ce que j'aimerais faire désormais, c'est que lorsque j’appuie sur "Enregistrer la facture", toutes ces infos soient envoyé dans la bdd. Et le fait d'avoir une nouvelle table, je suis davantage perdu...
Je suis un peu HS, car c'est pour un code en java, si je peux me permettre de poser le problème ici étant donné qu'il y a toujours de la bdd.
Je dois donc dire que lorsque j'appuie sur ce bouton, je récupére tous les champs que l'utilisateur a rempli, et à travers une fonction, je complète la bdd avec ces informations ?
Donc dans la table "facture", je rentre la date, nom de la facture, mais ensuite avec la nouvelle table que dois-je faire ?
Désolé de poser autant de question, mais j'ai besoin d'aide :/
Attention, dans la table facture_article la clé primaire doit être composée sur 2 colonnes, et chacune doit également porter un index pour améliorer le fonctionnement des 2 clés étrangères.
Côté application, lorsque tu valides le formulaire, tu dois :
enregistrer la facture : date, client, mode de paiement
récupérer l'id de la facture créée (LAST_INSERT_ID avec MySQL)
parcourir les lignes d'article ajoutés et insérer dans la table de relation quantité, id_article et id_facture
Je ne pourrais t'aider avec le code Java, mais tu peux créer un sujet dans le forum Java pour obtenir de l'aide, quitte à faire référence à ce sujet pour étayer ta question.
CREATE TABLE facture_article
(
id_facture INT NOT NULL CONSTRAINT fk1_id_facture FOREIGN KEY (id_facture) REFERENCES facture(id_facture)
, id_article INT NOT NULL CONSTRAINT fk1_id_article FOREIGN KEY (id_article) REFERENCES article(id_article)
, quantite` int(11) NOT NULL
, CONSTRAINT pk_facture_article PRIMARY KEY (id_facture, id_article)
)
Qu'en penses-tu ?
Ok pour la partie en java
EDIT: J'arrive toujours pas à les mettre en clé primaire, il n'y a que les clé étrangères que je peux voir dans la structure de la table
EDIT2: Même si j'ai pas réussi à faire ce que tu m'as dit sur les composite, j'ai réussi à mettre des articles dans ma bdd (dans la table facture_article)
N'oubliez pas d'activer les erreurs PDO.