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

Looping Discussion :

gestion de sièges des voitures


Sujet :

Looping

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    février 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2021
    Messages : 7
    Points : 3
    Points
    3
    Par défaut gestion de sièges des voitures
    Salut tous le monde, le problème parait simple mais un peu compliqué pour moi.
    l'énoncé du problème: On voudrai réaliser une toute petite application sur la gestion de montage des sièges sur des voitures.
    le siège peut avoir 3 états; monté oui démonté d'une voiture, ou stocké dans un magasin.
    si c'est le cas d'un montage on spécifie la position(droite, gauche, arrière).
    le siège peut avoir une ou plusieurs états(monté, démonté ou stocké) sur une ou plusieurs voitures et pendants des dates différentes.
    aidez-moi svp et merci...
    Nom : gest_siege.png
Affichages : 104
Taille : 33,4 Ko

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 562
    Points : 25 376
    Points
    25 376
    Billets dans le blog
    2
    Par défaut
    Bonjour Ghani_Ghani

    Sans doute voulez-vous vérifier que tel siège monté à tel emplacement de tel véhicule est bien compatible avec l'emplacement et le modèle de véhicule : on ne monte pas un siège arrière droit de Renault espace millésime 2012 à l'avant gauche d'une opel Kadett de 1980...

    A partir de la, il faut connaitre les affectations possibles de chaque siège pour vérifier qu'on en a en stock avant de pouvoir les monter, faute de quoi il faudra les commander ou les fabriquer.

    Je ne sais pas quel logiciel de modélisation vous utilisez, mais le diagramme est un modèle tabulaire.
    Il est préférable de commencer par le modèle conceptuel, ça évite bien des erreurs.
    Si votre logiciel ne permet pas d'établir un MCD, je vous recommande Looping, simple, efficace et gratuit, que vous pouvez télécharger ici : https://www.looping-mcd.fr/

    Voici un exemple de MCD pour ce qui concerne la partie gestion des sièges et des véhicules :
    Nom : Sans titre.png
