[..] Tables pour une caisse

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

[..] Tables pour une caisse

#1

Message par ricky »

Hello,

je dois faire un petit programme pour la gestion d'une petite caisse d'un troc, mais j'ai de la peine avec les bdds. Bien entendu, j'aimerais utiliser SQLlite. J'avais pensé au ini, mais ça devient trop lourd et trop de fichiers.
Pour cela, j'ai besoin de votre aide.

Voilà ce que j'ai besoin, je dois avoir une table table avec les clients (Nom, prénom et numéro de client) et une avec les articles liés au client (numéro client, prix article, quantité vendue).

Je dois pouvoir rassembler deux tables (2 ou plusieurs caisses), récapitulatif final pour chaque client, somme totale par client et pour la caisse et s'il y a un problème avec un article pouvoir ajouter des remarques, qui peut m'aider?

Merci d'avance pour votre aide
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Tables pour une caisse

#2

Message par jchd »

Voici un schéma qui pourrait te convenir :
► Afficher le texte
Tu risques d'avoir besoin d'une extension pour gérer les rechenches texte (nom, prénom) en Unicode. Dis-moi si ça tombe dans ton besoin.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Tables pour une caisse

#3

Message par ricky »

Hello,

ça à l'air pas mal, merci. Mais il y a deux ou trois choses.

Dans la table des membres il doit y avoir un numéro de membre, une colonne avec l'information s'il s'est inscrit ou pas (1 ou 0) et s'il fait partie de l'association (1 ou 0).
Tu risques d'avoir besoin d'une extension pour gérer les rechenches texte (nom, prénom) en Unicode
Dans la table, je dois en aucun cas faire une recherche par nom et prénom, mais uniquement par le numéro de membre.
CONSTRAINT "ckNumCaisse" CHECK(caisse between 0 and 9));
C'est quoi cette ligne? Je crois que c'est bien d'avoir un numéro pour la table de la caisse, mais après il faudra que je rassemble toutes les tables ensemble, car les deux caisses travaillent en indépendant et sans aucune liaison. C'est à la fin que je reprends la bdd et que je les rassemble.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Tables pour une caisse

#4

Message par jchd »

Une version modifiée.
► Afficher le texte
Par contre il faut savoir si ça peut fonctionner ainsi, car les clés étrangères ne peuvent bien sûr que référencer des identificateurs présents.
Cela m'amène à t'en demander plus sur ce point : est-ce que les caisses peuvent créer ou modifier des clients ? Si oui, alors des bases distinctes (caisses séparées) vont devoir se synchroniser au final, ce qui implique de mettre un n° de caisse aussi dans la définition client et une méthode de résolution, qui ne sera pas simple (comment distinguer les homonymes toujours possibles et les doublons, etc.).

Oui, le CHECK vérifie qu'on a un n° de caise entre 1 et 9 (j'ai mis ça pour ouvrir la parte à ce type de contrainte, à toi de voir si c'est correct/utile/justifié).
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Tables pour une caisse

#5

Message par ricky »

Hello,

merci pour la version modifiée, dans la table client, il manque le numéro de membre (pas l'id de la table) et c'est Id qui va se retrouver dans la table Articles. Détail, C'est CliMembre.

La liste des membres est la même dans les deux caisses. A la génération des tables, le jour du troc, il va dupliquer les tables membres et faire une table Articles par caisse. A la fin on prend les deux tables et on en créé une troisième avec la somme de tous les articles. Est-ce plus clair?

Merci beaucoup pour ton aide!
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Tables pour une caisse

#6

Message par jchd »

Quelle différence sémantique entre client et membre ?

Si ton n° de membre est numérique, tu peux parfaitement employer le rowid pour le stocker.

Bon, si les tables clients sont dupliquées et se trouvent en fait en lecture seule pour les caisses, ça roule.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Tables pour une caisse

#7

Message par ricky »

Ben simplement parce qu’on ne peut pas mettre d’auto-incrément, non?
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Tables pour une caisse

#8

Message par jchd »

Tu peux virer l'autoincrement et donc spécifier explicitement la valeur à attribuer à l'id.
Autoincrement ne s'applique que si tu ne fournis pas de valeur, mais ces valeurs que tu fournis peuvent être quelconque dans int64 signé.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [..] Tables pour une caisse

#9

Message par ricky »

Code : Tout sélectionner

CREATE TABLE "Clients" (
  "CliId" INTEGER NOT NULL PRIMARY KEY,
  "CliNom" CHAR NOT NULL,
  "CliPrenom" CHAR DEFAULT (''),
  "CliInscrit" BOOL NOT NULL DEFAULT 0,
  "CliMembre" BOOL NOT NULL DEFAULT 0);


CREATE TABLE "Articles" (
  "ArtId" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  "CliId" INTEGER NOT NULL CONSTRAINT "fkCliArt" REFERENCES "Clients"("CliId") ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY DEFERRED,
  "Caisse" INTEGER NOT NULL,
  "ArtPrix" INTEGER NOT NULL,
  "ArtQte" INTEGER NOT NULL,
  "Comment" CHAR DEFAULT (''),
  CONSTRAINT "ckNumCaisse" CHECK(caisse between 0 and 9));

CREATE INDEX "ixArtCli" ON "Articles" ("CliId");
Voilà ma table finale, maintenant, comment la créer?
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Tables pour une caisse

#10

Message par jchd »

Fais-toi une fonction de création où tu invoques

Code : Tout sélectionner

_SQLite_Exec($hDB, $SQLCreat)
en ayant mis tout le paquet SQL dans la variable.
Tu peux aussi ajouter la clause IF NOT EXISTS à chaque table et index, ce qui t'évite de traiter toi-même le cas de la création ou pas.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre