Partage
  • Partager sur Facebook
  • Partager sur Twitter

Liste d'objet en bdd

Sujet résolu
21 mars 2019 à 18:07:01

Bonjour,

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..)

Cordialement

-
Edité par Balaure 21 mars 2019 à 18:16:45

  • Partager sur Facebook
  • Partager sur Twitter
21 mars 2019 à 19:36:03

Bonjour,

Et comment fais-tu quand une facture comporte plusieurs articles ?

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2019 à 16:50:29

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 :/
  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2019 à 17:05:16

Bonjour,

Avant de faire une facture, on fait une commande normalement ... mais passons ...

Si une facture comporte plusieurs articles, c'est une relation n,n donc il faut créer une table de relation :

  • famille ( id [pk], etc. )
  • article ( id [pk], id_famille [fk], etc. )
  • client ( id [pk], etc. )
  • mode_paiement ( id [pk], etc. )
  • facture ( id [pk], id_client [fk], date, nom, id_mode_paiement [fk] )
  • facture_article ( id_facture [pk][fk], id_article [pk][fk], quantite )
  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
22 mars 2019 à 17:15:43

Bonjour,

Tout d'abord merci pour votre réponse.

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 ^^'

-
Edité par Balaure 22 mars 2019 à 17:32:43

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2019 à 17:47:22

Balaure a écrit:

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é'
  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
22 mars 2019 à 18:16:22

C'est noté.

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 :/

Cordialement

-
Edité par Balaure 22 mars 2019 à 19:31:46

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2019 à 19:54:42

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.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
22 mars 2019 à 22:15:01

Merci pour ta réponse.

Comment faire pour quelle soit composée sur 2 colonnes ? Je n'ai jamais fais cela

Merci d'avance

EDIT:

Bonjour, je m'y remets pour la journée ! 

Alors, j'ai toujours pas trouver comment faire pour que la table soit composée de 2 colonnes :(

Ensuite, j'ai bien réussi à faire ton premier point, c'est à dire d'enregistrer la facture. 

J'ai bien réussi a récupérer le dernier id de la facture grâce à LAST_INSERT_ID.

Par contre, je ne vois pas comment parcourir les lignes d'articles ajoutés ?

-
Edité par Balaure 23 mars 2019 à 13:48:52

  • Partager sur Facebook
  • Partager sur Twitter
23 mars 2019 à 15:17:49

Recherche "clé primaire composite".

Sinon, pour parcourir les articles, c'est en java que cela se passe, je te conseille de poster sur le forum java du coup.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
23 mars 2019 à 15:43:50

J'ai trouvé cela sur le net:

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)

-
Edité par Balaure 23 mars 2019 à 17:42:44

  • Partager sur Facebook
  • Partager sur Twitter
23 mars 2019 à 19:08:00

Oui c'est bien cela pourtant.

Si je corrige les deux trois erreurs de syntaxe :

CREATE TABLE facture_article (
    id_facture INT NOT NULL,
    id_article INT NOT NULL,
    quantite INT NOT NULL,
    CONSTRAINT pk_facture_article PRIMARY KEY (id_facture, id_article),
	CONSTRAINT fk_id_facture FOREIGN KEY (id_facture) REFERENCES facture(id_facture),
	CONSTRAINT fk_id_article FOREIGN KEY (id_article) REFERENCES article(id_article)
) ENGINE=InnoDB;
  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
23 mars 2019 à 19:26:00

Est-ce normal qu'il m'affiche désormais qu'une clé étrangère et 2 clés primaires ?

-
Edité par Balaure 23 mars 2019 à 22:28:33

  • Partager sur Facebook
  • Partager sur Twitter
24 mars 2019 à 1:28:26

Non ...

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
24 mars 2019 à 12:08:02

Tant pis alors, je mets comme résolu ce topic ! Merci pour ton aide
  • Partager sur Facebook
  • Partager sur Twitter