Affichages : 96
Taille : 16,9 Ko

    Pour réaliser ce modèle, j'ai supposé les règles de gestion suivantes
    R001a : un siège s'adapte sur un à plusieurs emplacements d'un ou plusieurs véhicules
    R001b : à un emplacement de véhicule peuvent s'adapter un à plusieurs sièges

    R002a : un emplacement est possédé par un et un seul millésime de modèle
    R002b : un modèle-millésime possède un à plusieurs emplacements

    R003a : un modèle-millésime appartient à un et un seul modèle
    R003b : un modèle peut avoir un à plusieurs modèles-millésimes

  3. #3
    Membre chevronné
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    juin 2019
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2019
    Messages : 457
    Points : 1 856
    Points
    1 856
    Par défaut
    Bonjour,

    Pour aller dans le même sens que escartefigue, je vous recommande de commencer par bien bétonner la partie conceptuelle de votre système d'information.
    Le logiciel que vous utilisez (que je ne connais a priori pas...) propose directement un MLD... avec une notation un peu hybride pour les liens (une espèce de demi "Crow’s foot").
    Réalisez donc tout d'abord le MCD avec le logiciel de votre choix (la suggestion d'escartefigue me paraissant excellente... mais peut-être manqué-je d'objectivité ! ).
    Ensuite le MLD, ainsi que les requêtes SQL de création du schéma relationnel de la base de données, seront générés automatiquement par le logiciel.

    Bonne continuation.
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  4. #4
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    février 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2021
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour et merci pour ta réponse
    c'est fait pour le logiciel recommandé.
    je trouve des difficulté de combiner les trois opérations(monter ou démonter d'une voiture, ou stocker dans un magasin) dans une seule mcd .
    aussi est-il juste d'ajouter un attribut 'date' sur l'association 's'adapter'.
    merci d'avance.
    Nom : model.jpg
Affichages : 91
Taille : 39,5 Ko

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 562
    Points : 25 376
    Points
    25 376
    Billets dans le blog
    2
    Par défaut
    Bravo pour le téléchargement de Looping

    Avant d'aller détailler le MCD, il convient de bien rédiger les règles de gestion. J'avais donné un exemple plus haut.

    Concernant le stockage, on ne stocke pas directement un modèle de siège qui convient pour un millésime modèle MM0, mais le siège portant le n° de série S1 convenant à ce modèle MM0 dans le magasin MG1 et le siège portant le numéro de série S2 pour ce même modèle MM0 dans le magasin M2.
    Il faut donc distinguer le modèle de siège adapté à tel ou tel modèle-millésime de véhicule de l'exemplaire de siège stocké à tel ou tel endroit ou monté sur tel ou tel véhicule à un instant "t"

  6. #6
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    février 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2021
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    j'essaie d'expliquer la chose, pour les règles de gestion:
    R1- un siège peut être monté sur une telle voiture à un instant 't', ayant une position parmi plusieurs positions(ex: position chauffeur ou passager).
    R2- un siège peut être démonté d'une telle voiture à l'instant 't'.
    R-3-un siégé peut être stocké à un magasin à l'instant 't'.
    R4- un siège peut avoir plusieurs opérations à des dates différentes(ex: un siège 'sg1' peut être démonté d'une voiture 'v1' à l'instant t1, et se stocke dans le magasin 'mg1' à l'instant 't2' puis se pose sur le coté chauffeur de la même voiture'v1' à 't3'.

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 562
    Points : 25 376
    Points
    25 376
    Billets dans le blog
    2
    Par défaut
    Voici un exemple de schéma possible, dans lequel j'ai ajouté :

    le type d'entité XS_exemplaire_siège chaque occurrence de ce type d'entité contiendra une ligne par exemplaire avec sa date de fabrication, son numéro de série, ses dimensions, etc. L'exemplaire concerne un et un seul modèle de siège et chaque siège peut exister en plusieurs exemplaires.

    le type d'entité AF_affectation qui permet de gérer les affectations. Le cercle rouge CIF (Contrainte d'Intégrité Fonctionnelle) et la flèche matérialisent que pour un exemplaire de siège, et une date (CA_calendrier) il n'y a qu'une seule affectation possible.

    VE_Vehicule c'est le véhicule sur lequel est installé le siège
    à moins que l'affectation concerne un stockage en magasin dans MG_magasin
    Le cercle jaune noté x est également une CIF qui matérialise qu'une affectation concerne un véhicule ou un magasin, pas les deux.

    Nom : Sans titre.png
Affichages : 95
Taille : 44,1 Ko

    Enfin le nom du type d'entité CA_calendrier est entre parenthèses car cette entité-type ne deviendra pas une table.
    Elle n'est nécessaire que pour contribuer à constituer la PK de la table associative ternaire XF_affecter : PK qui sera composée de XS_ident (identifiant de l'exemplaire du siège) et CA_date.

    Voici le script correspondant, créé automatiquement par Looping en sélectionnant le SGBD SQL server.

    Code SQL : 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
    CREATE TABLE SG_siege(
       SG_ident INT IDENTITY,
       SG_reference CHAR(8) NOT NULL,
       PRIMARY KEY(SG_ident),
       UNIQUE(SG_reference)
    );
     
    CREATE TABLE MO_modele(
       MO_ident INT IDENTITY,
       MO_reference CHAR(10) NOT NULL,
       MO_nom_commercial VARCHAR(50) NOT NULL,
       PRIMARY KEY(MO_ident),
       UNIQUE(MO_reference)
    );
     
    CREATE TABLE XS_exemplaire_siege(
       SG_ident INT,
       XS_ident INT IDENTITY,
       XS_numserie SMALLINT NOT NULL,
       XS_date_fab DATE NOT NULL,
       PRIMARY KEY(SG_ident, XS_ident),
       UNIQUE(XS_numserie),
       FOREIGN KEY(SG_ident) REFERENCES SG_siege(SG_ident)
    );
     
    CREATE TABLE MG_magasin(
       MG_ident INT IDENTITY,
       MG_ref CHAR(12) NOT NULL,
       MG_libelle VARCHAR(50) NOT NULL,
       PRIMARY KEY(MG_ident),
       UNIQUE(MG_ref)
    );
     
    CREATE TABLE MM_modele_millesime(
       MO_ident INT,
       MM_ident INT IDENTITY,
       MM_dtdeb VARCHAR(50) NOT NULL,
       PRIMARY KEY(MO_ident, MM_ident),
       FOREIGN KEY(MO_ident) REFERENCES MO_modele(MO_ident)
    );
     
    CREATE TABLE VE_vehicule(
       MO_ident INT,
       MM_ident INT,
       VE_ident INT IDENTITY,
       VE_num_chassis CHAR(15) NOT NULL,
       VE_date_fab DATE NOT NULL,
       PRIMARY KEY(MO_ident, MM_ident, VE_ident),
       UNIQUE(VE_num_chassis),
       FOREIGN KEY(MO_ident, MM_ident) REFERENCES MM_modele_millesime(MO_ident, MM_ident)
    );
     
    CREATE TABLE EM_emplacement(
       MO_ident INT,
       MM_ident INT,
       EM_ident INT IDENTITY,
       EM_code CHAR(4) NOT NULL,
       EM_libelle VARCHAR(50) NOT NULL,
       PRIMARY KEY(MO_ident, MM_ident, EM_ident),
       UNIQUE(EM_code),
       FOREIGN KEY(MO_ident, MM_ident) REFERENCES MM_modele_millesime(MO_ident, MM_ident)
    );
     
    CREATE TABLE AF_affectation(
       AF_ident INT IDENTITY,
       MG_ident INT,
       MO_ident INT,
       MM_ident INT,
       VE_ident INT,
       PRIMARY KEY(AF_ident),
       FOREIGN KEY(MG_ident) REFERENCES MG_magasin(MG_ident),
       FOREIGN KEY(MO_ident, MM_ident, VE_ident) REFERENCES VE_vehicule(MO_ident, MM_ident, VE_ident)
    );
     
    CREATE TABLE SV_adapter(
       SG_ident INT,
       MO_ident INT,
       MM_ident INT,
       EM_ident INT,
       PRIMARY KEY(SG_ident, MO_ident, MM_ident, EM_ident),
       FOREIGN KEY(SG_ident) REFERENCES SG_siege(SG_ident),
       FOREIGN KEY(MO_ident, MM_ident, EM_ident) REFERENCES EM_emplacement(MO_ident, MM_ident, EM_ident)
    );
     
    CREATE TABLE XF_affecter(
       SG_ident INT,
       XS_ident INT,
       CA_date DATE,
       AF_ident INT NOT NULL,
       PRIMARY KEY(SG_ident, XS_ident, CA_date),
       FOREIGN KEY(SG_ident, XS_ident) REFERENCES XS_exemplaire_siege(SG_ident, XS_ident),
       FOREIGN KEY(AF_ident) REFERENCES AF_affectation(AF_ident)
    );

  8. #8
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    février 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2021
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    merci infiniment.
    j'ai une ambiguïté sur l'entité 'CA_calendrier', comment t-il possible de ne pas la considérer comme table, et forcer sa clé primaire à participer dans une association comme clé primaire

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 562
    Points : 25 376
    Points
    25 376
    Billets dans le blog
    2
    Par défaut
    Dans looping, quand un type d'entité ne possède qu'un seul attribut, son identifiant, alors une case à cocher apparaît "entité fictive".
    Cocher cette case permet de ne pas générer la table correspondante dans le MLD / MPD.
    Par contre, comme pour toute association n-aire, l'identifiant de la table associative est bien constitué des identifiants de chaque type d'entité participante, du coup la date intervient bien dans la PK de la table XF_affecter

    À l'inverse, l'identifiant de l'affectation ne participe pas à la PK de cette même table associative XF_affecter gràce à la CIF en rouge qui stipule que pour une date et un exemplaire, une seule affectation est possible (flèche vers affectation).
    Du coup, l'identifiant de l'affectation devient un simple attribut de la table associative et par la force des choses, unique pour la paire id exemplaire, date

  10. #10
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    février 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2021
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    merci pour l'aide précieux

  11. #11
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    février 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2021
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    bon, j'ai un autre problème, j'essaie de travailler avec looping mais je n'arrive pas à tracer CIF rouge, l'icone 'lien' ne donne pas le résultat souhaité, comment faire?

  12. #12
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    juillet 2012
    Messages
    8 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : juillet 2012
    Messages : 8 568
    Points : 79 601
    Points
    79 601
    Billets dans le blog
    15
    Par défaut
    Salut,

    J'ai déplacé le fil dans le forum dédié à Looping.

    Bonne continuation à tous sur nos forums et merci pour vos contributions
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  13. #13
    Membre chevronné
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    juin 2019
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2019
    Messages : 457
    Points : 1 856
    Points
    1 856
    Par défaut
    Bonsoir,
    Citation Envoyé par ghani_ghani Voir le message
    bon, j'ai un autre problème, j'essaie de travailler avec looping mais je n'arrive pas à tracer CIF rouge, l'icone 'lien' ne donne pas le résultat souhaité, comment faire?
    Afin que nous puissions vous aider, envoyez-nous le modèle dans l'état où il se trouve et dites-nous ce que vous souhaitez obtenir.
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  14. #14
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    7 588
    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 : 7 588
    Points : 28 985
    Points
    28 985
    Billets dans le blog
    16
    Par défaut
    ghani_ghani,  


    Pour construire votre CIF, inspirez-vous de ce qui a été fait ici.
    (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à pout ça.

  15. #15
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    7 588
    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 : 7 588
    Points : 28 985
    Points
    28 985
    Billets dans le blog
    16
    Par défaut
    Escartefigue, quelques remarques.


    A quoi sert d’identifier l’entité-type VE_vehicule relativement à l’entité-type MM_modele_millesime ? Sémantiquement parlant, cela n’aurait de sens que si la première était une propriété multivaluée de la seconde, c’est-à-dire si la suppression d’un modèle millésimé impliquait la suppression des véhicules qui s’y rattachent. Dans ce qui suit, j’ai donc pris le parti d’éviter l’identification relative. Vu de SQL) :

    CREATE TABLE VE_vehicule(
       VE_ident INT IDENTITY,
       VE_num_chassis CHAR(15) NOT NULL,
       VE_date_fab DATE NOT NULL,
       PRIMARY KEY( VE_ident),
       UNIQUE(VE_num_chassis),
       FOREIGN KEY(MO_ident, MM_ident) REFERENCES MM_modele_millesime(MO_ident, MM_ident)
    ); 
    Conséquence sur la table AF_affectation, laquelle doit par ailleurs faire l’objet d’une clé alternative {MG_ident, VE_ident} pour éviter les doublons :

    CREATE TABLE AF_affectation(
       AF_ident INT IDENTITY,
       MG_ident INT,
       VE_ident INT,
       PRIMARY KEY(AF_ident),
       UNIQUE(MG_ident, VE_ident),  
       FOREIGN KEY(MG_ident) REFERENCES MG_magasin(MG_ident),
       FOREIGN KEY(VE_ident) REFERENCES VE_vehicule(VE_ident)
    ); 
    Pour garantir la contrainte d’exclusion, c’est-à-dire empêcher qu’une affectation fasse référence à la fois à un magasin et à un véhicule (ou à ni l’un ni l’autre ! double Null...), un moyen de le faire est de créer une fonction à incorporer à une contrainte dans la table AF_affectation :

    GO
    CREATE FUNCTION AF_affectation_exclusion_FN()
    RETURNS INT  
    AS   
    BEGIN  
       DECLARE @n INT  
    
       SELECT @n = COUNT(*) 
       FROM   AF_affectation as x
         JOIN AF_affectation as y ON x.AF_ident = y.AF_ident
              AND (x.MG_ident IS NULL OR y.VE_ident IS NOT NULL) 
              AND (x.MG_ident IS NOT NULL or y.VE_ident IS NULL)
    
       RETURN @n  
    END ;  
    GO  
    
    ALTER TABLE AF_affectation  
        ADD CONSTRAINT AF_affectation_EXCLUSION_CHK 
            CHECK (dbo.AF_affectation_exclusion_FN() = 0) ;  
    GO 
    S’il y a des millions de sièges à traiter, la fonction pourrait poser des problèmes de performance, auquel cas on la remplacera par un trigger, bien plus filtrant.


    Par ailleurs, tu sais que je tire à vue quand le bonhomme NULL rôde. Pour l’empêcher de pointer le bout de son nez, on peut demander à Looping de transformer les associations Asso 8 et Asso 9 en entités-types impliquant une contrainte d’exclusion, et donnant lieu à deux tables SQL, faisant donc chacune l’objet d’une contrainte impliquant une fonction.

    Rebattons donc les cartes :

    CREATE TABLE AF_affectation(
       AF_ident INT IDENTITY,
       AF_code  CHAR(8) NOT NULL
       PRIMARY KEY(AF_ident),
       UNIQUE (AF_code)
    );
    
    INSERT INTO AF_affectation (AF_code)
    VALUES ('aff01'), ('aff02'), ('aff03')
         , ('aff11'), ('aff12'), ('aff13')
    ;
    
    CREATE TABLE Asso8
    (
          AF_ident    INT  NOT NULL,
          VE_ident    INT  NOT NULL,
       PRIMARY KEY(AF_ident),
       FOREIGN KEY(AF_ident) REFERENCES AF_affectation(AF_ident),
       FOREIGN KEY(VE_ident) REFERENCES VE_vehicule(VE_ident)
    ) ;
    
    CREATE TABLE Asso9
    (
          AF_ident    INT  NOT NULL,
          MG_ident    INT  NOT NULL,
       PRIMARY KEY(AF_ident),
       FOREIGN KEY(AF_ident) REFERENCES AF_affectation(AF_ident),
       FOREIGN KEY(MG_ident) REFERENCES MG_magasin(MG_ident)
    ) ;
    
    GO
    CREATE FUNCTION AF_affectation_exclusion_FN()
    RETURNS INT  
    AS   
    BEGIN  
       DECLARE @n INT  
       SELECT @n = COUNT(*) 
       FROM   Asso8 as x
         JOIN Asso9 as y ON x.AF_ident = y.AF_ident
       RETURN @n  
    END ;  
    GO  
      
    ALTER TABLE Asso8  
        ADD CONSTRAINT Asso8_EXCLUSION_CHK 
            CHECK (dbo.AF_affectation_exclusion_FN() = 0) ;  
      
    ALTER TABLE Asso9  
        ADD CONSTRAINT Asso9_EXCLUSION_CHK 
            CHECK (dbo.AF_affectation_exclusion_FN() = 0) ;  
    
    
    INSERT INTO Asso8 (AF_ident, VE_ident)
    VALUES
        ((SELECT AF_ident FROM AF_affectation WHERE AF_code = 'aff01')
       , (SELECT VE_ident FROM VE_vehicule WHERE VE_num_chassis ='chassis01')) 
    ;
    INSERT INTO Asso8 (AF_ident, VE_ident)
    VALUES
        ((SELECT AF_ident FROM AF_affectation WHERE AF_code = 'aff02')
       , (SELECT VE_ident FROM VE_vehicule WHERE VE_num_chassis ='chassis01')) 
    
    INSERT INTO Asso9 (AF_ident, MG_ident)
    VALUES
        ((SELECT AF_ident FROM AF_affectation WHERE AF_code = 'aff11')
       , (SELECT MG_ident FROM MG_magasin WHERE MG_ref ='mag01')) 
    ;
    INSERT INTO Asso9 (AF_ident, MG_ident)
    VALUES
        ((SELECT AF_ident FROM AF_affectation WHERE AF_code = 'aff12')
       , (SELECT MG_ident FROM MG_magasin WHERE MG_ref ='mag01')) 
    ;
    
    SELECT AF_code, '' as MG_ref, VE_num_chassis  
    FROM   AF_affectation as x
      JOIN Asso8 as y ON x.AF_ident = y.AF_ident
      JOIN VE_vehicule as z ON y.VE_ident = z.VE_ident
    UNION ALL
    SELECT AF_code, MG_ref, ''   
    FROM   AF_affectation as x
      JOIN Asso9 as y ON x.AF_ident = y.AF_ident
      JOIN MG_magasin as z ON y.MG_ident = z.MG_ident
    ;
    =>

    AF_code  MG_ref    VE_num_chassis
    
    aff01              chassis01      
    aff02              chassis01      
    aff11    mag01        
    aff12    mag01        
    
    Tentative de viol de la contrainte d’exclusion :

    INSERT INTO Asso9 (AF_ident, MG_ident)
    VALUES
        ((SELECT AF_ident FROM AF_affectation WHERE AF_code = 'aff01')
       , (SELECT MG_ident FROM MG_magasin WHERE MG_ref ='mag01')) 
    
    =>

    Msg 547, Niveau 16, État 0, Ligne 170
    L'instruction INSERT est en conflit avec la contrainte CHECK "Asso9_EXCLUSION_CHK". 
    Le conflit s'est produit dans la base de données "test", table "dbo.Asso9".  
    
    (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à pout ça.

  16. #16
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    février 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2021
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour tous le monde, je ne me suis pas habitué à utiliser looping, à cela je trouve des difficultés à ce stade:
    Nom : gest_siege2.png
Affichages : 71
Taille : 34,9 Ko

  17. #17
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 562
    Points : 25 376
    Points
    25 376
    Billets dans le blog
    2
    Par défaut
    Bonjour François

    Citation Envoyé par fsmrel Voir le message
    Escartefigue, quelques remarques.
    A quoi sert d’identifier l’entité-type VE_vehicule relativement à l’entité-type MM_modele_millesime ? Sémantiquement parlant, cela n’aurait de sens que si la première était une propriété multivaluée de la seconde, c’est-à-dire si la suppression d’un modèle millésimé impliquait la suppression des véhicules qui s’y rattachent. Dans ce qui suit, j’ai donc pris le parti d’éviter l’identification relative. Vu de SQL) :
    Bien entendu ! J'ai dégainé un peu vite en voulant supprimer toute la famille ! , c'est que je prends mon travail de bourreau à coeur


    Citation Envoyé par fsmrel Voir le message
    Par ailleurs, tu sais que je tire à vue quand le bonhomme NULL rôde. Pour l’empêcher de pointer le bout de son nez, on peut demander à Looping de transformer les associations Asso 8 et Asso 9 en entités-types impliquant une contrainte d’exclusion, et donnant lieu à deux tables SQL, faisant donc chacune l’objet d’une contrainte impliquant une fonction.
    Je n'y vois pas d'objection, même si je ne suis pas comme toi un "serial killer" du "bonhomme null"

  18. #18
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 562
    Points : 25 376
    Points
    25 376
    Billets dans le blog
    2
    Par défaut
    Bonjour Ghani_ghani

    Citation Envoyé par ghani_ghani Voir le message
    Bonjour tous le monde, je ne me suis pas habitué à utiliser looping, à cela je trouve des difficultés à ce stade :
    François a eu la gentillesse de vous indiquer un sujet dans lequel la démarche est expliquée pas à pas, voyez ici : https://www.developpez.net/forums/d2.../#post11659916

  19. #19
    Membre chevronné
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    juin 2019
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2019
    Messages : 457
    Points : 1 856
    Points
    1 856
    Par défaut
    Bonjour,
    Citation Envoyé par escartefigue Voir le message
    François a eu la gentillesse de vous indiquer un sujet dans lequel la démarche est expliquée pas à pas, voyez ici : https://www.developpez.net/forums/d2.../#post11659916
    Effectivement, et regardez en particulier la 2ème étape où il faut d'abord tracer le lien entre le cercle de la CIF et l’association pivot, avant de lier les classes d'entités concernées.
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  20. #20
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 7 562
    Points : 25 376
    Points
    25 376
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ghani_ghani Voir le message
    merci tous le monde; un tout petit souci, quelqu'un m'a traité comme nul, oui effectivement, c'est pour cela qu'on demande l'aide. je suis un mécanicien qui essaie de comprendre ce domaine et essaie de trouver une solution informatique personnelle. si ça ne fonctionne pas je vais chercher les spécialistes.
    Et c'est tout à votre honneur. Soyez persévérant, vous avez l'esprit curieux et posez de bonnes questions, c'est un excellent début

Discussions similaires

  1. [Outils][C#/API Tapi] Y a-t-il une gestion du nombre des appels ?
    Par andreaslecousin dans le forum EDI/Outils
    Réponses: 7
    Dernier message: 16/03/2007, 15h08
  2. [WinCVS] Gestion du nommage des révisions
    Par effree dans le forum CVS
    Réponses: 1
    Dernier message: 15/05/2006, 23h46
  3. [Struts] gestion du contenu des sites web
    Par 17mounir dans le forum Struts 1
    Réponses: 5
    Dernier message: 14/04/2006, 14h12
  4. Gestion en vba des fichiers excel en mode multiutilisateurs
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/12/2005, 16h06
  5. Taille d'une base de données de l'ensemble des voitures...
    Par djbenvik dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 03/11/2005, 08h34

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