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

Schéma Discussion :

modelisation bdd : "suppression" d'une ligne de table étant une cle etrangere


Sujet :

Schéma

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut modelisation bdd : "suppression" d'une ligne de table étant une cle etrangere
    Bonjour à tous,

    Je travaille sous oracle 9i.

    Je sèche sur la manière de "supprimer" l'enregistrement d'une table étant la cle l'étranger d'une autre table.

    Prenons le cas d'une facture.

    J'ai une entreprise de chocolat qui vend ses produits à des clients qu'elle choisit dans sa base de données.

    Modèle (très simplifié) :
    table facture(pk_facture,fk_client)
    table client (pk_client, adresse, tel, fax,...)
    Un client est associé à une facture.
    Une facture ne peut plus être modifiée.

    Comment puis je faire si on veut "supprimer" un client. (Il a été trrrès méchant et il n'a plus droit à ses chocolats).
    En gros pour "supprimer" un client, il ne faut plus qu'il apparaissent à l'utilisateur, mais il doit exister dans la base de données pour que les factures restent inchangées.

    J'avais pensé à 2 solutions pour que l'utilisateur ne voit plus son méchant client :
    1) créer une colonne supprime dans la table client, qui serait par défaut à 0 et on la passerait à 1 si on dit qu'elle est supprimée (et faire un indexe bitmap) et la requête serait du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select adresse,tel,fax from client where supprime=0
    2) créer une table sup_client avec 1 colonne (fk_client) étant une clé primaire aussi.
    Et ma requete serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select adresse,tel,fax from client where pk_client not in(select fk_client from sup_client)
    Quelle est la requete la plus performantes?

    Je ne vous ai parlé que de la suppression, mais comment devrais t on s'y prendre pour une modification d'un client?
    ("Supprimer" et insérer une nouvelle ligne?)

    Merci de m'avoir lu.

    PS : "supprimer" = ligne caché au client, mais qui existe toujorus

  2. #2
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Je ne vous ai parlé que de la suppression, mais comment devrais t on s'y prendre pour une modification d'un client?
    ("Supprimer" et insérer une nouvelle ligne?)
    Une modification ne consiste pas en une suppression puis un ajout... Mais en un Update.

    Tu devrais nommer la colonne "visible" ou "disponible" et non "supprimé", ce serait plus clair.

    La première serait pour moi la plus performante.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut @hed62
    Merci pour ta réponse hed62,

    Je vais donc suivre ton conseil.

    En ce qui concerne la mise à jour, je disais "supprimer" c'est à dire mettre le boolean à 1 de la colonne visible et insérer une nouvelle ligne.

    Bonne nuit

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut cas de la modification
    Bonjour,

    Je reviens vers vous car je rencontre plus de difficulté dans le cas où l'utilisateur veut faire des modifications.
    Si par exemple j'ai un client depuis 5 ans à qui j'ai fait une facture.
    Aujourd'hui ce client s'est fait racheté et il a changé de nom et d'adresse. Si je fait un update de se client, la facture de il y a 5 ans va être aussi modifié avec les nouvelles données hors, ce n'est pas ce que je veux.

    Comment feriez vous pour prendre en compte la modification?

    Merci d'avance.

  5. #5
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Il faut que tu sauvegarde un état des factures. Tu as donc une table facture qui reprend intégralement les informations.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut @hed62
    Si je comprends bien,
    dans ma table facture, au lieu d'avoir mon code client, je rajoute les colonnes de la table client.

    Facture =(code,..., nomclient, adresseclient, telclient, faxclient...)

    pour faire des recherches d'une facture par rapport à un client, il faut que je mette aussi le code client dans la table facture?
    Je ne suis pas certain des bonnes performances par rapport à ce trie.

    Il y a beaucoup de redondance au niveau des données, mais j'imagine que pour avoir un historique, c'est le pris à payer

  7. #7
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Voila, après c'est à toi de voir si tu veux conserver les informations ou non ... C'est toujours pareil : tu peux toujours trouver un moyen détourné, comme par exemple créer deux champs Client quand un client est modifié, et ajouter une DateDeValiditéMax:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 | Toto | 7,bd Untel 59000 Lille | null
    Quand il déménage le 01/01/2008 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    1 | Toto | 7,bd Untel 59000 Lille | 01/01/2008
    1 | Toto | 7,bd Untel 62000 Arras | null
    Après tu devras faire du travail en plus du côté des méthodes d'accès.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

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

Discussions similaires

  1. [LibreOffice][Base de données] Recuperer une liste de tables et une liste de champs d'une table sur LibreOffice & OpenOffice
    Par gerard.sauvage dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 08/04/2014, 13h35
  2. Suppression d'une ligne en fonction d'une cellule
    Par flo1411 dans le forum Excel
    Réponses: 6
    Dernier message: 26/03/2013, 17h28
  3. lancer une mdb a partir d'une ligne de commande
    Par dpie dans le forum Access
    Réponses: 5
    Dernier message: 30/11/2004, 16h01

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