IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Société d'audiovisuel


Sujet :

Schéma

  1. #41
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut Cardinalité
    Juste en passant,
    Je vais corriger les cardinalités entre METIER et QUALIFICATION à 0-N comme vous.
    Un METIER peut exister sans que personne ne soit qualifié.
    Ainsi que entre QUALIFICATION et EQUIPE.
    Un technicien QUALIFIE peut n'avoir jamais travaillé dans aucune equipe.

    Par contre je ne vois pas pourquoi vous mettez un 0-N entre POSTE et EQUIPE.
    Un POSTE est forcément associé à au moins une EQUIPE.... 1-N ?

    Sinon, je vois bien que cela commence à être bien perché pour moi,
    comme vous le dites, on est dans le cambouis.
    Je vous suis et me retrousse les manches.
    Vive le savon noir !

    Del.

  2. #42
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 965
    Points : 30 774
    Points
    30 774
    Billets dans le blog
    16
    Par défaut Encore une contrainte de chemin...
    Bonsoir à nouveau,


    Une fois encore, à propos des chemins différents menant de A à Z. Reprenons le 3e MCD présenté dans le message #32 :





    Du fait de la présence de l’association EPF, on observe l’existence d’une nouvelle boucle, dont les associations entre entités-types PRESTATION, POSTE, EQUIPE, PRE_FILM sont la cause. En conséquence, à partir de l’entité-type EQUIPE, via POSTE, on peut « naviguer » vers PRESTATION selon un 1er chemin, et via PRE_FILM, naviguer vers PRESTATION selon un 2e chemin, mais une fois encore, rien n’impose que, selon le chemin utilisé, les prestations sélectionnées soient strictement les mêmes, alors que du point de vue de l’application elles doivent l’être, sinon il pourrait là aussi y avoir des incohérences fâcheuses...

    Exemple légal au vu du modèle, mais illégal vu de l’application :

    L’équipe e1 fait référence au poste p1, lequel fait référence à la prestation t1 ;

    L’équipe e1 fait référence au « pré-film » f1 lequel fait référence à la prestation t2.


    Le MLD généré par DB-MAIN :





    Dan le message précédent, on a vu comment des attributs metierId et EQU_metierId n’en faire qu’un. On recommence donc la manip, et on procède de la même façon pour les attributs prestationId et EQU_prestationId.

    a) Dans la clé étrangère {EQU_prestationId, EQU_metierId}, on remplace les attributs EQU_prestationId et EQU_metierId respectivement par les attributs prestationId et metierId (cf. la manip dans le message précédent), avec au résultat :





    b) dans les clés candidates id et id’, on peut maintenant remplacer EQU_prestationId par prestationId :





    On supprime l’attribut EQU_prestationId devenu sans emploi. Au résultat :





    Comme dans l’exemple précédent, les attributs EQU_metierId et metierId doublonnent, on supprime donc l’attribut EQU_metierId (directement, DB-MAIN n’y voit pas d’objection). Au résultat :





    Désormais :

    a) Quel que soit le chemin emprunté, à savoir via POSTE ou QUALIFICATION, chaque équipe ne peut faire référence qu’à un seul métier.

    b) Quel que soit le chemin emprunté, à savoir via POSTE ou PRE_FILM, chaque équipe ne peut faire référence qu’à une seule prestation.


    Script SQL produit par DB-MAIN (table EQUIPE, attribut periode : là encore, j’ai ajouté le type daterange manuellement) :

    
    create table METIER (
         metierId int not null,
         metierNom varchar(32) not null,
         constraint ID_METIER primary key (metierId));
    
    create table PERSONNE (
         personneId int not null,
         personneNom varchar(32) not null,
         constraint ID_PERSONNE primary key (personneId));
    
    create table QUALIFICATION (
         metierId int not null,
         personneId int not null,
         constraint ID_QUALIFICATION primary key (metierId, personneId));
    
    create table PRESTATION (
         prestationId int not null,
         prestationNom varchar(32) not null,
         dateDebut date not null,
         dateFin date not null,
         constraint ID_PRESTATION primary key (prestationId));
    
    create table POSTE (
         metierId int not null,
         prestationId int not null,
         quantite int not null,
         constraint ID_POSTE primary key (prestationId, metierId));
    	 
    create table FILM (
         filmId int not null,
         filmTitre varchar(32) not null,
         constraint ID_FILM_ID primary key (filmId));
    
    create table PRE_FILM (
         filmId int not null,
         prestationId int not null,
         constraint ID_PRE_FILM primary key (prestationId, filmId));
    
    create table EQUIPE (
         prestationId int not null,
         metierId int not null,
         personneId int not null,
         equipeId int not null,
         filmId int not null,
         periode daterange not null,
         constraint ID_EQUIPE primary key (prestationId, metierId, personneId, equipeId),
         constraint SID_EQUIPE unique (prestationId, metierId, personneId, periode));
    
    alter table QUALIFICATION add constraint FKQUA_MET
         foreign key (metierId)
         references METIER (metierId);
    
    alter table QUALIFICATION add constraint FKQUA_PER
         foreign key (personneId)
         references PERSONNE (personneId);
    
    alter table POSTE add constraint FKPOS_PRE
         foreign key (prestationId)
         references PRESTATION (prestationId);
    
    alter table POSTE add constraint FKPOS_MET
         foreign key (metierId)
         references METIER (metierId);
    
    alter table PRE_FILM add constraint FKPFP
         foreign key (prestationId)
         references PRESTATION (prestationId);
    
    alter table PRE_FILM add constraint FKPFF
         foreign key (filmId)
         references FILM (filmId);
    
    alter table EQUIPE add constraint FKEQU_QUA
         foreign key (metierId, personneId)
         references QUALIFICATION (metierId, personneId);
    
    alter table EQUIPE add constraint FKEQU_POS
         foreign key (prestationId, metierId)
         references POSTE (prestationId, metierId);
    
    alter table EQUIPE add constraint FKEPF
         foreign key (prestationId, filmId)
         references PRE_FILM (prestationId, filmId);
    
    
    (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.

  3. #43
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 965
    Points : 30 774
    Points
    30 774
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Del
    je ne vois pas pourquoi vous mettez un 0-N entre POSTE et EQUIPE.
    Un POSTE est forcément associé à au moins une EQUIPE.... 1-N ?
    C’est à souhaiter ! mais je suis parti du principe qu’un poste pouvait avoir été défini et attendre indéfiniment l’oiseau rare qui manque à l’équipe concernée (histoire vécue plus d’une fois par votre serviteur), ou encore attendre le feu vert du chef pour être doté d’équipes...

    Cela dit, en toute logique merisienne c’est 1,N.


    En passant, n’hésitez pas à faire un tour ici et médailler (en chocolat ou autre) quand vous estimez que c’est justifié...

    Et vive le savon noir !
    (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. #44
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut Boom
    Fsmrel,
    Et trois médailles ! En chocolat noir ou en or, vous choisissez !
    Au fait n'y a t'il pas un endroit pour décerner des médailles de solidarité ? Vous en méritez bien plus qu'une.

    Merci à vous.

    J'ai un petit doute.
    Sommes nous d'accord sur le fait que dans le MLD généré par DB-Main, on a bien pour l'entité POSTE, "equ: Prestationid" et non "ref: Prestationid"
    étant donné que l'on pose une cardinalité 1-N entre PRESTATION et POSTE ?
    Pour être sûre que le MLD généré l'est de la même façon chez vous et chez moi. J'ai déjà du mal à suivre mais si en plus j'ai des bug de logiciel ça va être coton...
    De plus, si j'ai bien compris, l'attribut "quantité" dans POSTE est bien là pour prendre en compte le cas où j'ai besoin par exemple de N opérateurs de prise de vue (et donc de N personnes distinctes qualifiées) sur telle prestation ?

    Del

  5. #45
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Je vois que sur les SQL que vous produisez, les types "int" apparaissent.
    De mon côté je n'ai que le type "numeric" et cela reste ainsi lorsque je passe par Generate > PostgrSQL.
    Avez vous remplacé les types "numeric" à la main ou avez vous un type "int".
    Del

  6. #46
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    En reprenant votre Pas à Pas, je me rends compte en fait que je ne peux supprimer, dans le MLD, l'attribut E_P_metierid (chez vous EQU_metierid).
    Le "Delete" (ctrl clic sur "E_P_metierid") est grisé.

  7. #47
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 965
    Points : 30 774
    Points
    30 774
    Billets dans le blog
    16
    Par défaut Cardinalité 1,N
    Bonsoir Del,


    Je réponds déjà au message #44.


    Citation Envoyé par Del
    J'ai un petit doute.
    Sommes nous d'accord sur le fait que dans le MLD généré par DB-MAIN, on a bien pour l'entité POSTE, "equ: Prestationid" et non "ref: Prestationid" étant donné que l'on pose une cardinalité 1-N entre PRESTATION et POSTE ?
    Bien sûr, une cardinalité 1,N dans le MCD donne lieu à « equ » et non pas « ref » dans le MLD. Cela dit, ça coince lors du passage à SQL, car ce langage ne permet pas de garantir de façon simple la contrainte voulant que pour une prestation il y ait au moins un poste. Comme la solution DB-MAIN n’est pas applicable (aujourd’hui) aux SGBD du marché, pour éviter de polluer les scripts SQL avec la mise en commentaire par DB-MAIN de sa solution, j’ai pris l’habitude de remplacer les « equ » par des « ref ». Cela ne correspond donc pas à une volonté de ma part de transformer en 0,N les 1,N au niveau conceptuel, car vu leur poids sémantique, ces derniers demeurent ! Je rappelle aussi que dans le contexte DB-MAIN on peut produire un script SQL directement à partir du MCD, mais sans les clés étrangères : le MLD n’est en fait qu’une étape « technique » obligée, menant du MCD au code SQL, et qu’au besoin on peut bricoler (par exemple éliminer les attributs doublons dans le cas des contraintes de chemin, remplacer « equ » par « ref » ...)

    Avec un langage conforme à Tutorial D, c'est-a-dire à la théorie relationnelle, les « equ » pourraient être préservés (et DB-MAIN aménagé en conséquence). A titre d’exemple, dans ce contexte, on définit une contrainte :

    
    CONSTRAINT RG01 QUALIFICATION {MetierId, PersonneId} = EQUIPE {MetierId, PersonneId} ;
    
    
    Maintenant, il s’agit de définir les conditions dans lesquelles la contrainte est déclenchée.

    Considérons les deux instructions suivantes (en langage D) :

    
    INSERT QUALIFICATION RELATION {TUPLE {metierId         123,
                                          personneId       591,
                                         }
                                  } ,
    
    INSERT EQUIPE RELATION {TUPLE {prestationId       314,
                                   metierId           123,
                                   personneId         591,
                                   ... 
                                  }
                          }  ;    
    
    

    Y figure une subtilité, ressortissant à l’affectation multiple (Multiple Assignment, voyez l’ouvrage de C. J. Date, SQL and Relational Theory, 3rd Edition, pages 300-301) : notez soigneusement que le 1er INSERT est suivi par une virgule, tandis que le 2e est suivi par un point-virgule : le SGBD ne déclenchera les contrôles d’intégrité qu’une fois détecté le point-virgule, ce qui en l’occurrence nous laisse le temps de créer une 1re équipe avant que la contrainte RG01 ne soit activée. Cette façon de procéder à l’avantage de la simplicité et de la fiabilité. Malheureusement la norme SQL ne propose qu’une solution qui n’est pas sans faille, avec l’instruction CREATE ASSERTION (et que les SGBD ne sont pas obligés de proposer, en vertu de quoi aujourd’hui ils s’abstiennent...) :

    (1) Pour déclarer la contrainte ;

    (2) Pour décider du moment de son déclenchement (clause DEFERRED), soit immédiatement, soit ultérieurement, au moyen d’une instruction ad-hoc (instruction SET CONSTRAINT), soit à un point de COMMIT (instruction COMMIT, fin de transaction...) Bref, une très grande lourdeur, un cauchemar.

    Exemple de déclaration de la contrainte contrôlant la cardinalité 1,N :

    
    CREATE ASSERTION RG01 CHECK
        (NOT EXISTS (SELECT ''
                     FROM   EQUIPE
                     WHERE  QUALIFICATION.metierId = EQUIPE.metierId
                       AND  QUALIFICATION.personneId = EQUIPE.personneId))
        DEFERRABLE INITIALLY DEFERRED  ;  
     
    

    Une transaction garantissant la cardinalité minimale 1 pour la qualification (123, 591) :


    
    START TRANSACTION ;
    
    INSERT INTO QUALIFICATION (metierId, personneId) VALUES (123, 591) ;
    ... /* Ne rien coder entre les deux inserts ! Sinon on peut ficher la zoubia... */
    INSERT INTO EQUIPE (prestationId, metierId, personneId, equipeId) VALUES (1, 123, 591, 1) ;
    
    COMMIT ;
    
    

    Quant aux SGBD du marché, à ce jour ils ne proposent donc pas l’instruction CREATE ASSERTION. Avec PostgreSQL, vous pouvez pallier, en créant une contrainte référentielle inverse (QUALIFICATION_EQUIPE_FK), donc un cycle :


    
    CREATE TABLE QUALIFICATION (
         metierId INT NOT NULL,
         personneId INT NOT NULL,
         bricolageId NOT NULL,
         CONSTRAINT ID_QUALIFICATION PRIMARY KEY (metierId, personneId));
    
    CREATE TABLE EQUIPE (
         prestationId INT NOT NULL,
         metierId INT NOT NULL,
         personneId INT NOT NULL,
         equipeId INT NOT NULL,
         filmId INT NOT NULL,
         periode DATERANGE not null,
         bricolageId NOT NULL,
         CONSTRAINT ID_EQUIPE PRIMARY KEY (prestationId, metierId, personneId, equipeId),
         CONSTRAINT SID_EQUIPE UNIQUE (bricolageId),
         CONSTRAINT FKEQU_QUA FOREIGN KEY (metierId, personneId)
         REFERENCES QUALIFICATION (metierId, personneId)) ; 
    
    ALTER TABLE EQUIPE ADD CONSTRAINT EQUIPE_QUALIFICATION_FK FOREIGN KEY (metierId, personneId)
         REFERENCES QUALIFICATION (metierId, personneId);
    
    ALTER TABLE QUALIFICATION ADD CONSTRAINT QUALIFICATION_EQUIPE_FK FOREIGN KEY (bricolageId)
         REFERENCES EQUIPE (bricolageId) INITIALLY DEFERRED ;
    
    
    Je vous laisse le soin de décortiquer ce script, dans lequel on est obligé de définir une clé alternative pour la table EQUIPE.


    Mais on est chez les Shadocks, dans le genre laid, lourd, compliqué, on fait difficilement mieux... Et malgré la présence des clés étrangères, conséquence du cycle, l’intégrité référentielle n’est même plus garantie ! (Je pourrai revenir sur ce point particulier, mais pour le moment je ne m’en sens pas le courage...)



    Citation Envoyé par Del
    De plus, si j'ai bien compris, l'attribut "quantité" dans POSTE est bien là pour prendre en compte le cas où j'ai besoin par exemple de N opérateurs de prise de vue (et donc de N personnes distinctes qualifiées) sur telle prestation ?
    C’est ça. Maintenant, à vous de décider si cet attribut est pertinent, s’il est au bon endroit, ou bien, si plus finement, il serait préférable de le situer au niveau de l’équipe.



    Merci pour les médailles, par gourmandise il va sans dire que ma préférence va au chocolat. Pour la médaille de solidarité, peut-être voir ici ?Il y a aussi la médaille du sauvetage, comme l’évoque Antoine de la Foy :

    Citation Envoyé par Antoine de la Foy
    Bref, seul rescapé d’une famille ébranlée par les guerres coloniales, les divorces et les accidents de la route, Papa !... Adolphe Amédée de la Foy, dit " Le Président "... Un personnage... Il collectionne les pendules et les contraventions... les déceptions sentimentales et les décorations... Il les a toutes, sauf la médaille de sauvetage... la plus belle selon lui, mais la plus difficile à décrocher... quand on est pas breton !
    (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.

  8. #48
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut ...
    Fsmrel,

    Il fallait bien que cela arrive,
    le niveau est monté d'un cran.
    Je ne suis pas loin de paniquer.

    In SQL, use immediate checking whenever you can, Page 301 du livre pré-cité

    Dois-je m'attendre, en tant que novice, à des scripts en cascade que je ne serais pas à même de comprendre ?

    Quoi qu'il en soit, l'idée de manipuler des attributs de bricolage au milieu d'un base sur la vidéo numérique me laisse songeur !
    En même temps, si je regarde mon premier MCD, je dois bien admettre qu'il fait très bricole. Peut-être même qu'à vos yeux le dernier en date (#30) ne l'est pas moins.

    Je ne pense pas avoir visé trop grand. Le schéma, peut-être maladroit, pas encore complet, est juste ce dont je (nous au boulot) peux (pouvons) avoir besoin.

    Alors je choppe la corde et je m'accroche.

    NB: Je ne suis toujours pas parvenu, au niveau du MLD, à dégommer les attributs doublons. Le "Delete" reste invariablement grisé !

    Del

  9. #49
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut Delete
    Je viens de comprendre pourquoi le Delete est grisé.
    En fait j'ai généré une vue à partir d'un bout du MCD initial, vue dont j'ai fait une copie (copy product) afin de faire la transformation en MLD.
    Du coup, à partir de là ( et même au niveau de la vue ) on ne peut plus rien enlever. Le Delete est grisé.
    En revenant au MCD initiale, en faisant un copy product de la totalité du MCD et en générant le MLD, il est alors possible de manipuler les attributs.

  10. #50
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 965
    Points : 30 774
    Points
    30 774
    Billets dans le blog
    16
    Par défaut
    Suite,

    Citation Envoyé par Del
    Je vois que sur les SQL que vous produisez, les types "int" apparaissent.
    De mon côté je n'ai que le type "numeric" et cela reste ainsi lorsque je passe par Generate > PostgrSQL.
    Avez vous remplacé les types "numeric" à la main ou avez vous un type "int".
    En fait, histoire d’habitude, je retiens le plus souvent MySQL, et en l’occurrence DB-MAIN génère INT (pour voir, vous pouvez faire l’essai).



    Citation Envoyé par Del
    Je viens de comprendre pourquoi le Delete est grisé.
    En fait j'ai généré une vue à partir d'un bout du MCD initial, vue dont j'ai fait une copie (copy product) afin de faire la transformation en MLD.
    Du coup, à partir de là ( et même au niveau de la vue ) on ne peut plus rien enlever. Le Delete est grisé.
    La manipulation des vues selon DB-MAIN mérite d’être améliorée.

    Je ne savais pas que vous utilisiez une vue, sinon je vous aurais alerté. Voici ce qui est écrit dans DB-MAIN Manual Series Computer-Aided Database Engineering Volume 1: Database Models Fourth Edition - 1999 (à la page 274 du PDF) :



    On est plus à l’aise avec PowerAMC qui autorise la modification et la suppression des objets à partir des vues (mais ces opérations sont répercutées dans le diagramme source). Problème : le coût de l'AGL (au moins 5000 € pour pouvoir faire des MCD).



    Citation Envoyé par Del
    Dois-je m'attendre, en tant que novice, à des scripts en cascade que je ne serais pas à même de comprendre ?
    On ne va pas vous imposer les horreurs que j’ai décrites... Oubliez l’attribut bricolageId et le cycle, mais en revanche, veillez dans votre programmation à ce que le contrôle des cardinalités 1,N soit en place : cela fait des décennies que les développeurs travaillent ainsi... Et puis un jour, ressortirez-vous peut-être cette discussion et aurez alors envie de faire un peu de laboratoire 1,N, qui sait ?



    Citation Envoyé par Del
    Alors je choppe la corde et je m'accroche.
    ll vaut mieux que ce soit à la corde qu’à l’échelle...

    A suivre...
    (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. #51
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut A suivre
    Bonsoir,
    Et Bonsoir Fsmrel,


    Je tiens ici très particulièrement à vous remercier pour le temps que vous prenez
    afin d’aider tout ceux qui en expriment le besoin. De vos articles à toutes vos contributions depuis des années. Pour moi cela a été réellement un grand apport.
    Ceci dit je comprends que mon travail est très, très loin, de toucher au but.
    Et votre post #47 m’a un peu laissé comme une mouche collée au pot de miel, éberluée.
    Avec le vertige de la méconnaissance.
    Le nombre de questions que j’aurais à poser est trop important pour que je ne pollue ce forum plus avant.
    Il me faut trouver des réponses, apprendre, experimenter. Lentement. Et revenir quand/si je serais en mesure d’avancer concrètement sur ce schéma de base.
    Ce que je commence, après une semaine chargée, ou le MCD a du laisser un peu de place à des prestations ... Le scan a tourné, des images ont été étalonnées, les magnétos ont numérisés.
    Peut-être aurais-je des questions ponctuelles d’ici là.
    J’espère trouver chez vous le soutien dont vous faites preuve.
    Et si, si cela ne pose de problèmes à personne, je souhaiterais que ce post reste ouvert, non résolus, en attendant.

    Le Mistral est tombé, il va pleuvoir.
    Cordialement
    Del

  12. #52
    Rédacteur

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

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 448
    Points
    52 448
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par delarita Voir le message
    Bonsoir,
    Et Bonsoir Fsmrel,

    Je tiens ici très particulièrement à vous remercier pour le temps que vous prenez
    afin d’aider tout ceux qui en expriment le besoin. De vos articles à toutes vos contributions depuis des années. Pour moi cela a été réellement un grand apport.
    Ceci dit je comprends que mon travail est très, très loin, de toucher au but.
    Et votre post #47 m’a un peu laissé comme une mouche collée au pot de miel, éberluée.
    Avec le vertige de la méconnaissance.
    Le nombre de questions que j’aurais à poser est trop important pour que je ne pollue ce forum plus avant.
    Non, non, continuez, il y a longtemps que nous n'avions pas vu un débutant de cette qualité là :
    1) modèle ardu pris à bras le corps
    2) analyse pertinente, compréhension des remarques
    3) discours élégant (important en matière d'analyse ou tous est verbe !)
    4) les forums sont fait pour être pollués, c'est de la discussion de café du commerce, pas de la littérature !
    5) contrairement à ce que vous pensez vous êtes plus proche du but que vous ne le pensez... Dans peu de temps, vous tiendrez le bon bout et en tirant tout se résorbera naturellement !

    Il me faut trouver des réponses, apprendre, experimenter. Lentement. Et revenir quand/si je serais en mesure d’avancer concrètement sur ce schéma de base.
    J'ai mis près de 10 ans avant de savoir modéliser correctement, presque du premier coup... Je pense que François aussi !

    Ce que je commence, après une semaine chargée, ou le MCD a du laisser un peu de place à des prestations ... Le scan a tourné, des images ont été étalonnées, les magnétos ont numérisés.
    Peut-être aurais-je des questions ponctuelles d’ici là.
    J’espère trouver chez vous le soutien dont vous faites preuve.
    Et si, si cela ne pose de problèmes à personne, je souhaiterais que ce post reste ouvert, non résolus, en attendant.

    Le Mistral est tombé, il va pleuvoir.
    Cordialement
    Del
    Tiens vous êtes en PACA ?

    Moi dans le Var....

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

  13. #53
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut Bonjour
    Bonjour Fsmrel,
    Bonjour SqlPro;

    Eh bien merci beaucoup pour cet encouragement !
    Je dois dire qu’avant de me retrouver en situation de poster sur ce forum
    j’avais durant deux mois épluché de nombreux documents dont ceux que vous avez publiés sur votre page ( Parce que je suis tout aussi débutant en SQL tout court).
    En parallèle du cours de Fsmrel sur Mysql Workbench que j’envisageais d’utiliser à ce moment là, et pour lequel je cherchais à comprendre le fonctionnement.
    Avant de passer à Postgres et PgAdmin.
    Puis le grand saut, ici, les règles, le MCD.
    Et tous les efforts et la didactique de Fsmrel !

    Aujourd’hui, si je pense qu’il me faut apprendre, c’est que mon cerveau, qui a l’habitude de se concentrer plutôt sur des problématiques de format vidéo, d’encodage et de couleur, a un peu de mal
    a comprendre toutes les subtilités des cardinalités, de la gestion des identifiants alternatifs, des associations, celles qui le demeure et celles qui se déguisent, des travaux de bricolage lors du passage en MLD.
    Quand en plus des boucles s’en mêlent… Quand la bataille s’engage entre la norme et la pratique, quand ce que dit SQL sur les contraintes check ne peut être mis en oeuvre sans une grande dose d’expertise
    (et ça discute fort sur les forums ici ou sur stackoverflow par exemple : http://stackoverflow.com/questions/9...um-cardinality )

    A ce moment là alors, afin de calmer mon vertige, j’ai tourné la tête et me suis dis qu’il faudrait déjà que je sache monter le petit bout de base consacré aux contacts (Entités PERSONNE, ADRESSE, EMAIL, TELEPHONE).

    PERSONNE - - - - - 1-N - - p_coord - - 1-1 - - - - - COORDONNEE
    COORDONNEE - - - - - 1-1 - - situer - - 1-1 - - - - - ADRESSE
    COORDONNEE - - - - - 0-N - - mailer - - 1-1 - - - - - EMAIL
    COORDONNEE - - - - - 1-N - - tel - - 1-1 - - - - - TELEPHONE

    J’ai supprimé l’entité coordonnée qui me semblait superflue et modifié une cardinalité. Et puis je suis retourné voir l’article-blanc (pour ne pas angliciser) de Cinephil pour voir si des associations devaient être transformées en entités… Apparemment non

    PERSONNE - - - - - 1-1 - - situer - - 1-1 - - - - - ADRESSE
    PERSONNE - - - - - 0-N - - mailer - - 1-1 - - - - - EMAIL
    PERSONNE - - - - - 0-N - - tel - - 1-1 - - - - - TELEPHONE

    Vu que j’avais posé sur une l’association situer une cardinalité 1-1 [situer] 1-1 , je me suis dit que j’allais être bon à nouveau pour une gestion des contraintes compliquées. Du coup, je lui ai coupé la tête et mis PERSONNE 0-N situer 1-1 ADRESSE.

    PERSONNE - - - - - 0-N - - situer - - 1-1 - - - - - ADRESSE
    PERSONNE - - - - - 0-N - - mailer - - 1-1 - - - - - EMAIL
    PERSONNE - - - - - 0-N - - tel - - 1-1 - - - - - TELEPHONE

    Comme la clé étrangère se faufile vers ADRESSE je n’ai pas à craindre la diarrhée de NULL dans PERSONNE. Du coup je vais déjà envoyer cela dans postgres, et apprendre les simples requêtes Insert, Update, Delete.

    Seule fantaisie de ma part; je me suis dit que peut-être, soyons vraiment fou, et mettons un identifiant alternatif dans EMAIL composé de {prefixe,suffixe} servant à coder l’adresse mail : prefixe@suffixe.

    Voilà.
    Vous voyez, je lis beaucoup, j’avance tel l’escargot.
    Heureusement que ce n’est pas ce pour quoi je suis payé au sein de mon entreprise….
    La route est longue.



    PS, si il vous prend la curiosité de suivre le lien stackoverflow, je serais curieux d’avoir des éclaircissement sur ce que proposent AdamKG et Sebastien Barré.
    Il faudra bien que je m’y mette de toute façon.

    Cordialement
    de Marseille.

    DEL

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


    J’ai dû m’absenter pendant une période qui a pu vous paraître bien longue, mais je vais regarder vos derniers messages. Patience toutefois, vous n’êtes pas seul...
    (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. #55
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut Tout de même ...
    Bonjour à vous,

    J'ai donc bien fait mes devoir,
    trois petites tables qui fonctionnent,
    les cardinalités 1-1 fonctionnent bien, de l'autre coté, vu qu'on est en 0-N, ça marche.

    Mais quand même, il est vraiment très difficile de trouver des ressources un peu précises,
    lorsqu'il s'agit d'imaginer transformer un 0-1/1-1 ou 0-N/1-1 en 1-1/1-1 ou 1-N/1-1 et du coup
    pour savoir comment choisir entre manger d'abord la poule ou d'abord l'oeuf !

    A se demander si tous les developpeurs en herbe n'abandonnent pas tout simplement.

    Je ne parviens pas à trouver un exemple de mise en oeuvre de cette contrainte "par la pratique".
    Encore moins qui soit adaptée à postgres.

    Ou je cherche mal.

    Je retourne à mes devoirs.

    Del

  16. #56
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut Suite
    Je sais bien qu'il ne s'agit plus de questions relatives à Ce forum.
    Du coup en ouvrir une autre sur celui de postgres serait sans doute plus logique,
    puisque il s'agit de développer un trigger (que ce mot est laid décidément ...).
    Mais comme sqlpro est passé par là je me dit que nous pouvons y rester.
    Moi je n'ai rien contre foutre le feu (fire a trigger..) sur une table, le code en soi ne me gêne pas.
    Encore faut'il comprendre son fonctionnement.
    Pour l"instant, ce n'est pas clair.
    Et vu le peu de ressources, euphémisme, trouvables,
    je suppose que ce n'est pas clair pour grand monde.
    (jd)cr

    Soit
    et salut

    Del.

  17. #57
    Rédacteur

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

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 448
    Points
    52 448
    Billets dans le blog
    5
    Par défaut
    C'est surtout que l'analyse nécessite beaucoup de temps et que tout le monde n'est pas à la retraite !!!

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

  18. #58
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Si je comprends bien,
    la règle :
    Une personne possède 1 ou plusieurs adresses.
    Une adresse appartient à 1 et 1 seule personne,
    est un casse tête ?

    J'ai du mal à y croire.
    Moi j'ai du mal à comprendre comment ça fonctionne.
    Je suis novice confirmé ( lire : confirmé dans ma situation de novice).
    Mais n'est-ce pas une simple formalité pour vous ?

    Après, que la grande boucle d'Equipe, tout le foin qui l'entoure,
    et qui sort de mon désir de plaire à mes collègue (et c'est pas fini....),
    soit tracassant, je le conçois.

    Bien à vous,
    Et merci encore de vos encouragements.

    Del

  19. #59
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 057
    Points
    2 057
    Par défaut
    Bonjour delarita,

    Citation Envoyé par delarita Voir le message
    Mais quand même, il est vraiment très difficile de trouver des ressources un peu précises,
    lorsqu'il s'agit d'imaginer transformer un 0-1/1-1 ou 0-N/1-1 en 1-1/1-1 ou 1-N/1-1 et du coup
    pour savoir comment choisir entre manger d'abord la poule ou d'abord l'oeuf !
    Je ne suis pas sûr que ça réponde à tes interrogations mais, au cas où tu ne l'aurais pas lu, ce billet blog de CinéPhil devrait t'aider : Quand faut-il une table associative ?
    Tous les cas sont passés en revue.
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  20. #60
    Nouveau membre du Club
    Homme Profil pro
    technicien audiovisuel
    Inscrit en
    Mars 2016
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien audiovisuel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2016
    Messages : 41
    Points : 25
    Points
    25
    Par défaut ...
    Bonjour,

    Tout d’abord merci pour votre attention,
    je suis un peu contraint en ce moment de prendre du recul sur ce projet.
    Pas mal de boulot au sein de la société pour laquelle je travaille et peu de temps libre en soirée.

    En ce qui concerne le billet de CinéPhil, il fait partie depuis le début d’un onglet ouvert 7/7, en bonne compagnie avec le texte de Fsmrel sur la normalisation, devant plusieurs autres. Je commence d’ailleurs à être un peu perdu dans toutes mes marques de navigateurs…

    Quoi qu’il en soit, depuis le poste #47 de Fsmrel, il est clair que la résolution du problème posé par la cardinalité 1-N est à chercher du côté de la programmation SQL et dans mon cas dans le cadre de Postgres. Sur ce point, on sort donc du cadre de ce forum sur les schémas. De mon côté cela reste encore des choses à apprendre. Il semble qu’il faille se diriger en partie par un trigger. Même si j’en ai a peu près compris le principe, je ne suis pas parvenu à en programmer un dans les cas simples des entités de contact (PERSONNE vers TELEPHONE et EMAIL)

    La discussion sur Stackoverflow pointée en #53 m’a parue un bon point de départ pour chercher la solution mais pour l’instant, c’est encore flou.

    Voilà donc.
    A suivre
    DEL.

Discussions similaires

  1. [MySQL] Recherche dans une base de donnée [ Gros soucis ]
    Par milkasoprano dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/03/2006, 18h59
  2. problème de recherche dans une base de donnée mysql
    Par Xini28 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/10/2005, 19h00
  3. Recherche dans une base de donnée
    Par genova dans le forum SQLite
    Réponses: 8
    Dernier message: 29/09/2005, 00h16
  4. problème de recherche dans une base de données
    Par bouzid_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 07h47
  5. recherche dans une base de donnée+boucle
    Par eric205 dans le forum Bases de données
    Réponses: 8
    Dernier message: 15/03/2005, 22h14

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