IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

Liste de Clés Primaires


Sujet :

SQLite

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 25
    Points : 24
    Points
    24
    Par défaut Liste de Clés Primaires
    Bonjour,
    Hier j'ai posté une discussion sur une base de données pour un restaurant qui gère des commandes.
    J'ai une autre question qui me bloque et à laquelle je ne trouve aucune réponse sur Internet :
    Le restaurant dispose de 50 références qui ont tous un type : soit un hors-d'oeuvre, une salade, un plat principal, un accompagnement, un dessert, ou une boisson.
    Un client fait donc une commande composée d'1 à plusieurs références.
    J'ai donc ma table Commande avec :
    -Commande_ID
    -DateRec
    -HeureRec
    -PrixTotal
    Et la table Référence :
    -Ref_ID
    -Titre
    -Description
    -Type
    -PrixUnite

    J'aimerais créer une association Est_constitue_de qui contiendrait une liste de Ref_ID de sorte à pouvoir calculer PrixTotal en additionnant chaque PrixUnite des références dans la liste.
    Mais comment m'y prendre ?
    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Sauf si tu veux modifier les prix de tes références sans que le prix de tes commandes ne soit impacté je ne ferai pas comme ceci.

    Je ferai :
    Une table commande avec identifiant, date et heure de réception.
    Une table référence (attention references est un mot réservé SQL et normalement on ne doit pas utiliser de caractères accentués dans les noms... je dirais Produits) avec identifiant, données de description et prix unitaire
    Une table Est_Constitue _de avec Référence de la commande, Référence du produit, Quantité car une commande (ce me semble) peut comporter plusieurs fois le même produit.

    Pour obtenir le prix par commande, je ferai alors une vue.
    Un peu comme ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    CREATE TABLE [Commandes] (
      [Commande_Id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
      [DateRec] DATE NOT NULL,
      [HeureRec] TIME NOT NULL);
    CREATE TABLE [Produits] (
      [Ref_Id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
      [Titre] TEXT NULL,
      [Description] TEXT NULL,
      [TypeRef] TEXT NOT NULL,
      [PrixUnite] NUMERIC NOT NULL);
    CREATE TABLE [Est_Constitue_De] (
      [Commande_Id] INTEGER NOT NULL references commandes(commande_id),
      [Ref_Id] INTEGER NOT NULL references Produits(Ref_Id),
      [Quantite] INTEGER NOT NULL,
     PRIMARY KEY ([Commande_Id], [Ref_Id]));
    CREATE VIEW [PrixParCommande] AS
      select c.commande_id, c.daterec, c.heurerec,
             sum(e.quantite * r.Prixunite) as Prix_Total
      from commandes c
           join est_constitue_de e on c.commande_id = e.commande_id
           join Produits r on r.ref_id = e.ref_id
      group by c.commande_id, c.daterec, c.heurerec;

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Tu as déjà presque tout dit dans ta description

    La table d’association comportera les colonnes suivantes :

    Commande_ID qui fait référence à Commande.Commande_ID (contrainte d'intégrité référentielle)
    Ref_ID qui fait référence à Reference.Ref_ID (contrainte d'intégrité référentielle)
    Quantite si éventuellement on peut prendre plusieurs fois la même référence dans une commande

    La clé primaire de cette table sera composée des deux colonnes Commande_Id et Ref_Id
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Merci pour vos réponses. Mon problème est réglé.
    J'aurais cependant une 2ème question :
    Le restaurant a 5 livreurs, donc une commande est attribuée à l'un des 5. J'ai donc crée une association Doit_livrer avec comme clés primaires Commande_ID de Commande & Livreur_ID de Livreur.
    Or une clé primaire est unique, et comme le Livreur_ID des livreurs apparaît plusieurs fois dans la table car il y a 200 commandes pour 5 livreurs, cela ne fonctionne pas.
    Devrais-je garder seulement Commande_ID en clé primaire & pas Livreur_ID ? Je ne sais pas si avoir Livreur_ID en clé primaire est important ?

  5. #5
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Citation Envoyé par DienF Voir le message
    Le restaurant a 5 livreurs, donc une commande est attribuée à l'un des 5. J'ai donc crée une association Doit_livrer avec comme clés primaires Commande_ID de Commande & Livreur_ID de Livreur.
    Or une clé primaire est unique, et comme le Livreur_ID des livreurs apparaît plusieurs fois dans la table car il y a 200 commandes pour 5 livreurs, cela ne fonctionne pas.
    Devrais-je garder seulement Commande_ID en clé primaire & pas Livreur_ID ? Je ne sais pas si avoir Livreur_ID en clé primaire est important ?
    Non ta clé primaire doit être Commande_Id + Livreur_Id . (la clé primaire doit être unique dans l'ensemble des lignes de ta base de données mais peut porter sur plusieurs colonnes) comme pour l'autre association (est constitue_de)

    Cordialement

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    S'il y a un seul livreur par commande, la clé primaire doit être Commande_Id.
    Le livreur est un attribut de la commande et devrait même être identifié directement dans la table Commande.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Très bien merci à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2016] Liste déroulante filtrée par 2 Clés primaires sélectionnées avant
    Par juju57100 dans le forum Access
    Réponses: 9
    Dernier message: 30/08/2018, 20h03
  2. Réponses: 5
    Dernier message: 28/08/2018, 14h02
  3. Liste des clés primaires de l'utilisateur connecté
    Par SheikYerbouti dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/12/2011, 15h20
  4. [SGBDR]Clés primaires?
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 21/11/2004, 22h48
  5. [postgresql]creer une table avec plusieurs clés primaire??
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2004, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo