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 :

Historisation de l'adresse de facturation [MCD]


Sujet :

Schéma

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 47
    Points : 29
    Points
    29
    Par défaut Historisation de l'adresse de facturation
    Bonsoir à tous,

    Petite question sur l'historisation, déjà maintes fois abordées, mais j'aimerais une confirmation.

    Soit le cas suivant :
    - Un client possède 0, une ou plusieurs adresses
    - Une adresse appartient forcément à un seul client
    - Une adresse peut être l'adresse de facturation et/ou une adresse de livraison
    - Une facture concerne un et un seul client
    - Une facture est facturée à une et une seule adresse de facturation

    Pour des raisons comptables et fiscales, je dois pouvoir fournir la facture avec l'adresse exacte au moment de la facture. Si l'adresse est modifiée par la suite, mon ancienne facture doit faire référence à l'ancienne version de l'adresse. Pour toute nouvelle facture, c'est la nouvelle version de l'adresse qui est prise en compte.

    Le schéma suivant correspond-t-il à ce que je viens de décrire ? Comment vérifier que je n'attribue qu'une adresse de facturation au moment de la génération de la facture et non pas une adresse de livraison ?

    Nom : Capture d’écran 2015-04-30 à 20.28.43.png
Affichages : 1518
Taille : 30,3 Ko

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    le plus simple est de prévoir une date d'obsolescence (et aussi une date de création) dans votre entité adresse.
    Ceci associé à une vue qui ne montre que les adresses non obsolètes dans les listes de choix d'adresses.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    Ce qui voudrait donc dire qu'à chaque modification de l'adresse, je lui mets une date de fin (ou date d'obsolescence) et créée une nouvelle ligne ?

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir sohiermdp,


    Concernant votre MCD :

    Historisez-vous les adresses de livraison ? La cardinalité 1,N portée par la patte connectant ADRESSE et HISTORISER indiquerait une réponse positive.

    La clé de la table FACTURE est réductible, car en l’état pour une facture d’un client, on pourrait avoir plusieurs adresses et plusieurs dates d’historisation.

    Une facture fait nécessairement référence à une adresse historisée. Qu’en est-il lorsque l’adresse de facturation est en cours ?


    Quoi qu'il en soit, je propose le scénario alternatif suivant :

    Pour la partie des adresses qui sont en cours (non historisées) :




    A noter que les factures sont en relation directe avec les clients et font (facultativement) référence à une adresse de facturation en cours. La cardinalité 0,1 signifie qu’une facture ne fait pas nécessairement référence à une adresse de facturation en cours, en effet, quand l’adresse de factorisation a été historisée, les factures sont alors branchées sur leur adresse de facturation qui a été transférée dans la partie historisation.

    N.B. Avec Open ModelSphere, quand les cardinalités sont soulignées, cela signifie qu’on utilise l’identification relative. Par ailleurs, le triangle connectant ADRESSE_EN_COURS et ADRESSE_FACTURATION symbolise la spécialisation (une adresse de facturation est une adresse).

    Passage au niveau logique, sous forme d’un diagramme tabulaire (MySQL Workbench) :




    Remarques :

    Les attributs participant à la fois à la clé primaire et à une clé étrangère sont accompagnés d’une clé rouge (), tandis que les attributs participant seulement à la clé primaire sont accompagnés d’une clé jaune ().

    L’attribut AdresseId ne fait pas partie de la clé primaire de la table ADRESSE_FACTURATION. En effet, un client n’a qu’une seule adresse de facturation en cours.

    Afin d’éviter la présence du bonhomme Null (horresco referens !) au sein de la clé étrangère qui aurait branché FACTURE sur ADRESSE_FACTURATION, l’association Adresser a fait l’objet d’une table, nommée ici FACTURE_ADRESSE_EN_COURS.

    La table FACTURE_ADRESSE_EN_COURS ne contient qu’une seule fois l’attribut ClientId : cela garantit la contrainte de chemin qui veut que les factures d’un client fassent référence à l’adresse de facturation de ce client et pas à celle d’un autre client (c’est pour pouvoir garantir cette contrainte qu’on a utilisé l’identification relative pour les adresses et les factures).

    Les cardinalités donnent lieu à la lecture suivante :

    Un client a de 0 à N adresses en cours (lien CLIENT - ADRESSE_EN_COURS) ;
    Une adresse en cours appartient à un et un seul client (lien CLIENT - ADRESSE_EN_COURS) ;

    Une adresse en cours peut être une adresse de facturation (lien ADRESSE_EN_COURS – ADRESSE_FACTURATION) ;
    Une adresse de facturation est une adresse (lien ADRESSE_FACTURATION - ADRESSE_EN_COURS) ;

    Un client a de 0 à N factures (lien CLIENT - FACTURE) ;
    Une facture appartient à un et un seul client (lien CLIENT - FACTURE) ;

    Une adresse de facturation en cours est utilisée pour 0 à N factures (lien ADRESSE_FACTURATION – FACTURE_ADRESSE_en_COURS) ;
    Une facture peut avoir pour adresse au plus une adresse de facturation en cours (lien FACTURE - FACTURE_ADRESSE_en_COURS).


    Prise en compte de l’historisation des adresses

    La partie historisation des adresses est le miroir de la partie adresses en cours (à supposer qu’on historise les adresses quel que soit leur type, livraison ou facturation) :




    Diagramme tabulaire :





    Les cardinalités donnent lieu à la lecture suivante :

    Un client a de 0 à N adresses historisées (lien CLIENT - ADRESSE_HISTO) ;
    Une adresse historisée appartient à un et un seul client (lien CLIENT - ADRESSE_HISTO) ;

    Une adresse historisée peut être une adresse de facturation (lien ADRESSE_HISTO – ADRESSE_HISTO_FACT) ;
    Une adresse de facturation historisée est une adresse historisée (lien ADRESSE_HISTO – ADRESSE_HISTO_FACT) ;

    Une adresse de facturation historisée a été utilisée pour 0 à N factures (lien ADRESSE_HISTO_FACT – FACT_ADRESE_HISTO_FACT) ;
    Une facture peut avoir pour adresse au plus une adresse de facturation historisée (lien FACTURE - FACT_ADRESE_HISTO_FACT).

    Quand on historise une adresse :

    (a) On insère une ligne pour cette adresse dans la table ADRESSE_HISTO (l’attribut AdresseHistoId est incrémenté d’une unité relativement à l’attribut ClientId) ;

    (b) S’il s’agit d’une adresse de facturation, on insère une ligne dans la table ADRESSE_HISTO_FACT, avec une valeur de clé primaire égale à la valeur de la clé primaire de la ligne qui vient d’être créée dans la table parente ADRESSE_HISTO ;

    (c) Via la table FACT_ADRESSE_HISTO_FACT, on branche sur ADRESSE_HISTO_FACT les factures concernées, à savoir celles dont la valeur du singleton {ClientId} dans FACTURE_ADRESSE_EN_COURS est égale à la valeur de la clé primaire {ClientId} des lignes qui, du fait de l’historisation, seront supprimées de la table ADRESSE_FACTURATION (c'est-à-dire celles dont la valeur de la paire {ClientId, AdresseId} est égale à la valeur de la clé primaire {ClientId, AdresseId} de l’adresse supprimée (table ADRESSE_EN_COURS)).

    (d) Une fois le branchement effectué, on supprime dans FACTURE_ADRESSE_EN_COURS les lignes correspondant aux factures qui viennent de faire l’objet d’un ajout dans la table FACT_ADRESSE_HISTO_FACT.

    (e) On supprime l’adresse en cours (table ADRESSE_EN_COURS, et ADRESSE_FACTURATION par effet CASCADE).

    N.B. Une facture a au moins et au plus une adresse de facturation. Il s'agit :

    Soit de l'adresse de facturation en cours ;

    Soit d'une adresse de facturation historisée.

    Avec un SGBD SQL, cette contrainte sera sous-traitée au SGBD, au moyen d’une assertion (ou d’un trigger si le SGBD ne propose pas l’instruction CREATE ASSERTION).


    Tout ceci n’est évidemment qu’une proposition pour un scénario alternatif...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

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

Discussions similaires

  1. [XL-2007] Historiser Facture Excel
    Par totitoum dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/11/2017, 12h44
  2. CRM : Differencier Adresse de facturation et adresse de livraison
    Par Metalfourbe dans le forum Odoo (ex-OpenERP)
    Réponses: 4
    Dernier message: 13/09/2016, 17h45
  3. Intervertir code postal et ville dans l'adresse de facturation client
    Par mr_ersatz dans le forum Odoo (ex-OpenERP)
    Réponses: 2
    Dernier message: 09/08/2014, 11h16
  4. [AC-2013] Importer des adresses de factures excel
    Par yannzool dans le forum VBA Access
    Réponses: 4
    Dernier message: 13/06/2013, 22h45
  5. Réponses: 1
    Dernier message: 10/05/2007, 01h47

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