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

Modélisation Discussion :

Avis / conseils sur modélisation


Sujet :

Modélisation

  1. #1
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut Avis / conseils sur modélisation
    Bonjour,

    Tout d'abord, je vous souhaite à tous une bonne année 2016.
    Je tiens à vous remercier pour ce superbe boulot exposé sur le site (que je consulte régulièrement) !

    Je me permet de créer un post pour avoir votre avis sur les "fondations" d'une base de donnée que je suis en train de réaliser (comme l'en-tête l'indique sous access 2007).
    Excusez moi d'avance pour les fautes d'orthographe et de la longueur du post, j'essaye d'être le plus précis et clair.

    Je tiens à préciser que c'est ma troisième BD sous Access, je suis loin d'être un crack (je suis même honteux de ma première création) mais je suis curieux et essaye d'être méthodique (afin de ne pas réfléchir inutilement).
    Je suis soucieux de prendre en compte tous les cas de figures et d'offrir la meilleure solution à l'utilisateur.

    Pour commencer, parlons du but de cette base...

    Ma femme a pour projet d'ouvrir un salon de toilettage.
    Par conséquent elle aura besoin d'un "logiciel" permettant de gérer sa petite entreprise...
    Étant gentil et serviable avec ma femme, c'est maintenant que j’interviens.

    Certains me diront peut être que des logiciels existent déjà et que je veux réinventer la roue...
    Certes, il est vrai que je pourrai me contenter de payer un logiciel mais j'aime les défis, j'aime me torturer l'esprit et de plus ce projet me tiens à cœur !
    Bref, fini pour les présentations rentrons dans le vif du sujet !

    La base de donnée devra gérer :
    - La clientèle
    - Les animaux des clients
    - Les prestations (coupes, épilation, bain. Avec les tarifs en fonction de la taille du chien et de l'état dans lequel arrive l'animal)
    - Les devis et factures
    - Les règlements (payé en différé, en plusieurs fois, chèque sans provision etc...)
    - La vente de produits (calcul du CMUP, calcul du prix de vente suivant un taux de marge)
    - Les stocks (seuils d'alertes, préparation de commande pré-remplie avec des valeurs cibles)
    - Les fournisseurs, transporteur, commandes (entrante), livraisons (alertes avec différences entre commandes et livraison après un certain délais passé)
    - Le planning (prise de RDV pour le client avec son(es) animal(ux))
    - La caisse, les mouvements d'argent et le compte de l'entreprise

    La dernière ligne est la cerise sur le gâteau que j'ai écrite dans un coin, je ne connais pas encore de solution mais je dois laisser murir mes idées (ça n'apparait pas encore dans mes tables).

    Vous l'aurez compris, ça commence à faire un petit nombre de tables donc de requêtes, de formulaires, et d'états donc je ne veux pas me planter.
    J'aimerai aussi pouvoir générer les documents qu'elle devra fournir à la comptable de façon automatique...

    Voici les relations (désolé pour la mise en page un peu crado, la résolution de mon écran me trahit... Au début ça faisait bien mais à force de mettre des tables et des relations en plus, tout se croise et je vais bientôt devoir réorganiser tout ça).

    Relations.pdf

    Pour vous expliquer ce qu'il se passe dans ma tête...
    Les tables :
    TD_ = Table de données
    TJ_ = Table de jointure
    TL_ = Table de liste

    Les éléments de tables :
    NA_ = Numéro Auto
    Txt_ = Texte
    Num_ = Numérique
    Mon_ = Monétaire
    DH_ = Date/Heure
    YN_ = Oui/Non


    Si vous trouvez des erreurs, des choses à améliorer, des choses qui vont me contrarier pour la suite, que mon approche ne va pas...
    N'hésitez pas, je cherche juste à faire un outil pour faciliter la vie de l'utilisatrice (et par conséquent la mienne... ) !


    Un grand merci déjà d'avoir pris le temps de lire tout mon charabia et merci par avance pour vos avis.


    PS: Si un comptable passe par là, je ne connais absolument rien en comptabilité et je serait très reconnaissant si vous pouvez m'expliquer les données qu'il est nécessaire de fournir (dans un premier temps, ce sera une micro-entreprise le temps de lancer la machine, et certainement par la suite une EIRL).
    Voir même donner un fichier type avec quelques lignes d'exemples (si je n'en demande pas trop bien sur)...
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  2. #2
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Bonjour,


    Je vois avec un peu de regrets que personne n'a envie de s'attarder sur mon usine à gaz...
    Je peux le comprendre, le pdf est un peu rebutant, ma façon de procéder est certainement très mauvaise aussi.
    Mettre la base de donnée en pièce jointe permettrait peut être d'y voir plus clair...

    Quelqu'un accepte d'y jeter un oeil ?

    Je ne demande pas que l'on me fasse le boulot c'est un travail relativement conséquent, je cherche juste à avoir des conseils sur les mauvaises voies que j'ai déjà du emprunter.

    Merci par avance.
    Bonne soirée
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  3. #3
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut Quelques remarques portant sur la forme
    Bonsoir Nono02P,


    Citation Envoyé par Nono02P
    Ça commence à faire un petit nombre de tables
    Pas loin d’une trentaine, de quoi rebuter certains...

    Ce nombre reste quand même raisonnable, mais, du fait de la notation que vous utilisez pour les associations, votre diagramme est quasiment imbitable, et en plus, comme disait un grand spécialiste de la modélisation, la représentation de plus de 7 objets sur une feuille A4 fait que le lecteur craque. Quel outil de modélisation avez-vos utilisé ?

    Je vous conseille de commencer par rédiger les règles de gestion des données, puis de les traduire sous forme de MCD (modèle conceptuel des données) de type merisien. Pour cela, utilisez par exemple DB-MAIN. Certes, il y a un temps d’apprentissage, mais j’ai cru comprendre que vous aimiez les défis, donc commencez par construire avec les bonnes méthodes et les bons outils.

    Exemple de formulation de règles de gestion des données :

    (RG01) Un client possède au moins un et au plus plusieurs animaux ;

    (RG02) Un animal appartient à au moins un et au plus un client.

    Ces deux règles ne correspondent peut-être pas à votre réalité, aussi n’hésitez pas à les reformuler, d’autant que ce qui se conçoit bien s’énonce clairement. Quoi qu’il en soit, utilisez systématiquement les « au moins », et « au plus », quand bien même cela entraîne un peu de lourdeur.



    Citation Envoyé par Nono02P
    Les tables :
    TD_ = Table de données
    TJ_ = Table de jointure
    TL_ = Table de liste
    Ces préfixes sont à éviter, ça perturbe la lecture et d’expérience, suite à évolution de l’application, une table peut changer de genre...



    Citation Envoyé par Nono02P
    Les éléments de tables :
    NA_ = Numéro Auto
    Txt_ = Texte
    Num_ = Numérique
    Mon_ = Monétaire
    DH_ = Date/Heure
    YN_ = Oui/Non
    Même punition, même motif, mutatis mutandis comme disait l’autre...


    De l’utilisation du singulier pour le nom des tables et des attributs :

    L’en-tête d’une table, c'est-à-dire la liste des noms de ses colonnes, fait l’objet d’un prédicat dont les lignes de la table sont les propositions (réputées vraies). L’utilisation du singulier s’impose, tant pour le nom du prédicat que celui de ses attributs (colonnes).

    Ainsi on ne parle pas des tableaux, mais du tableau des éléments chimiques, chaque élément donnant lieu à une ligne (proposition).

    Prédicat :

    L’élément de numéro atomique NumeroAtomique, a pour nom Nom, pour symbole SymboleChimique et pour masse atomique MasseAtomique.

    Propositions :

    L’élément de numéro atomique 1, a pour nom Hydrogène, pour symbole H et pour masse atomique 1,00794.

    L’élément de numéro atomique 2, a pour nom Hélium, pour symbole He et pour masse atomique 4,002602.

    ...


    Vous êtes dans les clous concernant par exemple la table TRANSPORTEUR (j’utilise des lettres capitales pour les noms des tables, mais ne vous sentez pas obligé d’en faire autant). Je supprime les préfixes qui me freinent dans la lecture :

    Le transporteur Tansporteur_ID a pour raison sociale RaisonSoc, il réside à IDVille, à l’adresse Adresse, son numéro de téléphone est le Tel, son second numéro de téléphone est le Tel2, son numéro de fax est le Fax et son adresse de courriel est Mail.

    Par contre, à propos de la table des animaux (à renommer en ANIMAL) :

    L’animal Animaux_ID, de type IDType, ayant pour nom Nom, de race IDRace, etc.

    Le nom Animaux_ID (pluriel) détonne ici par rapport aux autres noms (au singulier) présents dans le prédicat, on est incité à lire ce qui pourrait être considéré comme un pataquès :

    Les animaux Animaux_ID, de type IDType, ayant pour nom Nom, de race IDRace, etc.


    Quoi qu'il en soit, scripta manent, on attend donc la liste des règles de gestion des données. Inspirez-vous par exemple du travail de Redreams.
    (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.

  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 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonsoir Nono02P,


    Peut-être éprouvez-vous quelques difficultés dans la mise en oeuvre de DB-MAIN ? En attendant de maîtriser cet AGL, vous pourriez tenter une rétro-conception avec MySQL Workbench : on reste au niveau logique (juste sous le niveau conceptuel), mais au moins parviendrez-vous à produire un diagramme lisible. En l’occurrence, préférez la notation « patte de corbeau » ou la notation UML pour les associations entre tables, mais surtout évitez la notation à la ACCESS.
    (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.

  5. #5
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Bonsoir fsmrl,

    Tout d'abord un grand merci pour votre temps, et vos conseils !

    J'ai pas eu énormément de temps aujourd'hui pour travailler sur DB-Main (mon boulot me prend beaucoup de temps).
    Vu la taille du diagramme et ma résolution d'écran, il me faudrait facilement 4 impressions d'écran pour espérer tout prendre rendant la lecture plus difficile.

    C'est pour ça, que vous trouverez ci-dessous le fichier de ce que j'ai déjà fait (si il le faut, je peux ajouter des impressions d'écran).
    Toilettage.zip

    J'ai pris pas mal de temps pour avoir un minimum de relations qui se croisent mais j'en ai tout de même un grand nombre...

    J'ai essayé de suivre un maximum vos conseils, ça a déjà mis en évidence des problèmes dans les relations que je n’avais pas vu avant.

    J'ai peut-être d'autres tables qui viendront se greffer après pour la gestion des comptes (bancaire et caisse) et pour la gestion des codes d'imputations (comptabilité)...
    Je ne sais pas trop encore où les placer, mais dès que j'ai un peu de temps je me colle sérieusement sur le problème.

    Je vois que DB-Main est super puissant, je ne le maitrise pas encore mais la doc étant en anglais ça devrait aller il faudrait que j'ai le temps de parcourir l'aide.

    Voici les règles :
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    RG001 :  Un client prend   au moins 0 et  au plus plusieurs rdv.
    RG002 :  Un rdv est pris par  au moins 1 et  au plus 1 client.
    RG003 :  Un rdv contient   au moins 1 et  au plus plusieurs animaux.
    RG004 :  Un animal se rend à   au moins 1 et  au plus plusieurs rdv.
    RG005 :  Un client appartiens à   au moins 1 et  au plus 1 civilité.
    RG006 :  Une civilité désigne   au moins 0 et  au plus plusieurs clients.
    RG007 :  Un client possède  au moins 0 et  au plus plusieurs animaux.
    RG008 :  Un animal appartient à  au moins 1 et  au plus plusieurs maitres (clients).
    RG009 :  Un client a pu résider à  au moins 0 et  au plus plusieurs adresses.
    RG010 :  Une adresse appartient à  au moins 1 et  au plus plusieurs clients. (à voir si 1/1 n'est pas plus simple à gérer)
    RG011 :  Un client peut recevoir  au moins 0 et  au plus plusieurs devis.
    RG012 :  Un devis est adressée à  au moins 1 et  au plus 1 client.
    RG013 :  Un client peut recevoir   au moins 0 et  au plus plusieurs factures.
    RG014 :  Une facture est adressée à  au moins 1 et  au plus 1 client.
    RG015 :  Une facture est liée à   au moins 0 et  au plus plusieurs devis.
    RG016 :  Un devis abouti à   au moins 0 et  au plus 1 facture.
    RG017 :  Une facture est réglée en   au moins 1 et  au plus plusieurs règlements.
    RG018 :  Un paiement est en règlement d'  au moins 1 et  au plus plusieurs factures.
    RG019 :  Une facture est éditée par  au moins 1 et  au plus 1 employé.
    RG020 :  Un employé peut éditer  au moins 0 et  au plus plusieurs factures.
    RG021 :  Un devis est édité par  au moins 1 et  au plus 1 employé.
    RG022 :  Un employé peut éditer  au moins 0 et  au plus plusieurs devis.
    RG023 :  Un paiement de facture est réalisé via  au moins 1 et  au plus 1 type de paiement.
    RG024 :  Un moyen de paiement est utilisé dans  au moins 0 et  au plus plusieurs paiement de factures.
    RG025 :  Un détail des animaux en rdv contient  au moins 1 et  au plus 1 animal.
    RG026 :  Un animal peut se rendre à   au moins 0 et  au plus plusieurs rdv.
    RG027 :  Un type de poil se retrouve chez   au moins 0 et  au plus plusieurs animaux.
    RG028 :  Le poil d'un animal est d'  au moins 1 et  au plus 1 type de poil.
    RG029 :  Un client prenant rdv pour son animal prévoit   au moins 1 et  au plus 1 type de forfait.
    RG030 :  Un type de forfait peut se retrouver dans  au moins 0 et  au plus plusieurs rdv d'animaux.
    RG031 :  Une race fait partie d'  au moins 1 et  au plus 1 type d'animal.
    RG032 :  Un type d'animal possède  au moins 1 et  au plus plusieurs races.
    RG033 :  Un animal appartient à  au moins 1 et  au plus 1 taille d'animaux.
    RG034 :  Une taille d'animal se retrouve chez   au moins 0 et  au plus plusieurs animaux.
    RG035 :  Un pays est composé d'  au moins 1 et  au plus plusieurs villes.
    RG036 :  Une ville se situe dans  au moins 1 et  au plus 1 pays.
    RG037 :  Un employé peut passer  au moins 0 et  au plus plusieurs commandes.
    RG038 :  Une commande peut être passée par  au moins 1 et  au plus 1 employé.
    RG039 :  Un employé peut réceptionner  au moins 0 et  au plus plusieurs livraisons.
    RG040 :  Une livraison peut être réceptionnée par  au moins 1 et  au plus 1 employé.
    RG041 :  Un employé peut effectuer  au moins 0 et  au plus plusieurs prestations.
    RG042 :  Une prestation peut être réalisée par  au moins 1 et  au plus 1 employé.
    RG043 :  Un paiement de commande est réalisé via  au moins 1 et  au plus plusieurs type de paiement.
    RG044 :  Un moyen de paiement est utilisé dans  au moins 0 et  au plus plusieurs paiement de commandes.
    RG045 :  Une commande est passée chez  au moins 1 et  au plus 1 fournisseur.
    RG046 :  Un fournisseur peut recevoir  au moins 0 et  au plus plusieurs commandes.
    RG047 :  Un animal peut faire l'objet d'  au moins 0 et  au plus plusieurs prestations.
    RG048 :  Une prestation peut être réalisée sur  au moins 1 et  au plus 1 animal.
    RG049 :  Un article apparait dans  au moins 0 et  au plus 1 ligne de vente de factures.
    RG050 :  Une ligne de vente dans une facture peut contenir  au moins 1 et  au plus 1 articles.
    RG051 :  Un article apparait dans  au moins 0 et  au plus 1 lignes de devis.
    RG052 :  Une ligne dans un devis peut contenir  au moins 1 et  au plus 1 articles.
    RG053 :  Un article peut être demandé  au moins 0 et  au plus 1 fois dans une ligne de commande.
    RG054 :  Une ligne de commande peut contenir  au moins 1 et  au plus 1 articles.
    RG055 :  Un article apparait dans  au moins 0 et  au plus 1 ligne de bon de livraison.
    RG056 :  Une ligne de bon de livraison peut contenir  au moins 1 et  au plus 1 articles.
    RG057 :  Un article peut appartenir à  au moins 1 et  au plus 1 catégorie d'articles.
    RG058 :  Une catégorie d'articles peut contenir  au moins 0 et  au plus plusieurs articles.
    RG059 :  Une commande contient  au moins 1 et  au plus plusieurs (articles/lignes) de commande.
    RG060 :  Une ligne de commande appartient à  au moins 1 et  au plus 1 commande.
    RG061 :  Une commande peut abouttir à  au moins 1 et  au plus plusieurs livraisons.
    RG062 :  Une livraison peut être à la suite d'  au moins 1 et  au plus plusieurs commandes.
    RG063 :  Un devis peut contenir  au moins 0 et  au plus plusieurs lignes avec des forfaits de prestation.
    RG064 :  Une ligne de devis pour un forfait fait parti d'  au moins 1 et  au plus 1 devis.
    RG065 :  Un devis peut contenir  au moins 0 et  au plus plusieurs lignes avec des articles.
    RG066 :  Une ligne de devis pour un article fait parti d'  au moins 1 et  au plus 1 devis.
    RG067 :  Une facture peut contenir  au moins 0 et  au plus plusieurs lignes de prestations.
    RG068 :  Une prestation peut être  au moins 1 et  au plus 1 facturée
    RG069 :  Une facture peut contenir  au moins 0 et  au plus plusieurs lignes de vente d'articles.
    RG070 :  Une ligne de facture concernant un article peut être  au moins 1 et  au plus 1 fois affiché sur la facture
    RG071 :  Un article est founi par  au moins 1 et  au plus plusieurs fournisseurs.
    RG072 :  Un fournisseur peut fournir  au moins 0 et  au plus plusieurs articles.
    RG073 :  Une livraison peut être délivrée par   au moins 1 et  au plus 1 transporteur.
    RG074 :  Un transporteur peut effectuer  au moins 0 et  au plus plusieurs livraisons.
    RG075 :  Une ville contient  au moins 1 et  au plus plusieurs adresses de clients.
    RG076 :  Une adresse de facturation se situe dans  au moins 1 et  au plus 1 ville.
    RG077 :  Une ville contient  au moins 1 et  au plus plusieurs adresses d'employés.
    RG078 :  Une adresse d'employé se situe dans  au moins 1 et  au plus 1 ville.
    RG079 :  Une ville contient  au moins 1 et  au plus plusieurs adresses de transporteurs.
    RG080 :  Une adresse de transporteurs se situe dans  au moins 1 et  au plus 1 ville.
    RG081 :  Une ville contient  au moins 1 et  au plus plusieurs adresses de fournisseurs.
    RG082 :  Une adresse de fournisseurs se situe dans  au moins 1 et  au plus 1 ville.
    RG083 :  Une ligne dans un bon de livraison comporte  au moins 1 et  au plus 1 tva.
    RG084 :  Une tva s'applique sur   au moins 1 et  au plus 1 ligne de bon de livraison.
    RG085 :  Une ligne de facture concernant un article comporte  au moins 1 et  au plus 1 tva.
    RG086 :  Une tva s'applique sur   au moins 1 et  au plus 1 ligne de facture concernant un article.
    RG087 :  Une ligne de devis concernant un article comporte  au moins 1 et  au plus 1 tva.
    RG088 :  Une tva s'applique sur   au moins 1 et  au plus 1 ligne de devis concernant un article.
    RG089 :  Une livraison comporte  au moins 1 et  au plus plusieurs lignes dans le bon de livraison.
    RG090 :  Une ligne dans un bon de livraison se retrouve dans  au moins 1 et  au plus 1 une livraison.
    RG091 :  Une ligne dans un devis concernant un forfait comporte  au moins 1 et  au plus 1 forfait.
    RG092 :  Un forfait se retrouve dans  au moins 1 et  au plus 1 ligne de devis.
    RG093 :  Un forfait se retrouve dans  au moins 0 et  au plus plusieurs prestations.
    RG094 :  Une prestation est basé sur  au moins 1 et  au plus 1 forfait.
    RG095 :  Une taille d'animal se retrouve dans  au moins 1 et  au plus plusieurs forfaits.
    RG096 :  Un forfait se compose d'  au moins 1 et  au plus 1 taille d'animal.
    RG097 :  Un type d'animal définit  au moins 1 et  au plus plusieurs forfaits.
    RG098 :  Un forfait dépend d'  au moins 1 et  au plus 1 type d'animal.
    RG099 :  Un forfait appartient à   au moins 1 et  au plus 1 type de forfait.
    RG100 :  Un type de forfait est composé d'  au moins 0 et  au plus plusieurs forfaits.
    J'espère ne rien avoir oublié !



    Qu'en pensez vous?



    Au vu du nombre de tables, et du peu de retour d'expérience que j'ai en BD.
    Je me demande si l'outil (à savoir Access) est adapté à la base de donnée que je veux créer ou si il vaudrais mieux s'orienter sur autre chose?

    Pour l'instant je n'ai créé que de très petites BD sous Access, je ne connais pas les autres SGBDR...



    Encore merci pour le temps que vous m'accordez, je vous souhaite une bonne soirée et une bonne nuit.
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonsoir Nono,


    Bel effort. Avec les règles de gestion des données, on y voit plus clair ! mais forcément elles conduisent à poser quelques questions

    Ainsi, la règle RG008 m’interpelle :

    « Un animal appartient à au moins 1 et au plus plusieurs maîtres (clients). »

    Je comprends qu’au fil du temps, un animal ait pu avoir plusieurs maîtres, mais peut-on supposer qu’à une date donnée un animal n’a [eu] qu’un seul maître ? Sinon pour quelles raisons un animal pourrait-il avoir plusieurs maîtres au même moment ? Je pars du principe que M. et Mme Champo ont un toutou nommé Zaza, qui a donc deux maîtres (ou plus, car les enfants s’en occupent aussi, prennent les rendez-vous quand les parents sont en voyage, et la voisine, Mme Michu est de la partie quand les enfants sont absents eux aussi). Mais à mon sens, tout ce petit monde ne représente qu’un seul client, à savoir "Champo", en vert de quoi, à une date donnée et du point de vue du système d'information, un animal n’a qu’un seul maître. Votre position ?



    Citation Envoyé par Nono02P
    Je me demande si l'outil (à savoir Access) est adapté à la base de donnée que je veux créer ou s’il vaudrait mieux s'orienter sur autre chose ?
    Disons qu’ACCESS devrait suffire, dans la mesure où il permet de mettre en œuvre facilement l’IHM (formulaires et toutes ces sortes de choses). Sinon, tout dépend de votre appétence pour la programmation de ce qui concerne cet IHM. il est évident que du strict point de vue bases de données, à côté de PostgreSQL ou MS SQL Server, ACCESS ne fait guère le poids.
    (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.

  7. #7
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Bonsoir fsmrel,

    Excusez moi d'avoir écorché votre pseudo sur le post précédent, je viens de m'en rendre compte ! La fatigue m'a envahit et j'ai pas fait attention.


    Je comprends qu’au fil du temps, un animal ait pu avoir plusieurs maîtres, mais peut-on supposer qu’à une date donnée un animal n’a [eu] qu’un seul maître ? Sinon pour quelles raisons un animal pourrait-il avoir plusieurs maîtres au même moment ? Je pars du principe que M. et Mme Champo ont un toutou nommé Zaza, qui a donc deux maîtres (ou plus, car les enfants s’en occupent aussi, prennent les rendez-vous quand les parents sont en voyage, et la voisine, Mme Michu est de la partie quand les enfants sont absents eux aussi). Mais à mon sens, tout ce petit monde ne représente qu’un seul client, à savoir "Champo", en vert de quoi, à une date donnée et du point de vue du système d'information, un animal n’a qu’un seul maître. Votre position ?
    Bizarrement, en voyant votre premier post je m'attendais à cette remarque...

    J'étais parti du principe où une facture doit comporter le nom, le prénom, l'adresse etc...
    Je voyais bien avoir une facture avec dessus la personne qui c'est rendue sur place.

    Et que connaissant ma femme, elle serait capable d'ajouter deux fois un même animal et les lier à leurs maitres respectifs pour avoir l'ensemble des numéros de téléphone des personnes à contacter en cas de gros problème ou urgence...



    Mais je comprend bien que pour la suite, ça peut poser des problèmes d'avoir un chien et deux maitres et en cas de recherche d'une facture par rapport à un client il faudrait le croiser avec celle de l'animal, et sans compter qu'il y a certainement d'autres contraintes que je n'imagine pas encore...

    Je propose une alternative... La table CLIENT deviens la table FAMILLE et une table MEMBRE_FAMILLE liée à la table FAMILLE.

    Ce qui fait que les factures seraient liées à une famille (composée d'une ou plusieurs personnes) et afficheraient le nom du membre de la famille.
    Ça devrait ainsi permettre à ma femme d'avoir les clients, n° de téléphone, mail, adresse, etc...

    Par contre avec une table famille, je ne sais pas trop comment la gérer dans le sens où il peut y avoir deux membres avec des noms différents.
    Cette alternative risque peut être de contrarier la suite?
    Qu'en pensez vous?



    Disons qu’ACCESS devrait suffire, dans la mesure où il permet de mettre en œuvre facilement l’IHM (formulaires et toutes ces sortes de choses). Sinon, tout dépend de votre appétence pour la programmation de ce qui concerne cet IHM. il est évident que du strict point de vue bases de données, à côté de PostgreSQL ou MS SQL Server, ACCESS ne fait guère le poids.
    J'ai déjà prévu quelques améliorations à l'appli qui arriverait dans les mains de ma femme au compte goute (quand j'aurai le temps de les développer), ces améliorations portent par exemple sur l'interfaçage avec Outlook pour pouvoir envoyer des mails de rappel de rdv automatiquement, préparer des bons de commandes en fonction des besoins dans l'attente de sa validation pour un envoi automatique etc...

    En ce qui concerne mon "appétence" pour la programmation, je dirais que ma curiosité est sans limites lorsque j'aime ce que je fait...
    Cependant, il m'arrive de rencontrer les limites de ma CPU...
    Et ce qu'il me manque cruellement c'est du temps à y consacrer.

    C'est pour ça que je vous demandais ça, je me suis naturellement dirigé vers l'outil que je connaissais (même si je ne suis qu'un débutant en stade avancé).
    Mais je n'aurai sans doute pas envie de devoir tout casser dans 4 ans pour passer sur un autre système.


    Mais si vous pensez que ça devrait suffire avec Access, je remettrais ces SGBD à une prochaine fois (même si ma curiosité me pique) !




    Pour en revenir à la BD, rien d'autre ne vous parait bizarre?

    J'ai une chose qui m'inquiète un petit peu, c'est comment je vais gérer les mises à jour de TVA, d'adresses clients, etc sans jamais changer quoi que ce soit sur les factures déjà édités.

    J'ai prévu des cases à cocher qui se rempliront automatiquement (à chaque édition de facture) permettant de dire
    "cette adresse a déjà été utilisé dans une facture"
    "cette facture a déjà été éditée, il ne peut pas y avoir de lignes en plus"

    Au chargement des formulaires j'irais vérifier la valeur de la case à cocher (masquée) pour activer ou non l'édition...

    Cette solution devrais marcher mais est elle réellement "propre" ? Ma solution fait un peu bricolage quoi !

    Avez vous des idées plus simples et/ou plus efficaces de gérer ça?


    Merci par avance.




    EDIT : J'allais oublier...
    Quel outil de modélisation avez-vos utilisé ?
    En réponse à votre première question, du papier A3 et un crayon !
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  8. #8
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut Le coeur du modèle
    Bonsoir Nono,


    Citation Envoyé par Nono02P
    Pour en revenir à la BD, rien d'autre ne vous paraît bizarre?
    Chaque chose en son temps, avant d’examiner les autres parties de l’édifice, concentrons-nous sur le cœur, sur le mur porteur, représentés ici par les clients, leurs relations avec les animaux et les factures.

    Une fois que le cœur sera stabilisé, on pourra poursuivre le montage du meccano, en greffant les employés, les ventes, etc. Ainsi, les livraisons des fournisseurs n’ont pas de rapport particulier avec les clients, autrement dit, il faut urbaniser en grands domaines : les clients, les fournisseurs, etc. Imaginez que la base de données contienne 2000 tables ! (J’ai connu ça, et sans urbanisation, la modélisation est impossible).

    A défaut, on a encore un big mac, difficile à avaler.

    De mon côté, j’en suis encore à la version 9.2 de DB-MAIN, alors que vous utilisez la 9.3 : j’ai donc installé cette version, mais elle plante après que j’ai bougé 2 ou 3 liens histoire d’y voir clair. Comme je vous l’ai déjà dit, la représentation de plus de 7 objets sur une feuille A4 fait que le lecteur craque... Raison de plus pour ne commencer par représenter que le cœur du modèle.

    Pour en revenir à ce cœur, la règle RG008 ne me paraît pas raisonnable dans le contexte d’un système d’information, ne serait-ce que la complexité apportée pour garantir la cohérence du quatuor formant une boucle, CLIENT, ANIMAL, PRESTATION, FACTURE : essayons de partir sur la base de la règle : un animal appartient à un seul client, la facturation ne s’en portera que mieux. . A défaut de famille, on pourrait parler de contact, toute personne en relation avec le client et dont les coordonnées peuvent rendre service en cas de besoin (conjoint, parents, la voisine...) :


    [CLIENT]--0,N--------(R)--------1,1--[CONTACT]


    A propos des associations de plusieurs à plusieurs : dans un MCD, les identifiants des entités-types connectées ne sont pas à dupliquer. Ainsi, l’association Possède_animal doit être débarrassée des attributs id client et id_animal. En les conservant, vous vous retrouveriez avec ces attributs en double dans le MLD, donc dans le script SQL de création des tables. Par ailleurs, l’association Possède_animal fera l’objet d’une table SQL : il vaut mieux éviter d’accentuer les lettres ("è" en l’occurrence).


    A propos de la TVA : votre entité-type TVA comporte un identifiant (artificiel, invariant, non significatif) et la date (je suppose) d’entrée en vigueur, mais je ne vois pas la valeur du taux...

    Cela dit, en comparant les dates, vous pouvez retrouver le taux en vigueur pour telle ligne de facture. Même principe pour les adresses des clients, à condition bien sûr de dater chaque adresse (depuis quand telle adresse est-elle active, ou durant quelle période pour les adresses précédentes, disons historisées). Pour ce qui concerne la datation, vous pouvez jeter un œil ici.



    Citation Envoyé par Nono02P
    En réponse à votre première question, du papier A3 et un crayon !
    Mais sans gomme ?
    (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.

  9. #9
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Bonsoir fsmrel,

    Citation Envoyé par fsmrel Voir le message
    Chaque chose en son temps, avant d’examiner les autres parties de l’édifice, concentrons-nous sur le cœur, sur le mur porteur, représentés ici par les clients, leurs relations avec les animaux et les factures.
    Vous avez raison ! Je suis désolé, c'est ma déformation professionnelle qui réapparait... D'habitude avant de préparer l'architecture, je dois penser à ce que je vais en faire. =)


    Citation Envoyé par fsmrel Voir le message
    Imaginez que la base de données contienne 2000 tables ! (J’ai connu ça, et sans urbanisation, la modélisation est impossible).
    Wowe, je savais qu'il pouvais y avoir de très gros projets en circulation (je pensais à 500 tables) mais j’étais loin d'imaginer un tel nombre...
    Ça doit être de sacré beaux projets à réaliser !

    Citation Envoyé par fsmrel Voir le message
    De mon côté, j’en suis encore à la version 9.2 de DB-MAIN, alors que vous utilisez la 9.3 : j’ai donc installé cette version, mais elle plante après que j’ai bougé 2 ou 3 liens histoire d’y voir clair.
    Ma version est installée sur une machine virtuelle (tournant sous Virtual Box. Parce que contrairement à VMware, il est gratuit...)
    Si vous voulez je peux exporter ma VM et vous l'envoyer par un lien de téléchargement par MP...

    Citation Envoyé par fsmrel Voir le message
    A défaut de famille, on pourrait parler de contact, toute personne en relation avec le client et dont les coordonnées peuvent rendre service en cas de besoin (conjoint, parents, la voisine...) :


    [CLIENT]--0,N--------(R)--------1,1--[CONTACT]
    Parfait !

    Citation Envoyé par fsmrel Voir le message
    Par ailleurs, l’association Possède_animal fera l’objet d’une table SQL : il vaut mieux éviter d’accentuer les lettres ("è" en l’occurrence).
    Ma vie de tout les jours est déjà un éternel combat avec les accents, espaces et caractères spéciaux !
    Celui-ci a échappé à ma vigilance...
    Merci, rien ne vous échappe à vous.

    Citation Envoyé par fsmrel Voir le message
    mais je ne vois pas la valeur du taux...
    Cet émoticône me caractérise plutôt bien -->

    Citation Envoyé par fsmrel Voir le message
    Mais sans gomme ?
    Vous êtes un flingueur ! Oui, vous m'avez démasqué, j'avais aussi une gomme...




    Voici ci dessous ce que j'ai déjà entrepris, je continue sur ma lancée avec les autres tables ce soir cette nuit et viendrais les poster dès que fini !
    EDIT : Remplacé par la MAJ Projet DB Main.zip

    Coeur :
    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
    RG001 : Un animal peut faire l'objet d'au moins 0 et au plus plusieurs prestations.
    RG002 : Une prestation peut être réalisée sur au moins 1 et au plus 1 animal.
    RG003 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de prestations.
    RG004 : Une prestation peut être au moins 1 et au plus 1 fois facturée.
    RG005 : Un employé peut effectuer au moins 0 et au plus plusieurs prestations.
    RG006 : Une prestation peut être réalisée par au moins 1 et au plus 1 employé.
    RG007 : Un client possède au moins 0 et au plus plusieurs animaux.
    RG008 : Un animal appartient à au moins 1 et au plus 1 maitre (client).
    RG009 : Un client a pu résider à au moins 0 et au plus plusieurs adresses.
    RG010 : Une adresse appartient à au moins 1 et au plus 1 clients.
    RG011 : Une facture est éditée par au moins 1 et au plus 1 employé.
    RG012 : Un employé peut éditer au moins 0 et au plus plusieurs factures.
    RG013 : Un client peut recevoir au moins 0 et au plus plusieurs factures.
    RG014 : Une facture est adressée à au moins 1 et au plus 1 client.
    RG015 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de vente d'articles.
    RG016 : Une ligne de facture concernant un article peut être au moins 1 et au plus 1 fois affiché sur la facture.
    Stocks
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    RG001 : Un article apparait dans au moins 0 et au plus plusieurs ligne de vente de factures.
    RG002 : Une ligne de vente dans une facture peut contenir au moins 1 et au plus 1 articles.
    RG003 : Un article apparait dans au moins 0 et au plus plusieurs ligne de bon de livraison.
    RG004 : Une ligne de bon de livraison peut contenir au moins 1 et au plus 1 articles.
    RG005 : Un article peut appartenir à au moins 1 et au plus 1 catégorie d'articles.
    RG006 : Une catégorie d'articles peut contenir au moins 0 et au plus plusieurs articles.
    RG007 : Un article est fourni par au moins 1 et au plus plusieurs fournisseurs.
    RG008 : Un fournisseur peut fournir au moins 0 et au plus plusieurs articles.
    Achats
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    RG001 : Un article peut être demandé au moins 0 et au plus plusieurs fois dans une ligne de commande.
    RG002 : Une ligne de commande peut contenir au moins 1 et au plus 1 articles.
    RG003 : Une commande contient au moins 1 et au plus plusieurs (articles/lignes) de commande.
    RG004 : Une ligne de commande appartient à au moins 1 et au plus 1 commande.
    RG005 : Un paiement de commande est réalisé via au moins 1 et au plus plusieurs type de paiement.
    RG006 : Un moyen de paiement est utilisé dans au moins 0 et au plus plusieurs paiement de commandes.
    RG007 : Un article est fourni par au moins 1 et au plus plusieurs fournisseurs.
    RG008 : Un fournisseur peut fournir au moins 0 et au plus plusieurs articles.
    RG009 : Un employé peut passer au moins 0 et au plus plusieurs commandes.
    RG010 : Une commande peut être passée par au moins 1 et au plus 1 employé.
    RG011 : Une commande est passée chez au moins 1 et au plus 1 fournisseur.
    RG012 : Un fournisseur peut recevoir au moins 0 et au plus plusieurs commandes.
    Livraisons
    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
    RG001 : Un article peut être demandé au moins 0 et au plus plusieurs fois dans une ligne de commande.
    RG002 : Une ligne de commande peut contenir au moins 1 et au plus 1 articles.
    RG003 : Une commande contient au moins 1 et au plus plusieurs (articles/lignes) de commande.
    RG004 : Une ligne de commande appartient à au moins 1 et au plus 1 commande.
    RG005 : Une commande peut abouttir à au moins 1 et au plus plusieurs livraisons.
    RG006 : Une livraison peut être à la suite d' au moins 1 et au plus plusieurs commandes.
    RG007 : Un article est fourni par au moins 1 et au plus plusieurs fournisseurs.
    RG008 : Un fournisseur peut fournir au moins 0 et au plus plusieurs articles.
    RG009 : Un article apparait dans au moins 0 et au plus plusieurs ligne de bon de livraison.
    RG010 : Une ligne de bon de livraison peut contenir au moins 1 et au plus 1 articles.
    RG011 : Une commande est passée chez au moins 1 et au plus 1 fournisseur.
    RG012 : Un fournisseur peut recevoir au moins 0 et au plus plusieurs commandes.
    RG013 : Une livraison peut être délivrée par au moins 1 et au plus 1 transporteur.
    RG014 : Un transporteur peut effectuer au moins 0 et au plus plusieurs livraisons.
    RG015 : Une livraison comporte au moins 1 et au plus plusieurs lignes dans le bon de livraison.
    RG016 : Une ligne dans un bon de livraison se retrouve dans au moins 1 et au plus 1 une livraison.
    RG017 : Un employé peut réceptionner au moins 0 et au plus plusieurs livraisons.
    RG018 : Une livraison peut être réceptionnée par au moins 1 et au plus 1 employé.
    Au passage votre méthode est très efficace, je vous remercie j'ai encore trouvé des erreurs dans mes relations !


    EDIT : Voici ci-dessous la suite

    RDV
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    RG001 : Un client prend au moins 0 et au plus plusieurs rdv.
    RG002 : Un rdv est pris par au moins 1 et au plus 1 client.
    RG003 : Un rdv contient au moins 1 et au plus plusieurs animaux.
    RG004 : Un détail des animaux en rdv est présent dans au moins 1 et au plus 1 rdv.
    RG005 : Un détail des animaux en rdv contient au moins 1 et au plus 1 animal.
    RG006 : Un animal peut se rendre à au moins 0 et au plus plusieurs rdv.
    RG007 : Un client possède au moins 0 et au plus plusieurs animaux.
    RG008 : Un animal appartient à au moins 1 et au plus 1 maitre (client).
    RG009 : Un client prenant rdv pour son animal prévoit au moins 1 et au plus 1 type de forfait.
    RG010 : Un type de forfait peut se retrouver dans au moins 0 et au plus plusieurs rdv d'animaux.
    RG011 : Un type d'animal définit au moins 1 et au plus plusieurs forfaits.
    RG012 : Un forfait dépend d'au moins 1 et au plus 1 type d'animal.
    RG013 : Un forfait appartient à au moins 1 et au plus 1 type de forfait.
    RG014 : Un type de forfait est composé d'au moins 0 et au plus plusieurs forfaits.
    Devis
    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
    RG001 : Une facture est éditée par au moins 1 et au plus 1 employé.
    RG002 : Un employé peut éditer au moins 0 et au plus plusieurs factures.
    RG003 : Un devis est édité par au moins 1 et au plus 1 employé.
    RG004 : Un employé peut éditer au moins 0 et au plus plusieurs devis.
    RG005 : Un devis peut contenir au moins 0 et au plus plusieurs lignes avec des articles.
    RG006 : Une ligne de devis pour un article fait parti d'au moins 1 et au plus 1 devis.
    RG007 : Un devis peut contenir au moins 0 et au plus plusieurs lignes avec des forfaits de prestation.
    RG008 : Une ligne de devis pour un forfait fait parti d'au moins 1 et au plus 1 devis.
    RG009 : Une ligne dans un devis concernant un forfait comporte au moins 1 et au plus 1 forfait.
    RG010 : Un forfait se retrouve dans au moins 0 et au plus plusieurs ligne de devis.
    RG011 : Un client peut recevoir au moins 0 et au plus plusieurs devis.
    RG012 : Un devis est adressée à au moins 1 et au plus 1 client.
    RG013 : Un client peut recevoir au moins 0 et au plus plusieurs factures.
    RG014 : Une facture est adressée à au moins 1 et au plus 1 client.
    RG015 : Une facture est liée à au moins 0 et au plus plusieurs devis.
    RG016 : Un devis abouti à au moins 0 et au plus 1 facture.
    RG017 : Un article apparait dans au moins 0 et au plus plusieurs lignes de devis.
    RG018 : Une ligne dans un devis peut contenir au moins 1 et au plus 1 articles.
    Clients
    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
    RG001 : Un client prend au moins 0 et au plus plusieurs rdv.
    RG002 : Un rdv est pris par au moins 1 et au plus 1 client.
    RG003 : Un client possède au moins 0 et au plus plusieurs contacts.
    RG004 : Un contact est lié à au moins 1 et au plus 1 client.
    RG005 : Un client appartiens à au moins 1 et au plus 1 civilité.
    RG006 : Une civilité désigne au moins 0 et au plus plusieurs clients.
    RG007 : Un client possède au moins 0 et au plus plusieurs animaux.
    RG008 : Un animal appartient à au moins 1 et au plus 1 maitre (client).
    RG009 : Un client a pu résider à au moins 0 et au plus plusieurs adresses.
    RG010 : Une adresse appartient à au moins 1 et au plus 1 clients.
    RG011 : Un client peut recevoir au moins 0 et au plus plusieurs devis.
    RG012 : Un devis est adressée à au moins 1 et au plus 1 client.
    RG013 : Un client peut recevoir au moins 0 et au plus plusieurs factures.
    RG014 : Une facture est adressée à au moins 1 et au plus 1 client.
    RG015 : Une facture est liée à au moins 0 et au plus plusieurs devis.
    RG016 : Un devis abouti à au moins 0 et au plus 1 facture.
    Forfaits
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    RG001 : Un forfait appartient à au moins 1 et au plus 1 type de forfait.
    RG002 : Un type de forfait est composé d'au moins 0 et au plus plusieurs forfaits.
    RG003 : Un forfait se retrouve dans au moins 0 et au plus plusieurs prestations.
    RG004 : Une prestation est basé sur au moins 1 et au plus 1 forfait.
    RG005 : Une taille d'animal se retrouve dans au moins 1 et au plus plusieurs forfaits.
    RG006 : Un forfait se compose d'au moins 1 et au plus 1 taille d'animal.
    RG007 : Une tva s'applique sur au moins 1 et au plus plusieurs forfaits.
    RG008 : Une forfait comporte au moins 1 et au plus 1 tva.
    RG009 : Une ligne dans un devis concernant un forfait comporte au moins 1 et au plus 1 forfait.
    RG010 : Un forfait se retrouve dans au moins 0 et au plus plusieurs ligne de devis.
    RG011 : Un type d'animal définit au moins 1 et au plus plusieurs forfaits.
    RG012 : Un forfait dépend d'au moins 1 et au plus 1 type d'animal.
    RG013 : Une race fait partie d'au moins 1 et au plus 1 type d'animal.
    RG014 : Un type d'animal possède au moins 1 et au plus plusieurs races.
    Villes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    RG001 : Un pays est composé d'au moins 1 et au plus plusieurs villes.
    RG002 : Une ville se situe dans au moins 1 et au plus 1 pays.
    RG003 : Une ville contient au moins 0 et au plus plusieurs adresses de fournisseurs.
    RG004 : Une adresse de fournisseurs se situe dans au moins 1 et au plus 1 ville.
    RG005 : Une ville contient au moins 0 et au plus plusieurs adresses de clients.
    RG006 : Une adresse de facturation se situe dans au moins 1 et au plus 1 ville.
    RG007 : Une ville contient au moins 0 et au plus plusieurs adresses d'employés.
    RG008 : Une adresse d'employé se situe dans au moins 1 et au plus 1 ville.
    RG009 : Un client a pu résider à au moins 0 et au plus plusieurs adresses.
    RG010 : Une adresse appartient à au moins 1 et au plus 1 clients.
    RG011 : Une ville contient au moins 0 et au plus plusieurs adresses de transporteurs.
    RG012 : Une adresse de transporteurs se situe dans au moins 1 et au plus 1 ville.
    TVA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    RG001 : Une ligne dans un bon de livraison comporte au moins 1 et au plus 1 tva.
    RG002 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de bon de livraison.
    RG003 : Une ligne de facture concernant un article comporte au moins 1 et au plus 1 tva.
    RG004 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de facture concernant un article.
    RG005 : Une ligne de devis concernant un article comporte au moins 1 et au plus 1 tva.
    RG006 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de devis concernant un article.
    RG007 : Une tva s'applique sur au moins 1 et au plus plusieurs forfaits.
    RG008 : Une forfait comporte au moins 1 et au plus 1 tva.
    Factures
    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
    RG001 : Une facture est éditée par au moins 1 et au plus 1 employé.
    RG002 : Un employé peut éditer au moins 0 et au plus plusieurs factures.
    RG003 : Un devis est édité par au moins 1 et au plus 1 employé.
    RG004 : Un employé peut éditer au moins 0 et au plus plusieurs devis.
    RG005 : Un employé peut effectuer au moins 0 et au plus plusieurs prestations.
    RG006 : Une prestation peut être réalisée par au moins 1 et au plus 1 employé.
    RG007 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de prestations.
    RG008 : Une prestation peut être au moins 1 et au plus 1 fois facturée.
    RG009 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de vente d'articles.
    RG010 : Une ligne de facture concernant un article peut être au moins 1 et au plus 1 fois affiché sur la facture.
    RG011 : Un paiement de facture est réalisé via au moins 1 et au plus 1 type de paiement.
    RG012 : Un moyen de paiement est utilisé dans au moins 0 et au plus plusieurs paiement de factures.
    RG013 : Un client peut recevoir au moins 0 et au plus plusieurs factures.
    RG014 : Une facture est adressée à au moins 1 et au plus 1 client.
    RG015 : Une facture est liée à au moins 0 et au plus plusieurs devis.
    RG016 : Un devis abouti à au moins 0 et au plus 1 facture.
    RG017 : Une facture est réglée en au moins 1 et au plus plusieurs règlements.
    RG018 : Un paiement est en règlement d'au moins 1 et au plus plusieurs factures. (A voir si pas trop compliqué d'un point de vue compta)
    Animaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    RG001 : Un animal peut faire l'objet d'au moins 0 et au plus plusieurs prestations.
    RG002 : Une prestation peut être réalisée sur au moins 1 et au plus 1 animal.
    RG003 : Un animal appartient à au moins 1 et au plus 1 taille d'animaux.
    RG004 : Une taille d'animal se retrouve chez au moins 0 et au plus plusieurs animaux.
    RG005 : Un détail des animaux en rdv contient au moins 1 et au plus 1 animal.
    RG006 : Un animal peut se rendre à au moins 0 et au plus plusieurs rdv.
    RG007 : Un client possède au moins 0 et au plus plusieurs animaux.
    RG008 : Un animal appartient à au moins 1 et au plus 1 maitre (client).
    RG009 : Un type de poil se retrouve chez au moins 0 et au plus plusieurs animaux.
    RG010 : Le poil d'un animal est d'au moins 1 et au plus 1 type de poil.
    RG011 : Un animal appartient à au moins 1 et au plus 1 race.
    RG012 : Une race est composée d'au moins 0 et au plus plusieurs animaux.
    RG013 : Une race fait partie d'au moins 1 et au plus 1 type d'animal.
    RG014 : Un type d'animal possède au moins 1 et au plus plusieurs races.

    Et si vous avez envie de vous faire mal aux yeux, voici la synthèse !
    Toilettage
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    RG001 : Un client prend au moins 0 et au plus plusieurs rdv.
    RG002 : Un rdv est pris par au moins 1 et au plus 1 client.
    RG003 : Un rdv contient au moins 1 et au plus plusieurs animaux.
    RG004 : Un détail des animaux en rdv est présent dans au moins 1 et au plus 1 rdv.
    RG005 : Un client appartiens à au moins 1 et au plus 1 civilité.
    RG006 : Une civilité désigne au moins 0 et au plus plusieurs clients.
    RG007 : Un client possède au moins 0 et au plus plusieurs animaux.
    RG008 : Un animal appartient à au moins 1 et au plus 1 maitre (client).
    RG009 : Un client a pu résider à au moins 0 et au plus plusieurs adresses.
    RG010 : Une adresse appartient à au moins 1 et au plus 1 clients.
    RG011 : Un client peut recevoir au moins 0 et au plus plusieurs devis.
    RG012 : Un devis est adressée à au moins 1 et au plus 1 client.
    RG013 : Un client peut recevoir au moins 0 et au plus plusieurs factures.
    RG014 : Une facture est adressée à au moins 1 et au plus 1 client.
    RG015 : Une facture est liée à au moins 0 et au plus plusieurs devis.
    RG016 : Un devis abouti à au moins 0 et au plus 1 facture.
    RG017 : Une facture est réglée en au moins 1 et au plus plusieurs règlements.
    RG018 : Un paiement est en règlement d'au moins 1 et au plus plusieurs factures. (A voir si pas trop compliqué d'un point de vue compta)
    RG019 : Une facture est éditée par au moins 1 et au plus 1 employé.
    RG020 : Un employé peut éditer au moins 0 et au plus plusieurs factures.
    RG021 : Un devis est édité par au moins 1 et au plus 1 employé.
    RG022 : Un employé peut éditer au moins 0 et au plus plusieurs devis.
    RG023 : Un paiement de facture est réalisé via au moins 1 et au plus 1 type de paiement.
    RG024 : Un moyen de paiement est utilisé dans au moins 0 et au plus plusieurs paiement de factures.
    RG025 : Un détail des animaux en rdv contient au moins 1 et au plus 1 animal.
    RG026 : Un animal peut se rendre à au moins 0 et au plus plusieurs rdv.
    RG027 : Un type de poil se retrouve chez au moins 0 et au plus plusieurs animaux.
    RG028 : Le poil d'un animal est d'au moins 1 et au plus 1 type de poil.
    RG029 : Un client prenant rdv pour son animal prévoit au moins 1 et au plus 1 type de forfait.
    RG030 : Un type de forfait peut se retrouver dans au moins 0 et au plus plusieurs rdv d'animaux.
    RG031 : Une race fait partie d'au moins 1 et au plus 1 type d'animal.
    RG032 : Un type d'animal possède au moins 1 et au plus plusieurs races.
    RG033 : Un animal appartient à au moins 1 et au plus 1 taille d'animaux.
    RG034 : Une taille d'animal se retrouve chez au moins 0 et au plus plusieurs animaux.
    RG035 : Un pays est composé d'au moins 1 et au plus plusieurs villes.
    RG036 : Une ville se situe dans au moins 1 et au plus 1 pays.
    RG037 : Un employé peut passer au moins 0 et au plus plusieurs commandes.
    RG038 : Une commande peut être passée par au moins 1 et au plus 1 employé.
    RG039 : Un employé peut réceptionner au moins 0 et au plus plusieurs livraisons.
    RG040 : Une livraison peut être réceptionnée par au moins 1 et au plus 1 employé.
    RG041 : Un employé peut effectuer au moins 0 et au plus plusieurs prestations.
    RG042 : Une prestation peut être réalisée par au moins 1 et au plus 1 employé.
    RG043 : Un paiement de commande est réalisé via au moins 1 et au plus plusieurs type de paiement.
    RG044 : Un moyen de paiement est utilisé dans au moins 0 et au plus plusieurs paiement de commandes.
    RG045 : Une commande est passée chez au moins 1 et au plus 1 fournisseur.
    RG046 : Un fournisseur peut recevoir au moins 0 et au plus plusieurs commandes.
    RG047 : Un animal peut faire l'objet d'au moins 0 et au plus plusieurs prestations.
    RG048 : Une prestation peut être réalisée sur au moins 1 et au plus 1 animal.
    RG049 : Un article apparait dans au moins 0 et au plus plusieurs ligne de vente de factures.
    RG050 : Une ligne de vente dans une facture peut contenir au moins 1 et au plus 1 articles.
    RG051 : Un article apparait dans au moins 0 et au plus plusieurs lignes de devis.
    RG052 : Une ligne dans un devis peut contenir au moins 1 et au plus 1 articles.
    RG053 : Un article peut être demandé au moins 0 et au plus plusieurs fois dans une ligne de commande.
    RG054 : Une ligne de commande peut contenir au moins 1 et au plus 1 articles.
    RG055 : Un article apparait dans au moins 0 et au plus plusieurs ligne de bon de livraison.
    RG056 : Une ligne de bon de livraison peut contenir au moins 1 et au plus 1 articles.
    RG057 : Un article peut appartenir à au moins 1 et au plus 1 catégorie d'articles.
    RG058 : Une catégorie d'articles peut contenir au moins 0 et au plus plusieurs articles.
    RG059 : Une commande contient au moins 1 et au plus plusieurs (articles/lignes) de commande.
    RG060 : Une ligne de commande appartient à au moins 1 et au plus 1 commande.
    RG061 : Une commande peut abouttir à au moins 1 et au plus plusieurs livraisons.
    RG062 : Une livraison peut être à la suite d'au moins 1 et au plus plusieurs commandes.
    RG063 : Un devis peut contenir au moins 0 et au plus plusieurs lignes avec des forfaits de prestation.
    RG064 : Une ligne de devis pour un forfait fait parti d'au moins 1 et au plus 1 devis.
    RG065 : Un devis peut contenir au moins 0 et au plus plusieurs lignes avec des articles.
    RG066 : Une ligne de devis pour un article fait parti d'au moins 1 et au plus 1 devis.
    RG067 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de prestations.
    RG068 : Une prestation peut être au moins 1 et au plus 1 fois facturée.
    RG069 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de vente d'articles.
    RG070 : Une ligne de facture concernant un article peut être au moins 1 et au plus 1 fois affiché sur la facture.
    RG071 : Un article est fourni par au moins 1 et au plus plusieurs fournisseurs.
    RG072 : Un fournisseur peut fournir au moins 0 et au plus plusieurs articles.
    RG073 : Une livraison peut être délivrée par au moins 1 et au plus 1 transporteur.
    RG074 : Un transporteur peut effectuer au moins 0 et au plus plusieurs livraisons.
    RG075 : Une ville contient au moins 0 et au plus plusieurs adresses de clients.
    RG076 : Une adresse de facturation se situe dans au moins 1 et au plus 1 ville.
    RG077 : Une ville contient au moins 0 et au plus plusieurs adresses d'employés.
    RG078 : Une adresse d'employé se situe dans au moins 1 et au plus 1 ville.
    RG079 : Une ville contient au moins 0 et au plus plusieurs adresses de transporteurs.
    RG080 : Une adresse de transporteurs se situe dans au moins 1 et au plus 1 ville.
    RG081 : Une ville contient au moins 0 et au plus plusieurs adresses de fournisseurs.
    RG082 : Une adresse de fournisseurs se situe dans au moins 1 et au plus 1 ville.
    RG083 : Une ligne dans un bon de livraison comporte au moins 1 et au plus 1 tva.
    RG084 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de bon de livraison.
    RG085 : Une ligne de facture concernant un article comporte au moins 1 et au plus 1 tva.
    RG086 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de facture concernant un article.
    RG087 : Une ligne de devis concernant un article comporte au moins 1 et au plus 1 tva.
    RG088 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de devis concernant un article.
    RG089 : Une livraison comporte au moins 1 et au plus plusieurs lignes dans le bon de livraison.
    RG090 : Une ligne dans un bon de livraison se retrouve dans au moins 1 et au plus 1 une livraison.
    RG091 : Une ligne dans un devis concernant un forfait comporte au moins 1 et au plus 1 forfait.
    RG092 : Un forfait se retrouve dans au moins 0 et au plus plusieurs ligne de devis.
    RG093 : Un forfait se retrouve dans au moins 0 et au plus plusieurs prestations.
    RG094 : Une prestation est basé sur au moins 1 et au plus 1 forfait.
    RG095 : Une taille d'animal se retrouve dans au moins 1 et au plus plusieurs forfaits.
    RG096 : Un forfait se compose d'au moins 1 et au plus 1 taille d'animal.
    RG097 : Un type d'animal définit au moins 1 et au plus plusieurs forfaits.
    RG098 : Un forfait dépend d'au moins 1 et au plus 1 type d'animal.
    RG099 : Un forfait appartient à au moins 1 et au plus 1 type de forfait.
    RG100 : Un type de forfait est composé d'au moins 0 et au plus plusieurs forfaits.
    RG101 : Un client possède au moins 0 et au plus plusieurs contacts.
    RG102 : Un contact est lié à au moins 1 et au plus 1 client.
    RG103 : Un animal appartient à au moins 1 et au plus 1 race.
    RG104 : Une race est composée d'au moins 0 et au plus plusieurs animaux.
    RG105 : Une tva s'applique sur au moins 1 et au plus plusieurs forfaits.
    RG106 : Une forfait comporte au moins 1 et au plus 1 tva.

    Bonne journée !



    EDIT n°2 :
    Dans les précédents fichiers mis en ligne dans ce message, j'ai oublié de modifier dans la table ADRESSE_FACTURE le champ actuelle_adresse_facture de type boolean.
    Je ne modifie pas à nouveau les fichiers mais, c'est bien pris en compte le champ a été remplacé par date_ajout_adresse de type date.
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  10. #10
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut A propos du coeur
    Bonsoir Nono,


    Bel effort d’urbanisation, on y voit plus clair !

    Toujours concernant le coeur :

    La règle Cœur_RG008 : « Un animal appartient à au moins 1 et au plus 1 maître (client) » est saine, on peut le dire !

    Une interrogation se présente quand même :

    Supposons que la prestation P1 fasse référence à la facture F1, laquelle référence le client C1. Supposons que cette prestation P1 concerne l’animal A1 : selon le diagramme, rien n’empêche que cet animal appartienne au client C2. Soit c’est possible, soit ça ne l’est pas. Il faudrait formuler la règle permettant de trancher, et si besoin on agira en conséquence sur le MCD.



    Citation Envoyé par Nono02P
    Ça doit être de sacré beaux projets à réaliser !
    Oui, avec 300 personnes sur le projet... 6 années à transpirer pour moi, de la dunette (conception) à la soute (réglage de la mise en production) mais s’il le fallait, je signerais encore et repartirais au charbon...



    Citation Envoyé par Nono02P
    Si vous voulez je peux exporter ma VM
    En travaillant sur les MCD réduits, ça a l’air de bien se passer, donc je préfère ne rien installer de plus...


    Pour les identifiants, vous avez utilisé le type INDEX : préférez le type NUMERIC, car lors de la génération SQL, DB-MAIN ne sait pas quoi faire de ce type exotique. Exemple avec la table CLIENT :

    id_client -- Index attribute not implemented -- not null

    Ne vous inquiétez pas, l'indexation des clés sera automatique.

    A moins que cela ne s’impose, d’une manière générale, préférez le type VARCHAR au type CHAR. Certes, dans le contexte ACCESS cela ne joue pas, mais supposons qu’un jour vous utilisiez un SGBD tel que MS SQL Server ou PostgreSQL, retenez que, quand on code CHAR(n), le coût du stockage est de n octets, alors qu’avec VARCHAR(n) si le nombre de caractères nécessite en réalité m < n octets, le coût du stockage est m (pensez par exemple à la raison sociale).



    Citation Envoyé par Nono02P
    Au passage votre méthode est très efficace, je vous remercie j'ai encore trouvé des erreurs dans mes relations !
    Vous voilà condamné à voter à coups de pouces verts et procéder à une remise de médailles...
    (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.

  11. #11
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Bonsoir fsmrel,

    Citation Envoyé par fsmrel Voir le message
    Une interrogation se présente quand même :

    Supposons que la prestation P1 fasse référence à la facture F1, laquelle référence le client C1. Supposons que cette prestation P1 concerne l’animal A1 : selon le diagramme, rien n’empêche que cet animal appartienne au client C2. Soit c’est possible, soit ça ne l’est pas. Il faudrait formuler la règle permettant de trancher, et si besoin on agira en conséquence sur le MCD.

    Effectivement, j'avais pas vu ça comme ça..
    Même si il est plutôt séduisant de se faire régler les prestations par un autre client, c'est pas très raisonnable !

    En solution, est-il acceptable de supprimer la relation entre le table facture et prestation à savoir RG003 et RG004 du fichier "Coeur" ?

    Citation Envoyé par fsmrel Voir le message
    En travaillant sur les MCD réduits, ça a l’air de bien se passer, donc je préfère ne rien installer de plus...
    Je vous comprend, j'éprouve toujours une réticence à l'installation de nouvelles choses sur mon pc...

    Citation Envoyé par fsmrel Voir le message
    Pour les identifiants, vous avez utilisé le type INDEX : préférez le type NUMERIC, car lors de la génération SQL, DB-MAIN ne sait pas quoi faire de ce type exotique. Exemple avec la table CLIENT :

    id_client -- Index attribute not implemented -- not null
    Je prend note et corrige dans les fichiers !


    Citation Envoyé par fsmrel Voir le message
    A moins que cela ne s’impose, d’une manière générale, préférez le type VARCHAR au type CHAR. Certes, dans le contexte ACCESS cela ne joue pas, mais supposons qu’un jour vous utilisiez un SGBD tel que MS SQL Server ou PostgreSQL, retenez que, quand on code CHAR(n), le coût du stockage est de n octets, alors qu’avec VARCHAR(n) si le nombre de caractères nécessite en réalité m < n octets, le coût du stockage est m (pensez par exemple à la raison sociale).
    Effectivement ça fait cher surtout si ma femme ne fait pas de commentaires sur une prestation...



    Citation Envoyé par fsmrel Voir le message
    Vous voilà condamné à voter à coups de pouces verts et procéder à une remise de médailles...
    Les pouces verts ainsi que les médailles ont été remis avec plaisir !


    Je continue à travailler sur les fichiers !
    J'ai encore vu quelques oublis suite aux modifications des relations il me manque certains id, d'autres sont en trop...

    Je corrige tout ça et met tout en ligne dans la foulée !


    EDIT :
    Voici ci-dessous les fichiers mis à jour, les règles n'ont pas bougé c'est plus des correctifs d'oublis.
    Projet DB Main 140316.rar

    Visiblement, il en est de même dans le fichier "RDV", la relation entre ANIMAL et ANIMAL_RDV (RG005 et RG006) peut permettre à un client de prendre RDV pour un animal qui n'est pas le sien...
    Même punition je suppose ?!


    Bonne nuit.
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  12. #12
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Nono02P
    En solution, est-il acceptable de supprimer la relation entre le table facture et prestation à savoir RG003 et RG004 du fichier "Coeur" ?
    Malheureux ! Ça va être l’hémorragie ! Religaturez-moi ça vite fait !

    La solution existe, c’est une histoire de botte qui fut secrète, mais on en reparlera, ainsi que du reste. Pour le moment j’ai sommeillllll....
    (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.

  13. #13
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Malheureux ! Ça va être l’hémorragie ! Religaturez-moi ça vite fait !
    C'était ma mauvaise idée du jour...
    On va mettre ça sur le dos de la fatigue... [elle a bon dos]
    La liste de prestations ne se mettrai plus à jour au moment de facturer, si je comprends bien la conséquence...



    Citation Envoyé par fsmrel Voir le message
    La solution existe, c’est une histoire de botte qui fut secrète
    Je suis impatient de voir votre solution
    Serait ce les options de relation dans Access qui permettent d'intégrer uniquement les données présentes dans une table ou dans l'autre ?

    Je ne me souviens plus du terme exact (je ne suis pas devant Access), j'espère que vous voyez de quoi je parle...

    Bonne journée et encore merci pour votre temps et vos précieux conseils !
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  14. #14
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut Contraintes de chemin
    Bonsoir Nono,


    Citation Envoyé par Nono02P
    Serait ce les options de relation dans Access qui permettent d'intégrer uniquement les données présentes dans une table ou dans l'autre ?
    La solution que je vous propose se situe au niveau conceptuel, c'est-à-dire indépendamment des SGBD, en amont de ceux-ci.

    D’un point de vue ontologique, une facture sans client n’a pas de sens, elle en est une propriété multivaluée (multivaluée parce qu’il peut y avoir plusieurs factures pour un client). Le seul pouvoir de la facture est d’empêcher sa propre destruction et celle du client en cas de tentative de suppression de celui-ci (opération DELETE en SQL).

    Mais pour marquer la dépendance de la facture, techniquement parlant on va identifier la facture relativement au client, faire en sorte que l’identifiant de la facture ne soit plus le singleton {id_facture} mais la paire {id_client, id_facture}. A cette occasion, je rappelle qu’il est plus que très vivement conseillé de disposer d’un identifiant artificiel, c'est-à-dire non maîtrisé par l’utilisateur (id_client dans le cas de l’entité-type CLIENT) et d’un identifiant naturel, c'est-à-dire maîtrisé par l’utilisateur (numéro de client par exemple), voyez à nouveau ici, la règle d’or de Tabourier. Même principe pour les factures : que l’identifiant artificiel de l’entité-type FACTURE soit {id_facture} ou {id_client, id_facture}, cette entité-type est à doter d’un identifiant naturel représenté par l’attribut numéro de facture.

    En tout cas, pour garantir la règle voulant que chaque prestation détermine un unique client, quant à la facture et à l’animal, on va aménager les identifiants de FACTURE et ANIMAL.


    1re étape :

    Avec DB-MAIN, pour identifier FACTURE relativement à CLIENT :

    Sélectionner l’identifiant actuel de FACTURE :





    Ceci provoque l’ouverture de la boîte de propriétés correspondante, dans laquelle on va cliquer sur la ligne « components », ce qui fait apparaître un bouton dont on va se servir :





    En cliquant sur ce bouton , on provoque l’ouverture d’une fenêtre « Multiple choice dialog » qui fournit la liste des noms des attributs et associations pouvant participer à l’identification de FACTURE, en compagnie de l’attribut id_facture :





    L’association r:recois_factures.RG0013 est le candidat qui convient, on le sélectionne et on clique sur « Add First » :





    Au résultat, l’identifiant de FACTURE est la paire (de préférence dans cet ordre) : {r:recois_factures.RG0013, id_facture}, ce qui revient à dire plus simplement que l’identifiant de facture est {id_client, id_facture} :





    En passant, notez que j’utilise des accolades pour la composition des identifiants : en effet, quoi que pourraient en dire certains merisiens, un identifiant est un ensemble (au sens de la théorie des ensembles) dont les éléments sont des noms d’attributs et/ou de noms d’associations. Ainsi, {r:recois_factures.RG0013, id_facture} est bien un ensemble.


    2e étape

    Comme dans le cas de la facture, on va considérer qu’un animal est une propriété multivaluée d’un client : dans le système d’information, les chiens perdus sans collier ça n’existe pas...

    On va identifier l’animal relativement au client, faire en sorte que l’identifiant de l’entité-type ANIMAL soit la paire {id_client, id_animal} :





    Au résultat, l’identifiant de ANIMAL est la paire : {r:recois_factures.RG0013, id_animal}, autrement dit {id_client, id_animal}.


    3e étape

    Quand on dérive le MCD en MLD, la synthèse de la situation est la suivante :


    CLIENT {id_client, nom_client, ...} ;

    ANIMAL {id_client, id_animal, nom_animal, ...} ;

    FACTURE {id_client, id_facture, date_facture, ...} ;

    PRESTATION {id_prestation, id_client_animal, id_animal, id_client_facture, id_facture, date_prestation, ...} ;


    Où id_client_animal et id_client_facture (noms donnés par moi) représentent respectivement l’identifiant du client, hérité d’une part de ANIMAL et d’autre part de FACTURE.

    Si la règle est que chaque prestation détermine un unique client, quant à la facture et à l’animal, alors pour un client donné, les attributs id_client_animal et id_client_facture doivent prendre la même valeur : à cet effet il suffit en fait de supprimer un des deux attributs, et pour qu’il n’y ait pas de jaloux, on renomme le rescapé en « id_client », et la structure de PRESTATION devient :


    PRESTATION {id_prestation, id_client, id_animal, id_facture, date_prestation, ...} ;


    Et voilà...


    Concernant l’identification de PRESTATION.

    (1) Si pour un facture et un animal il y a au plus une prestation, alors le triplet {id_client, id_animal, id_facture} doit faire l’objet d’un identifiant alternatif (clé alternative au stade SQL). A la limite, le triplet peut devenir identifiant primaire, et au nom du rasoir d’Ockham, l’attribut id_prestation disparaît.

    (2) Si pour une facture et un animal il peut y avoir plus d’une prestation, alors pour de basses raisons de performance et de simplification des requêtes SQL, la clé primaire de la table PRESTATION pourrait être (dans l’ordre) la paire {id_client, id_prestation}, voire (dans l’ordre) le triplet {id_client, id_animal, id_prestation}.


    Avant d’aller plus avant, on peut discuter de tout ça. Ce que je viens d’exposer fait l’objet du sujet : « Les contraintes de chemin ».


    Et merci pour les médailles...
    (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.

  15. #15
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Bonsoir fsmrel,


    Citation Envoyé par fsmrel Voir le message
    Et voilà...
    Et voilà?
    A la première lecture ma CPU est montée à 130% de sa capacité, et elle est descendue de 10% à chaque nouvelle lecture !
    Après 4 lectures, je pense (j'espère) avoir saisi toute la subtilité !

    Autant dire que l'utilisation de telles techniques m'était complètement inconnu !

    Pour tester si j'ai bien compris, je vais essayer de le reproduire pour la prise de RDV contenant un animal.

    Citation Envoyé par fsmrel Voir le message
    Concernant l’identification de PRESTATION.

    (1) Si pour une facture et un animal il y a au plus une prestation, alors le triplet {id_client, id_animal, id_facture} doit faire l’objet d’un identifiant alternatif (clé alternative au stade SQL). A la limite, le triplet peut devenir identifiant primaire, et au nom du rasoir d’Ockham, l’attribut id_prestation disparaît.

    (2) Si pour une facture et un animal il peut y avoir plus d’une prestation, alors pour de basses raisons de performance et de simplification des requêtes SQL, la clé primaire de la table PRESTATION pourrait être (dans l’ordre) la paire {id_client, id_prestation}, voire (dans l’ordre) le triplet {id_client, id_animal, id_prestation}.

    J'ai mis un peu de temps avant de poster la réponse, parce que pour vous répondre précisément j'avais besoin d'informations venant de ma femme...
    Autant dire qu'établir des règles pour le calcul du prix de prestation n'était pas simple avec elle !
    On partais de règles tantôt sur le poids, tantôt sur la race, tantôt sur la longueur du poil...
    On a fini par s'entendre sur une règle précise !
    Cela ne vous intéresse pas vraiment, mais il est peut être plus simple pour vous de voir le principe afin de me prévenir si vous voyez que je vais droit dans le mur...

    Voici ci-dessous la grille tarifaire (les prix indiqués sont bidons c'est uniquement pour établir une règle) :
    Grille tarifaire.pdf

    Donc vous l'aurez certainement compris, la réponse à la question... Est la réponse n°1 !
    Pour une visite d'un animal dans le salon, il ne peut y avoir qu'une seule formule donc une seule prestation par facture.

    Cependant la gestion des suppléments bouge un peu, à l'époque ma femme ne savais pas comment elle voulais facturer des suppléments donc elle m'avait demandé une saisie manuelle...

    Mais maintenant c'est clair, et elle ne veut pas avoir à réfléchir du prix... Il y aura donc :
    - Un supplément au cas où l'animal arrive dans un état pitoyable (elle devra écrire le temps passé à démêler permettant de définir par tranches de 1/2h le prix)
    - Un supplément au cas où l'animal est un sac à puces ! (en fonction de la taille du chien (qui est elle même définie par sa race) elle en tirera un prix)

    Pour gérer les règles de calcul de prix, les transformations prévues sont les suivantes :
    TYPE_POIL --> LONGUEUR_POIL
    TYPE_POIL (0,n)---R---(1,1) ANIMAL --> LONGUEUR_POIL (0,n)---R---(1,1) PRESTATION
    TAILLE_ANIMAL (0,n)---R---(1,1) ANIMAL --> TAILLE_ANIMAL (0,n)---R---(1,1) RACE

    Nouvelles relations :
    LONGUEUR_POIL (0,n)---R---(1,1) FORFAIT
    PRESTATION (0,n)---R---(0,1) SUPPLEMENT_PRESTATION


    SUPPLEMENT_PRESTATION {id_supplement_prestation, id_prestation, nom_supplement, prix_supplement, temps_supplement}

    Ensuite pour en revenir à cette partie :
    Citation Envoyé par fsmrel Voir le message
    voyez à nouveau ici, la règle d’or de Tabourier.
    La première fois, dans votre lien j'ai bel et bien lu plusieurs fois mais je n'avais pas réellement compris à quel cas précis de ma BD devait s'appliquer cette règle d'or.

    Mais la phrase tournée dans un autre sens, je pense saisir la signification !

    Dites moi si je me trompe, mais ça va servir à empêcher à ma fabuleuse utilisatrice (qui frappe sur son clavier à coup de poing en croyant résoudre les problèmes de cette façon [joke]), ainsi qu'à moi même (qui peut potentiellement commettre des erreurs de conception) la suppression malencontreuse d'une ou plusieurs données essentielles au système de facturation...
    Nous parlons évidement de :
    - TVA
    - Forfaits
    - Adresse de facturation
    - Vente ???


    Pour ce faire, (corrigez moi si mon approche est mauvaise) vous me recommandez l'ajout de certaine(s) table(s) (la question que je me pose maintenant est combien de table... Une seule peu sans doute suffire si on fait une mise à jour "globale" ou une par catégories si on opte pour une mise à jour "bloc par bloc").

    Par instinct, je dirais une mise à jour "bloc par bloc" donc :
    DATE_APPLICATION_TVA {id_date_application_tva, date}
    TVA {id_tva, id_date_application_tva, valeur_tva}

    DATE_APPLICATION_FORFAITS {id_date_application_forfaits, date}
    FORFAIT {id_forfait, id_type_forfait, id_taille_animal, id_date_application_forfaits, id_tva, prix_forfait}
    (Je me suis permis un mot au pluriel vu que cette date donnera la MAJ de l'ensemble des forfaits, n'hésitez pas si vous trouvez mon raisonnement mauvais)

    DATE_APPLICATION_ADRESSE {id_date_application_adresse, date}
    ADRESSE_FACTURE {id_adresse_facture, id_client, id_date_application_adresse, id_ville, nom_adresse_facture, utilisation_adresse_facture}

    Au passage, ce dernier "utilisation_adresse_facture" de type boolean me plait à moitié, effectivement ça va marcher d'un point de vue visuel (IHM) mais il suffirait d'aller décocher la case à cocher dans la table et hop le tour est joué (vous me diriez qu'à partir de l'accès de la table on peut aussi modifier tout le reste... M'enfin ma bidouille ne me satisfait pas trop) !

    Citation Envoyé par fsmrel Voir le message
    Et merci pour les médailles...
    Petite question sur le fonctionnement, vous vous attribuez vous-même les médailles et les autres personnes les valident ou n'importe qui peut attribuer n'importe quelle médaille à une personne?



    J'intègre tout ça demain (je suis désolé de ne pas alimenter plus le sujet, le boulot me prend beaucoup de temps et aujourd'hui la journée a été particulièrement longue, EDIT :je vais aller me reposer un peu) et le mettrais en ligne dans la foulée !


    Bonne nuit.


    EDIT :
    Au risque de paraitre pour un fou, les relations se faisant dans ma tête je suis obligé de continuer au moins la partie globale avant de dormir...

    A moins que je me plante complètement et que je suis à côté de mes pompes...
    Pour la mise à jour des prix, je reviens sur ce que j'ai dis plus haut !

    La table FORFAIT comporte le champ id_tva, à la mise à jour de la TVA les montants de tva de la table FORFAIT devant se modifier automatiquement ont besoin de récupérer le même id_date_application... Permettant ainsi de modifier en même temps dans la table TVA ainsi que dans la table FORFAIT les informations de façon automatique semble t'il !
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  16. #16
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Bonsoir fsmrel,

    Voici enfin les changements !
    Je suis maintenant passé en Rev_002
    EDIT 2 : Lien des fichiers en bas du post.

    Dans l'archive, vous trouverez aussi un fichier Excel nommé "Construction relations" montrant l'ensemble des règles de gestion par révision avec en jaune les modifications (ça sera plus simple pour vous de voir où sont mes changements dans les relations).



    Je n'ai pas fait de suivi de modifications sur les tables cependant si à l'avenir ça deviens nécessaire, je les ajouterais !
    D'ailleurs une nouvelle (petite) catégorie fait son apparition "Supplements"

    Voici tout de même le résumé :

    Coeur :
    RG001 : Un animal peut faire l'objet d'au moins 0 et au plus plusieurs prestations.
    RG002 : Une prestation peut être réalisée sur au moins 1 et au plus 1 animal.
    RG003 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de prestations.
    RG004 : Une prestation peut être au moins 1 et au plus 1 fois facturée.
    RG005 : Un employé peut effectuer au moins 0 et au plus plusieurs prestations.
    RG006 : Une prestation peut être réalisée par au moins 1 et au plus 1 employé.
    RG007 : Un client possède au moins 0 et au plus plusieurs animaux.
    RG008 : Un animal appartient à au moins 1 et au plus 1 maitre (client).
    RG009 : Un client a pu résider à au moins 0 et au plus plusieurs adresses.
    RG010 : Une adresse appartient à au moins 1 et au plus 1 clients.
    RG011 : Une facture est éditée par au moins 1 et au plus 1 employé.
    RG012 : Un employé peut éditer au moins 0 et au plus plusieurs factures.
    RG013 : Un client peut recevoir au moins 0 et au plus plusieurs factures.
    RG014 : Une facture est adressée à au moins 1 et au plus 1 client.
    RG015 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de vente d'articles.
    RG016 : Une ligne de facture concernant un article peut être au moins 1 et au plus 1 fois affiché sur la facture.
    RG017 : Une adresse de facturation est datée par au moins 1 et au plus 1 date d'ajout d'adresse.
    RG018 : Une date d'ajout d'adresse permet de dater au moins 1 et au plus 1 adresse de facturation.
    
    Stocks :
    RG001 : Un article apparait dans au moins 0 et au plus plusieurs ligne de vente de factures.
    RG002 : Une ligne de vente dans une facture peut contenir au moins 1 et au plus 1 articles.
    RG003 : Un article apparait dans au moins 0 et au plus plusieurs ligne de bon de livraison.
    RG004 : Une ligne de bon de livraison peut contenir au moins 1 et au plus 1 articles.
    RG005 : Un article peut appartenir à au moins 1 et au plus 1 catégorie d'articles.
    RG006 : Une catégorie d'articles peut contenir au moins 0 et au plus plusieurs articles.
    RG007 : Un article est fourni par au moins 1 et au plus plusieurs fournisseurs.
    RG008 : Un fournisseur peut fournir au moins 0 et au plus plusieurs articles.
    
    Achats :
    RG001 : Un article peut être demandé au moins 0 et au plus plusieurs fois dans une ligne de commande.
    RG002 : Une ligne de commande peut contenir au moins 1 et au plus 1 articles.
    RG003 : Une commande contient au moins 1 et au plus plusieurs (articles/lignes) de commande.
    RG004 : Une ligne de commande appartient à au moins 1 et au plus 1 commande.
    RG005 : Un paiement de commande est réalisé via au moins 1 et au plus plusieurs type de paiement.
    RG006 : Un moyen de paiement est utilisé dans au moins 0 et au plus plusieurs paiement de commandes.
    RG007 : Un article est fourni par au moins 1 et au plus plusieurs fournisseurs.
    RG008 : Un fournisseur peut fournir au moins 0 et au plus plusieurs articles.
    RG009 : Un employé peut passer au moins 0 et au plus plusieurs commandes.
    RG010 : Une commande peut être passée par au moins 1 et au plus 1 employé.
    RG011 : Une commande est passée chez au moins 1 et au plus 1 fournisseur.
    RG012 : Un fournisseur peut recevoir au moins 0 et au plus plusieurs commandes.
    
    Livraisons :
    RG001 : Un article peut être demandé au moins 0 et au plus plusieurs fois dans une ligne de commande.
    RG002 : Une ligne de commande peut contenir au moins 1 et au plus 1 articles.
    RG003 : Une commande contient au moins 1 et au plus plusieurs (articles/lignes) de commande.
    RG004 : Une ligne de commande appartient à au moins 1 et au plus 1 commande.
    RG005 : Une commande peut abouttir à au moins 1 et au plus plusieurs livraisons.
    RG006 : Une livraison peut être à la suite d' au moins 1 et au plus plusieurs commandes.
    RG007 : Un article est fourni par au moins 1 et au plus plusieurs fournisseurs.
    RG008 : Un fournisseur peut fournir au moins 0 et au plus plusieurs articles.
    RG009 : Un article apparait dans au moins 0 et au plus plusieurs ligne de bon de livraison.
    RG010 : Une ligne de bon de livraison peut contenir au moins 1 et au plus 1 articles.
    RG011 : Une commande est passée chez au moins 1 et au plus 1 fournisseur.
    RG012 : Un fournisseur peut recevoir au moins 0 et au plus plusieurs commandes.
    RG013 : Une livraison peut être délivrée par au moins 1 et au plus 1 transporteur.
    RG014 : Un transporteur peut effectuer au moins 0 et au plus plusieurs livraisons.
    RG015 : Une livraison comporte au moins 1 et au plus plusieurs lignes dans le bon de livraison.
    RG016 : Une ligne dans un bon de livraison se retrouve dans au moins 1 et au plus 1 une livraison.
    RG017 : Un employé peut réceptionner au moins 0 et au plus plusieurs livraisons.
    RG018 : Une livraison peut être réceptionnée par au moins 1 et au plus 1 employé.
    
    RDV :
    RG001 : Un client prend au moins 0 et au plus plusieurs rdv.
    RG002 : Un rdv est pris par au moins 1 et au plus 1 client.
    RG003 : Un rdv contient au moins 1 et au plus plusieurs animaux.
    RG004 : Un détail des animaux en rdv est présent dans au moins 1 et au plus 1 rdv.
    RG005 : Un détail des animaux en rdv contient au moins 1 et au plus 1 animal.
    RG006 : Un animal peut se rendre à au moins 0 et au plus plusieurs rdv.
    RG007 : Un client possède au moins 0 et au plus plusieurs animaux.
    RG008 : Un animal appartient à au moins 1 et au plus 1 maitre (client).
    RG009 : Un client prenant rdv pour son animal prévoit au moins 1 et au plus 1 type de forfait.
    RG010 : Un type de forfait peut se retrouver dans au moins 0 et au plus plusieurs rdv d'animaux.
    RG011 : Un type d'animal définit au moins 1 et au plus plusieurs forfaits.
    RG012 : Un forfait dépend d' au moins 1 et au plus 1 type d'animal.
    RG013 : Un forfait appartient à au moins 1 et au plus 1 type de forfait.
    RG014 : Un type de forfait est composé d' au moins 0 et au plus plusieurs forfaits.
    
    Devis :
    RG001 : Une facture est éditée par au moins 1 et au plus 1 employé.
    RG002 : Un employé peut éditer au moins 0 et au plus plusieurs factures.
    RG003 : Un devis est édité par au moins 1 et au plus 1 employé.
    RG004 : Un employé peut éditer au moins 0 et au plus plusieurs devis.
    RG005 : Un devis peut contenir au moins 0 et au plus plusieurs lignes avec des articles.
    RG006 : Une ligne de devis pour un article fait parti d' au moins 1 et au plus 1 devis.
    RG007 : Un devis peut contenir au moins 0 et au plus plusieurs lignes avec des forfaits de prestation.
    RG008 : Une ligne de devis pour un forfait fait parti d' au moins 1 et au plus 1 devis.
    RG009 : Une ligne dans un devis concernant un forfait comporte au moins 1 et au plus 1 forfait.
    RG010 : Un forfait se retrouve dans au moins 0 et au plus plusieurs ligne de devis.
    RG011 : Un client peut recevoir au moins 0 et au plus plusieurs devis.
    RG012 : Un devis est adressée à au moins 1 et au plus 1 client.
    RG013 : Un client peut recevoir au moins 0 et au plus plusieurs factures.
    RG014 : Une facture est adressée à au moins 1 et au plus 1 client.
    RG015 : Une facture est liée à au moins 0 et au plus plusieurs devis.
    RG016 : Un devis abouti à au moins 0 et au plus 1 facture.
    RG017 : Un article apparait dans au moins 0 et au plus plusieurs lignes de devis.
    RG018 : Une ligne dans un devis peut contenir au moins 1 et au plus 1 articles.
    
    Clients :
    RG001 : Un client prend au moins 0 et au plus plusieurs rdv.
    RG002 : Un rdv est pris par au moins 1 et au plus 1 client.
    RG003 : Un client possède au moins 0 et au plus plusieurs contacts.
    RG004 : Un contact est lié à au moins 1 et au plus 1 client.
    RG005 : Un client appartiens à au moins 1 et au plus 1 civilité.
    RG006 : Une civilité désigne au moins 0 et au plus plusieurs clients.
    RG007 : Un client possède au moins 0 et au plus plusieurs animaux.
    RG008 : Un animal appartient à au moins 1 et au plus 1 maitre (client).
    RG009 : Un client a pu résider à au moins 0 et au plus plusieurs adresses.
    RG010 : Une adresse appartient à au moins 1 et au plus 1 clients.
    RG011 : Un client peut recevoir au moins 0 et au plus plusieurs devis.
    RG012 : Un devis est adressée à au moins 1 et au plus 1 client.
    RG013 : Un client peut recevoir au moins 0 et au plus plusieurs factures.
    RG014 : Une facture est adressée à au moins 1 et au plus 1 client.
    RG015 : Une facture est liée à au moins 0 et au plus plusieurs devis.
    RG016 : Un devis abouti à au moins 0 et au plus 1 facture.
    
    Forfaits :
    RG001 : Un forfait appartient à au moins 1 et au plus 1 type de forfait.
    RG002 : Un type de forfait est composé d' au moins 0 et au plus plusieurs forfaits.
    RG003 : Un forfait se retrouve dans au moins 0 et au plus plusieurs prestations.
    RG004 : Une prestation est basé sur au moins 1 et au plus 1 forfait.
    RG005 : Une taille d'animal se retrouve dans au moins 1 et au plus plusieurs forfaits.
    RG006 : Un forfait se compose d' au moins 1 et au plus 1 taille d'animal.
    RG007 : Une tva s'applique sur au moins 1 et au plus plusieurs forfaits.
    RG008 : Une forfait comporte au moins 1 et au plus 1 tva.
    RG009 : Une ligne dans un devis concernant un forfait comporte au moins 1 et au plus 1 forfait.
    RG010 : Un forfait se retrouve dans au moins 0 et au plus plusieurs ligne de devis.
    RG011 : Un type d'animal définit au moins 1 et au plus plusieurs forfaits.
    RG012 : Un forfait dépend d' au moins 1 et au plus 1 type d'animal.
    RG013 : Un forfait est définit par au moins 1 et au plus 1 longueur de poil.
    RG014 : Une longueur de poil définit au moins 1 et au plus plusieurs forfaits.
    
    Villes :
    RG001 : Un pays est composé d' au moins 1 et au plus plusieurs villes.
    RG002 : Une ville se situe dans au moins 1 et au plus 1 pays.
    RG003 : Une ville contient au moins 0 et au plus plusieurs adresses de fournisseurs.
    RG004 : Une adresse de fournisseurs se situe dans au moins 1 et au plus 1 ville.
    RG005 : Une ville contient au moins 0 et au plus plusieurs adresses de clients.
    RG006 : Une adresse de facturation se situe dans au moins 1 et au plus 1 ville.
    RG007 : Une ville contient au moins 0 et au plus plusieurs adresses d'employés.
    RG008 : Une adresse d'employé se situe dans au moins 1 et au plus 1 ville.
    RG009 : Un client a pu résider à au moins 0 et au plus plusieurs adresses.
    RG010 : Une adresse appartient à au moins 1 et au plus 1 clients.
    RG011 : Une ville contient au moins 0 et au plus plusieurs adresses de transporteurs.
    RG012 : Une adresse de transporteurs se situe dans au moins 1 et au plus 1 ville.
    
    TVA :
    RG001 : Une ligne dans un bon de livraison comporte au moins 1 et au plus 1 tva.
    RG002 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de bon de livraison.
    RG003 : Une ligne de facture concernant un article comporte au moins 1 et au plus 1 tva.
    RG004 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de facture concernant un article.
    RG005 : Une ligne de devis concernant un article comporte au moins 1 et au plus 1 tva.
    RG006 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de devis concernant un article.
    RG007 : Une tva s'applique sur au moins 1 et au plus plusieurs forfaits.
    RG008 : Une forfait comporte au moins 1 et au plus 1 tva.
    RG009 : Une tva est daté par au moins 1 et au plus 1 date d'application.
    RG010 : Une date d'application permet de dater au moins 1 et au plus plusieurs valeurs de tva.
    
    Factures :
    RG001 : Une facture est éditée par au moins 1 et au plus 1 employé.
    RG002 : Un employé peut éditer au moins 0 et au plus plusieurs factures.
    RG003 : Un devis est édité par au moins 1 et au plus 1 employé.
    RG004 : Un employé peut éditer au moins 0 et au plus plusieurs devis.
    RG005 : Un employé peut effectuer au moins 0 et au plus plusieurs prestations.
    RG006 : Une prestation peut être réalisée par au moins 1 et au plus 1 employé.
    RG007 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de prestations.
    RG008 : Une prestation peut être au moins 1 et au plus 1 fois facturée.
    RG009 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de vente d'articles.
    RG010 : Une ligne de facture concernant un article peut être au moins 1 et au plus 1 fois affiché sur la facture.
    RG011 : Un paiement de facture est réalisé via au moins 1 et au plus 1 type de paiement.
    RG012 : Un moyen de paiement est utilisé dans au moins 0 et au plus plusieurs paiement de factures.
    RG013 : Un client peut recevoir au moins 0 et au plus plusieurs factures.
    RG014 : Une facture est adressée à au moins 1 et au plus 1 client.
    RG015 : Une facture est liée à au moins 0 et au plus plusieurs devis.
    RG016 : Un devis abouti à au moins 0 et au plus 1 facture.
    RG017 : Une facture est réglée en au moins 1 et au plus plusieurs règlements.
    RG018 : Un paiement est en règlement d' au moins 1 et au plus plusieurs factures. (A voir si pas trop compliqué d'un point de vue compta)
    
    Animaux :
    RG001 : Un animal peut faire l'objet d'au moins 0 et au plus plusieurs prestations.
    RG002 : Une prestation peut être réalisée sur au moins 1 et au plus 1 animal.
    RG003 : Une race définit au moins 1 et au plus 1 taille d'animal.
    RG004 : Une taille d'animal se retrouve dans au moins 0 et au plus plusieurs races.
    RG005 : Un détail des animaux en rdv contient au moins 1 et au plus 1 animal.
    RG006 : Un animal peut se rendre à au moins 0 et au plus plusieurs rdv.
    RG007 : Un client possède au moins 0 et au plus plusieurs animaux.
    RG008 : Un animal appartient à au moins 1 et au plus 1 maitre (client).
    RG009 : Une longueur de poil se retrouve dans au moins 0 et au plus plusieurs prestations.
    RG010 : Une prestation décrit au moins 1 et au plus 1 longueur de poil.
    RG011 : Un animal appartient à au moins 1 et au plus 1 race.
    RG012 : Une race est composée d'au moins 0 et au plus plusieurs animaux.
    RG013 : Une race fait partie d'au moins 1 et au plus 1 type d'animal.
    RG014 : Un type d'animal possède au moins 1 et au plus plusieurs races.
    
    Supplements :
    RG001 : Un supplément de prestation fait partie d'au moins 0 et au plus 1 prestation.
    RG002 : Une prestation contient au moins 0 et au plus plusieurs suppléments.
    RG003 : Un supplément de prestation comporte au moins 1 et au plus 1 tva.
    RG004 : Une tva s'applique sur au moins 1 et au plus plusieurs suppléments.
    RG005 : Une tva est daté par au moins 1 et au plus 1 date d'application.
    RG006 : Une date d'application permet de dater au moins 1 et au plus plusieurs valeurs de tva.
    


    Et enfin, la synthèse :
    RG001 : Un client prend au moins 0 et au plus plusieurs rdv.
    RG002 : Un rdv est pris par au moins 1 et au plus 1 client.
    RG003 : Un rdv contient au moins 1 et au plus plusieurs animaux.
    RG004 : Un détail des animaux en rdv est présent dans au moins 1 et au plus 1 rdv.
    RG005 : Un client appartiens à au moins 1 et au plus 1 civilité.
    RG006 : Une civilité désigne au moins 0 et au plus plusieurs clients.
    RG007 : Un client possède au moins 0 et au plus plusieurs animaux.
    RG008 : Un animal appartient à au moins 1 et au plus 1 maitre (client).
    RG009 : Un client a pu résider à au moins 0 et au plus plusieurs adresses.
    RG010 : Une adresse appartient à au moins 1 et au plus 1 clients.
    RG011 : Un client peut recevoir au moins 0 et au plus plusieurs devis.
    RG012 : Un devis est adressée à au moins 1 et au plus 1 client.
    RG013 : Un client peut recevoir au moins 0 et au plus plusieurs factures.
    RG014 : Une facture est adressée à au moins 1 et au plus 1 client.
    RG015 : Une facture est liée à au moins 0 et au plus plusieurs devis.
    RG016 : Un devis abouti à au moins 0 et au plus 1 facture.
    RG017 : Une facture est réglée en au moins 1 et au plus plusieurs règlements.
    RG018 : Un paiement est en règlement d'au moins 1 et au plus plusieurs factures. (A voir si pas trop compliqué d'un point de vue compta)
    RG019 : Une facture est éditée par au moins 1 et au plus 1 employé.
    RG020 : Un employé peut éditer au moins 0 et au plus plusieurs factures.
    RG021 : Un devis est édité par au moins 1 et au plus 1 employé.
    RG022 : Un employé peut éditer au moins 0 et au plus plusieurs devis.
    RG023 : Un paiement de facture est réalisé via au moins 1 et au plus 1 type de paiement.
    RG024 : Un moyen de paiement est utilisé dans au moins 0 et au plus plusieurs paiement de factures.
    RG025 : Un détail des animaux en rdv contient au moins 1 et au plus 1 animal.
    RG026 : Un animal peut se rendre à au moins 0 et au plus plusieurs rdv.
    RG027 : Une longueur de poil se retrouve dans au moins 0 et au plus plusieurs prestations.
    RG028 : Une prestation décrit au moins 1 et au plus 1 longueur de poil.
    RG029 : Un client prenant rdv pour son animal prévoit au moins 1 et au plus 1 type de forfait.
    RG030 : Un type de forfait peut se retrouver dans au moins 0 et au plus plusieurs rdv d'animaux.
    RG031 : Une race fait partie d'au moins 1 et au plus 1 type d'animal.
    RG032 : Un type d'animal possède au moins 1 et au plus plusieurs races.
    RG033 : Une race définit au moins 1 et au plus 1 taille d'animal.
    RG034 : Une taille d'animal se retrouve dans au moins 0 et au plus plusieurs races.
    RG035 : Un pays est composé d'au moins 1 et au plus plusieurs villes.
    RG036 : Une ville se situe dans au moins 1 et au plus 1 pays.
    RG037 : Un employé peut passer au moins 0 et au plus plusieurs commandes.
    RG038 : Une commande peut être passée par au moins 1 et au plus 1 employé.
    RG039 : Un employé peut réceptionner au moins 0 et au plus plusieurs livraisons.
    RG040 : Une livraison peut être réceptionnée par au moins 1 et au plus 1 employé.
    RG041 : Un employé peut effectuer au moins 0 et au plus plusieurs prestations.
    RG042 : Une prestation peut être réalisée par au moins 1 et au plus 1 employé.
    RG043 : Un paiement de commande est réalisé via au moins 1 et au plus plusieurs type de paiement.
    RG044 : Un moyen de paiement est utilisé dans au moins 0 et au plus plusieurs paiement de commandes.
    RG045 : Une commande est passée chez au moins 1 et au plus 1 fournisseur.
    RG046 : Un fournisseur peut recevoir au moins 0 et au plus plusieurs commandes.
    RG047 : Un animal peut faire l'objet d'au moins 0 et au plus plusieurs prestations.
    RG048 : Une prestation peut être réalisée sur au moins 1 et au plus 1 animal.
    RG049 : Un article apparait dans au moins 0 et au plus plusieurs ligne de vente de factures.
    RG050 : Une ligne de vente dans une facture peut contenir au moins 1 et au plus 1 articles.
    RG051 : Un article apparait dans au moins 0 et au plus plusieurs lignes de devis.
    RG052 : Une ligne dans un devis peut contenir au moins 1 et au plus 1 articles.
    RG053 : Un article peut être demandé au moins 0 et au plus plusieurs fois dans une ligne de commande.
    RG054 : Une ligne de commande peut contenir au moins 1 et au plus 1 articles.
    RG055 : Un article apparait dans au moins 0 et au plus plusieurs ligne de bon de livraison.
    RG056 : Une ligne de bon de livraison peut contenir au moins 1 et au plus 1 articles.
    RG057 : Un article peut appartenir à au moins 1 et au plus 1 catégorie d'articles.
    RG058 : Une catégorie d'articles peut contenir au moins 0 et au plus plusieurs articles.
    RG059 : Une commande contient au moins 1 et au plus plusieurs (articles/lignes) de commande.
    RG060 : Une ligne de commande appartient à au moins 1 et au plus 1 commande.
    RG061 : Une commande peut abouttir à au moins 1 et au plus plusieurs livraisons.
    RG062 : Une livraison peut être à la suite d'au moins 1 et au plus plusieurs commandes.
    RG063 : Un devis peut contenir au moins 0 et au plus plusieurs lignes avec des forfaits de prestation.
    RG064 : Une ligne de devis pour un forfait fait parti d'au moins 1 et au plus 1 devis.
    RG065 : Un devis peut contenir au moins 0 et au plus plusieurs lignes avec des articles.
    RG066 : Une ligne de devis pour un article fait parti d'au moins 1 et au plus 1 devis.
    RG067 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de prestations.
    RG068 : Une prestation peut être au moins 1 et au plus 1 fois facturée.
    RG069 : Une facture peut contenir au moins 0 et au plus plusieurs lignes de vente d'articles.
    RG070 : Une ligne de facture concernant un article peut être au moins 1 et au plus 1 fois affiché sur la facture.
    RG071 : Un article est fourni par au moins 1 et au plus plusieurs fournisseurs.
    RG072 : Un fournisseur peut fournir au moins 0 et au plus plusieurs articles.
    RG073 : Une livraison peut être délivrée par au moins 1 et au plus 1 transporteur.
    RG074 : Un transporteur peut effectuer au moins 0 et au plus plusieurs livraisons.
    RG075 : Une ville contient au moins 0 et au plus plusieurs adresses de clients.
    RG076 : Une adresse de facturation se situe dans au moins 1 et au plus 1 ville.
    RG077 : Une ville contient au moins 0 et au plus plusieurs adresses d'employés.
    RG078 : Une adresse d'employé se situe dans au moins 1 et au plus 1 ville.
    RG079 : Une ville contient au moins 0 et au plus plusieurs adresses de transporteurs.
    RG080 : Une adresse de transporteurs se situe dans au moins 1 et au plus 1 ville.
    RG081 : Une ville contient au moins 0 et au plus plusieurs adresses de fournisseurs.
    RG082 : Une adresse de fournisseurs se situe dans au moins 1 et au plus 1 ville.
    RG083 : Une ligne dans un bon de livraison comporte au moins 1 et au plus 1 tva.
    RG084 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de bon de livraison.
    RG085 : Une ligne de facture concernant un article comporte au moins 1 et au plus 1 tva.
    RG086 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de facture concernant un article.
    RG087 : Une ligne de devis concernant un article comporte au moins 1 et au plus 1 tva.
    RG088 : Une tva s'applique sur au moins 1 et au plus plusieurs ligne de devis concernant un article.
    RG089 : Une livraison comporte au moins 1 et au plus plusieurs lignes dans le bon de livraison.
    RG090 : Une ligne dans un bon de livraison se retrouve dans au moins 1 et au plus 1 une livraison.
    RG091 : Une ligne dans un devis concernant un forfait comporte au moins 1 et au plus 1 forfait.
    RG092 : Un forfait se retrouve dans au moins 0 et au plus plusieurs ligne de devis.
    RG093 : Un forfait se retrouve dans au moins 0 et au plus plusieurs prestations.
    RG094 : Une prestation est basé sur au moins 1 et au plus 1 forfait.
    RG095 : Une taille d'animal se retrouve dans au moins 1 et au plus plusieurs forfaits.
    RG096 : Un forfait se compose d'au moins 1 et au plus 1 taille d'animal.
    RG097 : Un type d'animal définit au moins 1 et au plus plusieurs forfaits.
    RG098 : Un forfait dépend d'au moins 1 et au plus 1 type d'animal.
    RG099 : Un forfait appartient à au moins 1 et au plus 1 type de forfait.
    RG100 : Un type de forfait est composé d'au moins 0 et au plus plusieurs forfaits.
    RG101 : Un client possède au moins 0 et au plus plusieurs contacts.
    RG102 : Un contact est lié à au moins 1 et au plus 1 client.
    RG103 : Un animal appartient à au moins 1 et au plus 1 race.
    RG104 : Une race est composée d'au moins 0 et au plus plusieurs animaux.
    RG105 : Une tva s'applique sur au moins 1 et au plus plusieurs forfaits.
    RG106 : Une forfait comporte au moins 1 et au plus 1 tva.
    RG107 : Un forfait est définit par au moins 1 et au plus 1 longueur de poil.
    RG108 : Une longueur de poil définit au moins 1 et au plus plusieurs forfaits.
    RG109 : Un supplément de prestation fait partie d'au moins 0 et au plus 1 prestation.
    RG110 : Une prestation contient au moins 0 et au plus plusieurs suppléments.
    RG111 : Un supplément de prestation comporte au moins 1 et au plus 1 tva.
    RG112 : Une tva s'applique sur au moins 1 et au plus plusieurs suppléments.
    RG113 : Une adresse de facturation est datée par au moins 1 et au plus 1 date d'ajout d'adresse.
    RG114 : Une date d'ajout d'adresse permet de dater au moins 1 et au plus 1 adresse de facturation.
    RG115 : Une tva est daté par au moins 1 et au plus 1 date d'application.
    RG116 : Une date d'application permet de dater au moins 1 et au plus plusieurs valeurs de tva.
    
    J'espère ne rien avoir oublié...

    Je n'ai pas encore géré votre astuce pour la prise de rdv.

    Je vais essayer de faire ça ce soir !

    Qu'en pensez vous?
    Bonne soirée !


    EDIT :
    Oups, désolé pour le double post j'ai pas fait attention !


    EDIT2 :
    L'heure du verdict a sonné, ai-je bien compris comment ré-exploiter votre méthode?
    Projet DB Main 160316.zip

    EDIT3 :
    Voilà, c'est passé de CODE à QUOTE ! Effectivement c'est beaucoup plus lisible...
    Je vous avoue que je n'avais pas vu, je n'ai pas eu ce problème puisque de mon côté c'est un tableau excel !


    EDIT4 (17/03/16 à 07:52) :
    Finalement fsmrel, j'ai pu modifier le message (en me connectant à partir de mon PC, ça a fonctionné... Je ne sais pas si le problème venait du téléphone ou si un modérateur est passé par la pour me permettre de le modifier... Si c'est un modérateur, merci !).
    Bref voici le passage en PRE, je ne voudrais pas que la lecture de mes post vous donne mal aux yeux !
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  17. #17
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut Cascade !
    Bonsoir Nono,


    Je ne tiens pas compte ici du post #16, car je viens seulement de le survoler, et j'ai passé du temps sur le #15...



    Citation Envoyé par Nono02P
    Pour tester si j'ai bien compris, je vais essayer de le reproduire pour la prise de RDV contenant un animal.
    De fait, il vaut mieux s’assurer de la cohérence de la prise de rendez-vous ! Si votre épouse prenait un rendez-vous pour Mme Hilary, et qu’arrive M. Donald, ça pourrait créer un incident diplomatique...


    A propos de la grille tarifaire :


    Il y a donc possibilité de soins complémentaires : appelons par exemple SOIN_COMPLEMENTAIRE l’entité-type correspondante. Les règles de gestion seraient donc les suivantes :

    (Rx) Une prestation peut être complétée par 0,N soins complémentaires ;
    R(x’) Un soin complémentaire peut être en complément de 0,N prestations.

    (Incidemment, pour présenter les règles de gestion des données, il serait préférable que vous remplaciez la balise QUOTE par la balise PRE, cela faciliterait la lecture, éviterait l’utilisation des ascenseurs).

    Diagramme :


    [PRESTATION]--0,N------------(PRESTATION_SUPPLEMENT)------------0,N--[SOIN_COMPLEMENTAIRE]



    Citation Envoyé par Nono02P
    Pour une visite d'un animal dans le salon, il ne peut y avoir qu'une seule formule donc une seule prestation par facture.
    Ce qui est de bon sens. Mais comme disait notre bon roi François, « Souvent femme varie, bien fol qui s’y fie »... A supposer qu’un jour on puisse avoir deux fois la même prestation pour une facture il ne faudra pas oublier de compléter la clé primaire, avec un numéroteur de dédoublonnage, pour fixer les idées, appelons-le id_prestation, d’où évolution ce jour-là de la composition de la clé primaire, devenant alors {id_client, id_animal, id_facture, id_prestation}.

    Cela dit, se présente le cas du supplément de prestation : si aujourd’hui on décide que la clé primaire de la table PRESTATION est le triplet {id_client, id_animal, id_facture}, la table PRESTATION_SUPPLEMENT sera dotée d’une clé étrangère {id_client, id_animal, id_facture}. Quid, si un jour la clé primaire de PRESTATION devenait {id_client, id_animal, id_facture, id_prestation} ? Il y aurait en vue une opération de maintenance, dont on se serait volontiers passé...

    Je propose donc, pour la table PRESTATION, que l’on ravale le triplet {id_client, id_animal, id_facture} au rang de clé alternative (l’unicité des valeurs est garantie) et que l’on mette en œuvre une clé primaire {id_client, id_prestation} ou , au choix, {id_client, id_animal, id_prestation}. Si donc d’aventure, on risquait un jour d’avoir légitimement deux fois la même prestation, il suffirait de supprimer la clé alternative devenue obsolète, tandis que la clé primaire serait insensible à l’évolution, d’où absence de maintenance supplémentaire (maintenance donnant lieu à des effets de bord touchant des tables comme PRESTATION_SUPPLEMENT).



    Citation Envoyé par Nono02P
    Dites moi si je me trompe, mais ça va servir à empêcher à ma fabuleuse utilisatrice (qui frappe sur son clavier à coup de poing en croyant résoudre les problèmes de cette façon [joke]), ainsi qu'à moi même (qui peut potentiellement commettre des erreurs de conception) la suppression malencontreuse d'une ou plusieurs données essentielles au système de facturation...
    Pas exactement... La règle d’or permet d’éviter une maintenance redoutable à tous les plans (technique, financier...) en cas de nécessité de modifier la structure des identifiants (donc des clés primaires), si tant est qu’on ne soit pas obligé de mettre le système existant à la poubelle et repartir de zéro.

    J’ai connu ça assez souvent. Je prends l’exemple d’une entreprise dans la grande distribution, où l’on retrouvait dans à peu près toutes les tables, un code du genre EAN comme clé primaire et/ou étrangère, qui était significatif et que l’utilisateur mettait souvent à mal : la base de données était toujours à réorganiser, les temps de traitement étaient très pénalisés, et la solution ne pouvait consister en un passage à un ordinateur plus puissant, avec ajout de mémoire et tout ça : il a fallu prendre le taureau par les cornes et construire un système tout neuf...


    Ainsi, en ce qui concerne les suppressions malencontreuses de la part de la fabuleuse utilisatrice, la règle d’or n’est pas partie prenante. En revanche, la base de données n’est pas que structure, anatomie, elle est douée d’un certain métabolisme, en ce sens qu’une tentative de suppression intempestive d’une ligne d’une table peut être bloquée par les tables impactées.


    Exemple :


    Votre fabuleuse utilisatrice, Mme Nono en personne, a créé les données du client Paul, ainsi que les données du chien Zaza d’y-celui, plus une facture et des prestations.

    Par inadvertance, Mme Nono a appuyé sur la touche du clavier qui déclenche une opération de suppression de Paul, qu’adviendra-il ?

    Rappelons-nous que la table ANIMAL est dotée d’une clé étrangère qui la relie à la table CLIENT, même principe pour la table FACTURE. Si donc la suppression de Paul est demandée, des stimuli le concernant partent tous azimuts depuis la table CLIENT, et se propagent en suivant les clés étrangères, et atteignent donc les tables ANIMAL et FACTURE.

    Zaza et les factures de Paul reçoivent les stimuli et réagissent en fonction de ce que vous-même avez décidé lors de la déclaration de la clé étrangère branchant FACTURE et CLIENT. Les mots magiques SQL correspondants sont CASCADE, NO ACTION et RESTRICT (attention, MS ACCESS, MySQL et PostgreSQL interprètent RESTRICT comme NO ACTION, tandis que MS SQL Server le rejette).

    Considérons l’image ci-dessous (MS ACCESS). La fenêtre « Edit Relationships » montre non seulement que la case « Enforce Referential Integrity » est cochée, mais c’est aussi le cas de la case « Cascade Delete Related Records » (synonyme de CASCADE) : la règle est donc que si l’on veut supprimer Paul, alors Zaza subira le même sort.





    Supposons que l’on ait utilisé la même stratégie pour les autres tables, à savoir CASCADE à tous les étages. Quand Zaza reçoit un stimulus de demande de suppression, elle ne peut qu’acquiescer, mais elle commence par transmettre aux prestations qui la concernent le stimulus qu’elle a reçu de la part de Paul. Les factures concernant Paul en font autant (suivre les flèches ci-dessous...) :





    Et Zaza et les factures attendent la réponse d’acquiescement ou de refus de disparaître de la part des prestations. Si les prestations sont d’accord pour disparaître, même chose pour Zaza et les factures, alors Paul peut disparaître lui aussi, sinon rien n’est supprimé.

    Conclusion : CASCADE partout ? Y-compris pour les prestations ? Si oui, alors Mme Nono aura tout perdu en ce qui concerne Paul : Paul, Zaza, les factures et les prestations concernées. Adieu, veaux vaches, cochons... Vous voyez la responsabilité qui est la vôtre...

    A signaler que MS SQL Server refuse que les clés étrangères connectant PRESTATION à ANIMAL et FACTURE acceptent simultanément CASCADE : il exige qu’au moins un CASCADE soir remplacé par NO ACTION (panachage casse-cou ! autant utiliser NO ACTION des deux côtés...)


    Supposons maintenant que la règle soit la suivante : interdiction de supprimer un animal ou une facture pour lesquels il y a des prestations. On décoche donc les cases concernant les prestations :





    En l’occurrence, si où Mme Nono a appuyé sur la touche du clavier qui déclenche une opération de suppression de Paul, voici ce qui lui arrive :





    Suite à quoi, Paul, Zaza, les factures et prestations concernées sont toujours là, tout est resté en place, c’est comme si Mme Nono avait craché en l’air... Ça fonctionne par tout ou rien, jamais à moitié.


    En théorie on peut avoir CASCADE d’un côté et RESTRICT ou NO ACTION de l’autre. Soit les SGBD SQL s’en tamponnent : ils agissent comme si l’on avait CASCADE à la place de RESTRICT ou NO ACTION (cas notamment de MS ACCESS, PostgreSQL et MySQL) ou bien, carrément, ils ne connaissent pas le mot "RESTRICT" (cas de MS SQL Server) :





    Conclusion :

    Quand un stimulus est déclenché suite à une demande de suppression d’un client, il est reçu par les prestations concernées selon deux chemins : via les factures de ce client d’une part, via ses animaux d’autre part. Vu le comportement des SGBD, il est prudent de coder NO ACTION des deux côtés, c'est-à-dire, dans le cas de MS ACCESS, de ne pas cocher les cases « Cascade Delete Related Records ». Ainsi, Mme Nono ne pourra pas supprimer un client qui a des animaux, des factures et des prestations.

    Dans la série « Ceinture, bretelles et épingle à nourrice », il est préférable d’empêcher la suppression d’un client qui a des factures : dans la relation (au sens ACCESS) entre CLIENT et FACTURE, on évitera de cocher la case « Cascade Delete Related Records », même si la suppression des prestations via les factures a été rendue impossible. Cas des animaux ? A vous de jouer, c’est vous qui voyez !


    Que se passe-t-il si le client Albert n’est référencé par rien et qu’on tente de le supprimer ? Les stimuli n’arrivent nulle part, donc Albert sera supprimé.



    Citation Envoyé par Nono02P
    La table FORFAIT comporte le champ id_tva, à la mise à jour de la TVA les montants de tva de la table FORFAIT devant se modifier automatiquement ont besoin de récupérer le même id_date_application... Permettant ainsi de modifier en même temps dans la table TVA ainsi que dans la table FORFAIT les informations de façon automatique semble t'il !
    Je n’ai pas bien compris, pourriez-vous reformuler la question ? Donner un exemple ? Mais ça sent le trigger (et avec ACCESS ça n’est pas gagné...)


    Citation Envoyé par Nono02P
    Petite question sur le fonctionnement, vous vous attribuez vous-même les médailles et les autres personnes les valident ou n'importe qui peut attribuer n'importe quelle médaille à une personne?
    Dans son profil pro (compétences), X se borne à signaler qu’il connaît un sujet (figurant dans une liste), avec un certain niveau de compétence (d’expert à débutant) et, à l’exception de X lui -même, tout le monde peut médailler X. Ainsi, vous voilà médaillable par exemple en DB-MAIN !
    (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.

  18. #18
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Bonsoir fsmrel,


    Citation Envoyé par fsmrel Voir le message
    Je ne tiens pas compte ici du post #16, car je viens seulement de le survoler, et j'ai passé du temps sur le #15...
    Ok, je modifie mon erreur sur la cardinalité des suppléments de prestation (grâce à votre commentaire j'ai vu une bêtise sur ce que j'ai fait qui n'aurais même pas du exister...).
    J'attends que vous répondiez au post #16 pour continuer à envoyer l'avancée !

    Citation Envoyé par fsmrel Voir le message
    De fait, il vaut mieux s’assurer de la cohérence de la prise de rendez-vous ! Si votre épouse prenait un rendez-vous pour Mme Hilary, et qu’arrive M. Donald, ça pourrait créer un incident diplomatique...
    Sur ce coup là, j'ai un peu de mal à suivre...
    Vous voulez dire si elle prévoit un RDV pour M. Donald, mais qu'une erreur se pose dans la BD et qu'il y ai écrit Mme Hilary alors que le client attendu est bien M. Donald?

    Citation Envoyé par fsmrel Voir le message
    Il y a donc possibilité de soins complémentaires : appelons par exemple SOIN_COMPLEMENTAIRE l’entité-type correspondante. Les règles de gestion seraient donc les suivantes :

    (Rx) Une prestation peut être complétée par 0,N soins complémentaires ;
    R(x’) Un soin complémentaire peut être en complément de 0,N prestations.
    C'est donc l'erreur que j'ai faite, je ne sais pas pourquoi mais j'avais écrit
    PRESTATION (0,n)---R---(0,1) SUPPLEMENT
    J'ai bien corrigé pour avoir
    PRESTATION (0,n)---R---(0,n) SUPPLEMENT

    Citation Envoyé par fsmrel Voir le message
    (Incidemment, pour présenter les règles de gestion des données, il serait préférable que vous remplaciez la balise QUOTE par la balise PRE, cela faciliterait la lecture, éviterait l’utilisation des ascenseurs).
    Je modifie les anciens posts, et à l'avenir je mettrai QUOTE (je ne sais pas ce que vous entendez par PRE, en fait j'utilisais CODE) !

    Citation Envoyé par fsmrel Voir le message
    Ce qui est de bon sens. Mais comme disait notre bon roi François, « Souvent femme varie, bien fol qui s’y fie »...
    Vous avez raison, surtout la mienne elle change rapidement d'avis jusqu'à ce que je m'oppose, donnant forcément suite à un incident diplomatique !

    Citation Envoyé par fsmrel Voir le message
    A supposer qu’un jour on puisse avoir deux fois la même prestation pour une facture il ne faudra pas oublier de compléter la clé primaire, avec un numéroteur de dédoublonnage, pour fixer les idées, appelons-le id_prestation, d’où évolution ce jour-là de la composition de la clé primaire, devenant alors {id_client, id_animal, id_facture, id_prestation}.
    Donc si je comprend bien, là où on a {id_client, id_animal, id_facture} on aurait {id_client, id_animal, id_facture, id_prestation} ?


    Citation Envoyé par fsmrel Voir le message
    Cela dit, se présente le cas du supplément de prestation : si aujourd’hui on décide que la clé primaire de la table PRESTATION est le triplet {id_client, id_animal, id_facture}, la table PRESTATION_SUPPLEMENT sera dotée d’une clé étrangère {id_client, id_animal, id_facture}. Quid, si un jour la clé primaire de PRESTATION devenait {id_client, id_animal, id_facture, id_prestation} ? Il y aurait en vue une opération de maintenance, dont on se serait volontiers passé...

    Je propose donc, pour la table PRESTATION, que l’on ravale le triplet {id_client, id_animal, id_facture} au rang de clé alternative (l’unicité des valeurs est garantie) et que l’on mette en œuvre une clé primaire {id_client, id_prestation} ou , au choix, {id_client, id_animal, id_prestation}. Si donc d’aventure, on risquait un jour d’avoir légitimement deux fois la même prestation, il suffirait de supprimer la clé alternative devenue obsolète, tandis que la clé primaire serait insensible à l’évolution, d’où absence de maintenance supplémentaire (maintenance donnant lieu à des effets de bord touchant des tables comme PRESTATION_SUPPLEMENT).
    C'est là que je regrette de ne jamais avoir eu aucune notion de base de données lors de mes études ou formations !
    J'essaye d'apprendre par moi même mais toute la méthodologie ainsi que les termes utilisés me sont pour la plus part inconnus, vous vous en êtes d'ailleurs rendu compte avec les préfixes de mes tables de départ (cette méthode est plutôt pratique pour identifier rapidement un type de donnée dans des lignes de code... Mais surement pas pour ce que j'en faisait) !

    Ne voyant pas trop ce qu'était une clé alternative, j'ai lancé une recherche sur google, après le moulinage de celui-ci je suis tombé sur ça :
    http://www.developpez.net/forums/d75...tive-supercle/

    Je pense que vous ne serez pas contre la réponse #2...
    Vous êtes vraiment partout !


    Citation Envoyé par fsmrel Voir le message
    Pas exactement... La règle d’or permet d’éviter une maintenance redoutable à tous les plans (technique, financier...) en cas de nécessité de modifier la structure des identifiants (donc des clés primaires), si tant est qu’on ne soit pas obligé de mettre le système existant à la poubelle et repartir de zéro.

    J’ai connu ça assez souvent. Je prends l’exemple d’une entreprise dans la grande distribution, où l’on retrouvait dans à peu près toutes les tables, un code du genre EAN comme clé primaire et/ou étrangère, qui était significatif et que l’utilisateur mettait souvent à mal : la base de données était toujours à réorganiser, les temps de traitement étaient très pénalisés, et la solution ne pouvait consister en un passage à un ordinateur plus puissant, avec ajout de mémoire et tout ça : il a fallu prendre le taureau par les cornes et construire un système tout neuf...
    Tout comme l'anecdote concernant une grande banque sur votre lien...
    Je comprend mieux le but, merci


    Citation Envoyé par fsmrel Voir le message
    Quand un stimulus est déclenché suite à une demande de suppression d’un client, il est reçu par les prestations concernées selon deux chemins : via les factures de ce client d’une part, via ses animaux d’autre part. Vu le comportement des SGBD, il est prudent de coder NO ACTION des deux côtés, c'est-à-dire, dans le cas de MS ACCESS, de ne pas cocher les cases « Cascade Delete Related Records ». Ainsi, Mme Nono ne pourra pas supprimer un client qui a des animaux, des factures et des prestations.
    Hahaha ! Merci de la piqure de rappel, lors de ma première BD j'ai eu un mauvais souvenir de cette option permettant de supprimer en chaine les enregistrements liés...
    Depuis j'avais renommé ce bouton en "touche pas à ça petit con".
    Mais n'ayant jamais utilisé des relations comme celles que vous présentez dans votre post, je ne connaissais pas la réaction du système !


    Citation Envoyé par fsmrel Voir le message
    il est préférable d’empêcher la suppression d’un client qui a des factures
    Pour aller plus loin, apparemment depuis quelques temps les logiciels de gestion de facturation doivent obligatoirement empêcher la suppression de toute facture entamée ! Aucun trou dans les numéros de facture ne peut être permis.

    D'où la présence d'un boolean annuler et un commentaire sur l'annulation dans ma BD !
    Cette info m'a été confirmée vendredi dernier par un expert comptable.
    Donc si elle commence une facture, deux choix s'offriront à elle :
    - Aller jusqu'au bout et facturer le client.
    - L'annuler et décrire la raison de l'annulation.




    Citation Envoyé par fsmrel Voir le message
    Je n’ai pas bien compris, pourriez-vous reformuler la question ? Donner un exemple ? Mais ça sent le trigger (et avec ACCESS ça n’est pas gagné...)
    Haha, pour que vous ne comprenez pas ce que j'ai voulu dire, c'est que je me suis vraiment mal exprimé ! Désolé.

    Je voulais dire qu'en fait au moment de remettre à jour la tva, le système viendrais écrire la date d'application de la tva automatiquement (à la demande de mise à jour, ça part tout de même d'une demande venant de l'opératrice) dans la table DATE_APPLIC_PRIX.
    Vu que pour la table TVA les identifiants sont {id_tva, id_date_applic_prix}...
    Il y aura alors un nouvel enregistrement où l'on devra rentrer la valeur...
    Cependant si ce fameux taux change, les prix doivent changer aussi en fonction de celui-ci.
    Donc par exemple les prix des forfaits devront être remis à jour, et si ça se remettait à jour automatiquement par rapport à la date d'application de la tva ça éviterait à ma femme de réfléchir.

    Donc au vu du mot trigger, oui je présume que c'est bien ça...
    Si c'est trop compliqué à mettre en oeuvre, on oubli


    J'ai un peu de mal à me faire comprendre des fois quand j'ai une idée en tête, n'hésitez pas à me le dire si je ne suis pas compréhensible.


    Citation Envoyé par fsmrel Voir le message
    Dans son profil pro (compétences), X se borne à signaler qu’il connaît un sujet (figurant dans une liste), avec un certain niveau de compétence (d’expert à débutant) et, à l’exception de X lui -même, tout le monde peut médailler X.
    Arf !
    En fait j'aurais voulu vous attribuer la médaille "Grand pédagogue" (mais après vérification, elle n'existe pas !)

    Citation Envoyé par fsmrel Voir le message
    Ainsi, vous voilà médaillable par exemple en DB-MAIN !
    Médaillable avec un niveau encore en dessous de débutant, plutôt quelque chose du genre "Gros noob"





    Bon sur ce, je vais me coucher... Demain boulot !
    Bonne nuit, j'attends donc un petit peu pour que vous ayez le temps d'analyser mon post avant de poster d'autres infos.
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  19. #19
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut Hilary ? Donald ?
    Bonsoir Nono,



    Citation Envoyé par Nono

    Citation Envoyé par fsmrel

    De fait, il vaut mieux s’assurer de la cohérence de la prise de rendez-vous ! Si votre épouse prenait un rendez-vous pour Mme Hilary, et qu’arrive M. Donald, ça pourrait créer un incident diplomatique...
    Sur ce coup là, j'ai un peu de mal à suivre...
    Vous voulez dire si elle prévoit un RDV pour M. Donald, mais qu'une erreur se pose dans la BD et qu'il y ai écrit Mme Hilary alors que le client attendu est bien M. Donald?
    Encore une contrainte de chemin à prévoir...

    Du point de vue de la base de données, de l’intégrité référentielle notamment, le scénario ci-dessous est tout à fait légal. D’après le contenu de la table CLIENT_RDV, rendez-vous est pris avec le client 200, à savoir Mme Hilary, mais rien n’interdit qu’au vu du contenu (légal) de la table ANIMAL_RDV, ça soit le toutou 458 qui se trouve concerné, c'est-à-dire le toutou de M. Donald :

    
    CLIENT { id_client    nom_client }
             100          Donald
             200          Hilary
    
    
    ANIMAL { id_animal    id_client    nom_animal }
             458          100          Zaza
             987          200          Zaza
    
    
    CLIENT_RDV { id_rdv_client    id_client }
                 1234             200
    
    
    ANIMAL_RDV { id_animal_rdv    id_animal    id_rdv_client }
                 8445             458          1234
    
    
    Imaginons que Mme Nono ait eu un instant de distraction (coup de téléphone intempestif de son mari au moment où elle se concentre, etc.), alors qu’elle était en train de prendre un rendez-vous pour une toute nouvelle cliente, en l’occurrence Mme Hilary, désirant un bain complet pour sa petite chienne Zaza. Mme Nono a saisi les coordonnées de Mme Hilary, et les données relatives à Zaza. C’est au moment de la prise de rendez-vous pour Zaza (cf. la table ANIMAL_RDV) que l’attention de Mme Nono a été détournée, et quand elle est revenue à son sujet, elle a confondu la Zaza de Mme Hilary avec la Zaza de M. Donald, un charmant et vieux client de près de 10 ans. On peut supposer que M. Donald ne se sera pas déplacé, mais il n’en demeure pas moins que le contenu de la table pose un problème...

    Si l’on prévoit de garantir la contrainte de chemin, Mme Nono ne se fera plus piéger :

    
    CLIENT { id_client    nom_client }
             100          Donald
             200          Hilary
    
    
    ANIMAL { id_client    id_animal    nom_animal }
             100          458          Zaza
             200          987          Zaza
    
    
    CLIENT_RDV { id_client    id_rdv_client }
                 200          1234
    
    
    ANIMAL_RDV { id_client    id_rdv_client    id_animal }
                 ?            ?                ?            
    
    
    Je vous laisse le soin de remplacer les « ? » par les valeurs légales, c'est-à-dire dans le respect de l’intégrité référentielle, et essayez maintenant de faire prendre la vessie d’une Zaza pour la lanterne de son homonyme...

    A cette occasion, l’attribut id_animal_rdv devient inutile.



    Citation Envoyé par Nono
    Citation Envoyé par fsmrel
    A supposer qu’un jour on puisse avoir deux fois la même prestation pour une facture il ne faudra pas oublier de compléter la clé primaire, avec un numéroteur de dédoublonnage, pour fixer les idées, appelons-le id_prestation, d’où évolution ce jour-là de la composition de la clé primaire, devenant alors {id_client, id_animal, id_facture, id_prestation}.
    Donc si je comprend bien, là où on a {id_client, id_animal, id_facture} on aurait {id_client, id_animal, id_facture, id_prestation} ?
    Si le triplet {id_client, id_animal, id_facture} est clé primaire, oui, il faut passer au quadruplet pour dédoublonner. Si le triplet est clé alternative (contrainte UNIQUE en SQL), il devra perdre cette qualification.



    Citation Envoyé par Nono
    Je pense que vous ne serez pas contre la réponse #2...
    De fait, ça a l’air d’être du béton...



    Citation Envoyé par Nono
    J'essaye d'apprendre par moi même mais toute la méthodologie ainsi que les termes utilisés me sont pour la plus part inconnus
    Vous pouvez flâner par ici, vous y retrouverez les concepts (n’oubliez pas les annexes A et B).

    Mais l’ouvrage de référence où tout est dit de façon rigoureuse et compréhensible, le seul, l’unique, le vrai, l’incontournable, c’est « An Introduction to Database Systems » (eighth edition) de C.J. Date (près d'un million d'exemplaires vendus...) Recherchez-le (d’occasion, c’est quand même moins cher !). Son ISBN : 0-321-18956-6. Essayez chez AbeBooks et autres (par exemple ici). Les prix vont de moins de 10 euros à plus de 150 euros (en neuf)... Evitez les sites indiens, ils rajoutent en général un surcoût non prévu pour le poids.



    Citation Envoyé par Nono
    N'ayant jamais utilisé des relations comme celles que vous présentez dans votre post, je ne connaissais pas la réaction du système !
    Si j’y pense et si j’en ai le temps, je pondrai un billet sur l’algorithme sur lequel — selon toute vraisemblance — il y a un consensus.



    Citation Envoyé par Nono
    Donc au vu du mot trigger, oui je présume que c'est bien ça...
    Si c'est trop compliqué à mettre en oeuvre, on oublie
    Pour le moment je n’examine pas cette partie, je préfère développer la spirale en partant du cœur. Quand le chalut ramassera la TVA, on essaiera d’aviser.



    Citation Envoyé par Nono
    En fait j'aurais voulu vous attribuer la médaille "Grand pédagogue" (mais après vérification, elle n'existe pas !)
    Rien ne devrait vous empêcher de la créer , en lui faisant un brin de toilette du genre « pédagogie et art des bases de données relationnelles », « théorie relationnelle et pédagogie », que sais-je...


    Bon, c’est pas tout ça, mais j’ai plein de fers au feu, les forumeurs piaillent et je n’ai pas encore regardé votre post #16, je vais essayer de m’y mettre, avant de m’endormir sur le clavier (ça m’est déjà arrivé...)



    Citation Envoyé par Nono
    Voilà, c'est passé de CODE à QUOTE !
    Heu... Quand j’ai écrit « que vous remplaciez la balise QUOTE par la balise PRE », je me suis planté, il fallait lire « que vous remplaciez la balise CODE par la balise PRE ».

    En tout cas, PRE fatigue moins les yeux, mais bon...

    Bonne nuit !
    (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.

  20. #20
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Bonjour fsmrel,

    Citation Envoyé par fsmrel Voir le message
    Encore une contrainte de chemin à prévoir...

    Du point de vue de la base de données, de l’intégrité référentielle notamment, le scénario ci-dessous est tout à fait légal. D’après le contenu de la table CLIENT_RDV, rendez-vous est pris avec le client 200, à savoir Mme Hilary, mais rien n’interdit qu’au vu du contenu (légal) de la table ANIMAL_RDV, ça soit le toutou 458 qui se trouve concerné, c'est-à-dire le toutou de M. Donald :
    Donc mes soupçons se sont avérés vrais...

    Citation Envoyé par fsmrel Voir le message
    coup de téléphone intempestif de son mari au moment où elle se concentre, etc.
    Ça c'est peut probable, cependant elle n'a pas besoin de moi pour être déconcentré

    Citation Envoyé par fsmrel Voir le message
    
    CLIENT { id_client    nom_client }
             100          Donald
             200          Hilary
    
    
    ANIMAL { id_client    id_animal    nom_animal }
             100          458          Zaza
             200          987          Zaza
    
    
    CLIENT_RDV { id_client    id_rdv_client }
                 200          1234
    
    
    ANIMAL_RDV { id_client    id_rdv_client    id_animal }
                 ?            ?                ?            
    
    
    ANIMAL_RDV {id_client, id_rdv_client, id_animal }
    200, 1234, 987 (le dernier étant fixé par la règle de gestion entre CLIENT et RDV_CLIENT et la règle que vous avez déjà créé pour la facturation de prestations à savoir entre CLIENT et ANIMAL)

    De mémoire, c'est ce que j'ai appliqué sur le post #16 (je dis de mémoire parce que je suis connecté avec le téléphone et que je ne suis pas devant).
    Donc grâce à votre première explication, j'ai semble t'il réussi à identifier le problème tout seul...
    Et grâce à la deuxième, je crois avoir réussi à le résoudre (vu que cette solution ressemble énormément avec ce que j'ai en mémoire de mes modifications)...
    Bref vous me direz après analyse si mon raisonnement post #16 a été le bon




    Citation Envoyé par fsmrel Voir le message
    Si le triplet {id_client, id_animal, id_facture} est clé primaire, oui, il faut passer au quadruplet pour dédoublonner. Si le triplet est clé alternative (contrainte UNIQUE en SQL), il devra perdre cette qualification.
    Je comprends, en rajoutant un id_prestations on pourrait rajouter autant de prestations que voulu avec le même id_client, id_animal, id_facture... Ce qui revient à facturer plusieurs prestations sur un même animal dans une et une seule facture !



    Citation Envoyé par fsmrel Voir le message
    Vous pouvez flâner par ici, vous y retrouverez les concepts (n’oubliez pas les annexes A et B).

    Mais l’ouvrage de référence où tout est dit de façon rigoureuse et compréhensible, le seul, l’unique, le vrai, l’incontournable, c’est « An Introduction to Database Systems » (eighth edition) de C.J. Date (près d'un million d'exemplaires vendus...) Recherchez-le (d’occasion, c’est quand même moins cher !). Son ISBN : 0-321-18956-6. Essayez chez AbeBooks et autres (par exemple ici). Les prix vont de moins de 10 euros à plus de 150 euros (en neuf)... Evitez les sites indiens, ils rajoutent en général un surcoût non prévu pour le poids.
    Je jette un oeil dès ce soir !




    Citation Envoyé par fsmrel Voir le message
    Pour le moment je n’examine pas cette partie, je préfère développer la spirale en partant du cœur. Quand le chalut ramassera la TVA, on essaiera d’aviser.
    Ok, on le garde pour plus tard

    Citation Envoyé par fsmrel Voir le message
    Bon, c’est pas tout ça, mais j’ai plein de fers au feu, les forumeurs piaillent et je n’ai pas encore regardé votre post #16, je vais essayer de m’y mettre, avant de m’endormir sur le clavier (ça m’est déjà arrivé...)
    Pour tout vous dire, l'après post 15 à a été difficile.... EDIT : Bouhh ! Des fautes il m'arrive d'en faire régulièrement mais celle là me pique les yeux...
    Le lendemain matin je me suis fait engueuler par Madame parce que le pc était resté posé sur le lit (je dormais presque dessus) et prenait toute la place


    Citation Envoyé par fsmrel Voir le message
    Heu... Quand j’ai écrit « que vous remplaciez la balise QUOTE par la balise PRE », je me suis planté, il fallait lire « que vous remplaciez la balise CODE par la balise PRE ».

    En tout cas, PRE fatigue moins les yeux, mais bon...
    M**de, je ne voyais pas pre dans la liste en haut (à la conception du mail). Désolé, EDIT (17/03/16 à 07:57) en plus je ne peux plus l'éditer ! Je vous l'ai modifié en PRE sur le post #16. ;-)

    Les suivants seront en pre.

    Si vous voulez une meilleure lisibilité, le fichier Excel que je vous ai joint au post #16 devrait vous faciliter la lecture.
    Pour rappel il y a des mises en forme conditionnelles faisant s'éclairer en jaune les modifications dans les règles vis à vis de la version précédente...

    Je vous remercie encore pour l'aide précieuse que vous m'apportez, je sent qu'elle va être solide cette base de données...
    Et mes suivantes créations seront beaucoup mieux réalisées que mes deux précédentes grâce à vous !

    Malheureusement, le partage de connaissances va plus dans un sens que dans l'autre...
    Si un jour vous avez à programmer un API (je ne parle pas d'informatique mais d'un Automate Programmable Industriel), un HMI (toujours dans l'industrie, c'est un poste de supervision ou un écran tactile par exemple), un régulateur, ou que vous éprouvez des difficultés à contrôler un capteur... Je me ferai un plaisir de pouvoir vous rendre service !

    Je vous souhaite une excellente journée fsmrel !
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

Discussions similaires

  1. Réponses: 17
    Dernier message: 21/07/2015, 11h32
  2. Avis, conseils sur "rentabiliweb"
    Par __fabrice dans le forum SSII
    Réponses: 0
    Dernier message: 29/11/2012, 12h22
  3. Avis/Conseil sur DC pour gestion personnel
    Par draghysck dans le forum Diagrammes de Classes
    Réponses: 4
    Dernier message: 03/06/2009, 08h42
  4. Avis-conseil sur conception simple DC / appli gestion fiches
    Par Okaryn dans le forum Diagrammes de Classes
    Réponses: 7
    Dernier message: 14/04/2009, 12h53
  5. [Avis] Conseil sur un élement WEB
    Par Delphy113 dans le forum Webdesign & Ergonomie
    Réponses: 3
    Dernier message: 29/01/2007, 15h11

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