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 :

Question sur les Tables Facture,Client [MLD]


Sujet :

Schéma

  1. #1
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut Question sur les Tables Facture,Client
    Bonsoir à tous,

    J'ai une petite question sur une table facture liée à la table client et cela je crois que ca se situe au niveau du MLD.

    Facture (IdFacture, DateFacture, IdClient,......)
    Client (IdClient, Client_nom, Client_Adresse, .....)

    Puisque la table Facture contient déjà l'identifiant du client serait-il correct de rajouter à la table Facture son nom et son adresse ?
    Je sais que ma question est un peu bête puisque l'id client migre déjà dans Facture et c'est suffisant mais j'ai vu ca dans certaines BD des ERP...

    J'ai supposer donc que si ces informations sont rajouter soit pour facilité les requêtes SQL soit pour une validation de pièces comptable au cas oû le client venait à changer certaines de ces informations.

    Merci
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par freud Voir le message
    Bonsoir à tous,

    J'ai une petite question sur une table facture liée à la table client et cela je crois que ca se situe au niveau du MLD.

    Facture (IdFacture, DateFacture, IdClient,......)
    Client (IdClient, Client_nom, Client_Adresse, .....)

    Puisque la table Facture contient déjà l'identifiant du client serait-il correct de rajouter à la table Facture son nom et son adresse ?
    Au niveau MCD : Non ! C'est de la redondance d'information inutile et dangereuse.

    j'ai vu ca dans certaines BD des ERP...
    As-tu vu ça dans les tables ou dans des vues ?

    J'ai supposer donc que si ces informations sont rajouter soit pour facilité les requêtes SQL
    Peut-être en effet une dénormalisation effectuée par l'éditeur en pensant qu'un ERP peut traiter une énorme masse de données. Mais j'ose espérer que tous les contrôles de cohérence que cela impose sont également présents !

    soit pour une validation de pièces comptable au cas oû le client venait à changer certaines de ces informations.
    Là je ne vois pas trop l'utilité.

    On peut aussi penser que l'ERP n'est pas super bien modélisé ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    effectivement c'est une redondance dangeureuse l'idclient aurait suffit.

    As-tu vu ça dans les tables ou dans des vues ?
    Je ne me souviens plus dans quel ERP j'ai vu ca mais comme je le rencontre dans un autre logiciel le CRM open source EGG assez connu alors je me suis poser la question du pourquoi et voici la table :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    CREATE TABLE IF NOT EXISTS `facture` (
      `facture_id` varchar(20) NOT NULL default '',
      `facture_paramgen_id` int(11) NOT NULL default '1',
      `facture_agent_id` int(11) NOT NULL default '0',
      `facture_agent_affect` int(11) NOT NULL default '0',
      `facture_client_id` int(11) NOT NULL default '0',
      `facture_contact_id` int(11) NOT NULL default '0',
      `facture_even_spl_id` int(11) NOT NULL default '0',
      `facture_demarchage_id` int(11) NOT NULL default '0',
      `facture_devis_id` varchar(20) default NULL,
      `facture_commande_id` varchar(20) default NULL,
      `facture_mode_rglt_id` int(2) default NULL,
      `facture_objet` varchar(100) default NULL,
      `facture_date` date default NULL,
      `facture_limite` date default NULL,
      `facture_expediteur` text NOT NULL,
      `facture_contact` varchar(200) NOT NULL,
      `facture_liv_nom` varchar(200) NOT NULL default '',
      `facture_liv_adr1` varchar(60) NOT NULL default '',
      `facture_liv_adr2` varchar(60) NOT NULL default '',
      `facture_liv_cp` varchar(10) NOT NULL default '',
      `facture_liv_ville` varchar(50) NOT NULL default '',
      `facture_liv_cedex_ok` enum('Y','N') NOT NULL default 'N',
      `facture_liv_cedex` varchar(5) NOT NULL default '',
      `facture_liv_commune_id` int(11) NOT NULL default '0',
      `facture_liv_pays_id` int(11) NOT NULL default '0',
      `facture_liv_pays` varchar(50) NOT NULL default '',
      `facture_liv_pays_ville` varchar(50) NOT NULL default '',
      `facture_liv_pays_etat_id` int(11) NOT NULL default '0',
      `facture_liv_pays_etat_nom` varchar(100) NOT NULL default '',
      `facture_fact_nom` varchar(200) NOT NULL default '',
      `facture_fact_adr1` varchar(60) NOT NULL default '',
      `facture_fact_adr2` varchar(60) NOT NULL default '',
      `facture_fact_cp` varchar(10) NOT NULL default '',
      `facture_fact_ville` varchar(50) NOT NULL default '',
      `facture_fact_cedex_ok` enum('Y','N') NOT NULL default 'N',
      `facture_fact_cedex` varchar(5) NOT NULL default '',
      `facture_fact_commune_id` int(11) NOT NULL default '0',
      `facture_fact_pays_id` int(11) NOT NULL default '0',
      `facture_fact_pays` varchar(50) NOT NULL default '',
      `facture_fact_pays_ville` varchar(50) NOT NULL default '',
      `facture_fact_pays_etat_id` int(11) NOT NULL default '0',
      `facture_fact_pays_etat_nom` varchar(100) NOT NULL default '',
      `facture_adr_fact` enum('Y','N') NOT NULL default 'Y',
      `facture_adr_liv` enum('Y','N') NOT NULL default 'Y',
      `facture_rem_pourcent` decimal(25,4) NOT NULL default '0.0000',
      `facture_rem_somme` decimal(25,4) NOT NULL default '0.0000',
      `facture_prix` decimal(25,4) NOT NULL default '0.0000',
      `facture_ttc` decimal(25,4) NOT NULL default '0.0000',
      `facture_affaire_id` int(11) default NULL,
      `facture_paye_date` date default NULL,
      `facture_valide` varchar(1) NOT NULL default 'N',
      `facture_param_vendeur` enum('Y','N') NOT NULL default 'Y',
      `facture_param_imgpdt` enum('Y','N') NOT NULL default 'N',
      `facture_param_tva` enum('Y','N') NOT NULL default 'Y',
      `facture_cgv_id` int(11) NOT NULL default '0',
      `facture_devise_id` int(11) NOT NULL,
      `facture_commentaire` text NOT NULL,
      `facture_creation` datetime NOT NULL default '0000-00-00 00:00:00',
      `facture_modification` datetime NOT NULL default '0000-00-00 00:00:00',
      PRIMARY KEY  (`facture_id`),
      KEY `client_id` (`facture_client_id`),
      KEY `affaire_id` (`facture_affaire_id`),
      KEY `agent_id` (`facture_agent_id`),
      KEY `ori_agent_id` (`facture_agent_affect`),
      KEY `devis_id` (`facture_devis_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    Cette table me semble volumineuse mais le logiciel est assez sérieux quan même......
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il y a effectivement des redondances dans cette structure !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     `facture_liv_ville` varchar(50) NOT NULL default '',
     ...
     `facture_liv_commune_id` int(11) NOT NULL default '0',
      `facture_liv_pays_id` int(11) NOT NULL default '0',
      `facture_liv_pays` varchar(50) NOT NULL default '',
    `facture_liv_pays_ville` varchar(50) NOT NULL default '', -- !! Bizarre cette colonne !!
    Et plus loin répétition d'une autre adresse complète. Celle de facturation ?

    Il vaudrait mieux externaliser les adresses et les lier au client ou à la facture par un identifiant.

    Il y a aussi des identifiants non numérique dans la BDD apparemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     `facture_id` varchar(20) NOT NULL default '',
      `facture_devis_id` varchar(20) default NULL,
      `facture_commande_id` varchar(20) default NULL,
    Et la table est en MyISAM donc pas de clé étrangère ni de contrainte d'intégrité référentielle.

    Pas très sérieux tout ça !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Et plus loin répétition d'une autre adresse complète. Celle de facturation ?
    Peute-être parce que l'adresse de facturation n'est pas la même que celle de la livraison.....

    Il vaudrait mieux externaliser les adresses et les lier au client ou à la facture par un identifiant.
    Etant entrain de concevoir une BDD c'est que j'ai personnellement fait.

    Client (IdClient, Client_nom, Client_Adresse, .....)
    Adresse(IdAdresse,IdClient, adresse1, adresse2,......)
    Facture (IdFacture,IdClient,IdAdresse_facturation,IdAdresse_Livraison,.....)

    Mais comme j'ai rencontrer ces structures j'ai été pris d'un petit doute...
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par freud Voir le message
    Etant entrain de concevoir une BDD c'est que j'ai personnellement fait.

    Client (IdClient, Client_nom, Client_Adresse, .....)
    Adresse(IdAdresse,IdClient, adresse1, adresse2,......)
    Facture (IdFacture,IdClient,IdAdresse_facturation,IdAdresse_Livraison,.....)
    L'adresse n'appartient pas forcément à un client, ce peut être celle d'un fournisseur, d'une personne, d'une administration...

    Le MCD est plutôt le suivant :
    client -1,n----utiliser----0,n- adresse

    Avec l'association porteuse d'une donnée sur l'utilisation de l'adresse et faisant partie de l'identifiant de l'association.

    Ce qui donne les tables :
    Client (IdClient, Client_nom...)
    Adresse (IdAdresse, rue_1, rue_2...)
    client_adresse (ca_id_client, ca_id_adresse, ca_utilisation)

    Ca peut encore se complexifier si un client a plusieurs adresses de livraison par exemple.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    L'adresse n'appartient pas forcément à un client, ce peut être celle d'un fournisseur, d'une personne, d'une administration...
    Vous avez raison et j'ai prévu cela je n'en ai pas parler parce que j'étais seulement préoccuper par cette redondance ma table des adresses est ainsi :
    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
    CREATE TABLE BASE_TB_ADRESS (
        ADRESS_ID        INTEGER NOT NULL,
        ADRESS_LINE_1    VARCHAR(50),
        ADRESS_LINE_2    VARCHAR(50),
        ADRESS_LINE_3    VARCHAR(50),
        ADRESS_LINE_4    VARCHAR(50),
        POSTAL_CODE      VARCHAR(10),
        ADRESS_CITY      VARCHAR(50),
        COUNTRY_ID       INTEGER,
        STATE_ID         SMALLINT,
        DEPARTEMENT_ID   INTEGER,
        ADRESS_TYPE      VARCHAR(5),
        FOUR_ID          INTEGER,
        CLIENT_ID        INTEGER,
        URL              VARCHAR(255),
        CODE_TIERS       VARCHAR(10),
        SALARIE_ID          INTEGER
    );
    C'est le champ ADRESS_TYPE (LIV,FACT) qui distinguera entre l'adresse de livraison et celle de la facture mais j'en aurais besoin que pour des clients, fournisseurs et salariés (client_id, client_id , salarie_id)
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et comme une adresse n'appartiendra que très rarement à un fournisseur, à un client et à un salarié, tu va peupler tes clés étrangères avec le bonhomme NULL !
    C'est pour ça qu'il faut faire des tables associatives entre la table Adresse et les tables qui utilisent l'adresse, comme je l'ai fait dans mon modèle.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    En effet, ton modèle est plus souple et allege la BDD. D'ailleurs j'ai senti que j'aurais des difficultés pour requeter avec des ID à null et c'est pour cela que j'ai un champ code_tiers lier à une table TIERS (client, salarie, fournisseur)dans la table des adresses et ce, afin de ne recuperer que que le tiers voulu pensant eviter d'avoir des null dans mes requetes donc en adoptant ton modèle et en supprimant cette table des tiers cela va allegrer la BDD.

    Merci encore CinePhil
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  10. #10
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Bon, je met résolu puisque le modèle de CinePhil améliore le mien
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

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

Discussions similaires

  1. Question sur les socket coté client
    Par freezerhm dans le forum Langage
    Réponses: 3
    Dernier message: 10/11/2007, 21h07
  2. question sur les tables du module SD (et mm)
    Par verbatim56 dans le forum SAP
    Réponses: 13
    Dernier message: 26/06/2007, 22h41
  3. [Visual Web] Question sur les tables
    Par vsevel dans le forum NetBeans
    Réponses: 3
    Dernier message: 11/01/2007, 22h02
  4. [access] question sur les tables liées
    Par maxdwarf dans le forum Access
    Réponses: 4
    Dernier message: 29/06/2006, 09h30
  5. Question sur les tables inserted et deleted
    Par critok dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/06/2006, 22h03

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