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 :

base de donnees ALGEBRE RELATIONNELLE [Modèle Relationnel]


Sujet :

Schéma

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut base de donnees ALGEBRE RELATIONNELLE
    bonjour pouvez vous m'aider à résoudre ce problème??


    CORDIALEMENT



    J'ai réalisé le grand A reste la partie B !!! une fois réalisé il me permettra d'avoir un exemple complet corrigé pour pouvoir travailler sur d'autres BD .

    CORDIALEMENT
    Images attachées Images attachées

  2. #2
    Modérateur

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    On veut bien t'aider, pas faire à ta place !
    Alors montre nous ce que tu as déjà fait et dis-nous où tu bloques.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    On veut bien t'aider, pas faire à ta place !
    Alors montre nous ce que tu as déjà fait et dis-nous où tu bloques.
    J'ai réalisé le grand A reste la partie B !!! une fois réalisé il me permettra d'avoir un exemple complet corrigé pour pouvoir travailler sur d'autres BD .

    CORDIALEMENT

  4. #4
    Modérateur

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par johndoc Voir le message
    reste la partie B
    D'après l'énoncé succinct, il semble qu'on te demande des requêtes SQL non ?

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

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    D'après l'énoncé succinct, il semble qu'on te demande des requêtes SQL non ?


    oui c'est bien cela !! j'avoue je suis complètement perdu


    Tu as essayé d'en faire quelques unes ?
    j'ai lu et relu mais je m'en sort pas

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Avez vous trouvez une solution à mon problème ?

  7. #7
    Modérateur

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Tu ne connais pas du tout SQL ?
    Il y a un très bon cours ici.

    Mais est-ce bien du SQL qu'on te demande ? Ton titre de discussion peut laisser penser qu'il s'agit d'un exercice uniquement d'algèbre relationnelle, ce que je ne maîtrise pas du tout.

    Voici la première requête SQL qui donnera la liste des bandits arrêtés par le commissaire Bond :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT b.NUMBANDIT, b.NOMBANDIT, a.DATE_ARRESTATION
    FROM BANDIT AS b
    INNER JOIN ARRETER AS a ON b.NUMBANDIT = a.NUMBANDIT
    WHERE a.MATRICULE = '007'
    Essaie de faire les autres.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Tu ne connais pas du tout SQL ?
    Il y a un très bon cours ici.

    Mais est-ce bien du SQL qu'on te demande ? Ton titre de discussion peut laisser penser qu'il s'agit d'un exercice uniquement d'algèbre relationnelle, ce que je ne maîtrise pas du tout.

    Voici la première requête SQL qui donnera la liste des bandits arrêtés par le commissaire Bond :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT b.NUMBANDIT, b.NOMBANDIT, a.DATE_ARRESTATION
    FROM BANDIT AS b
    INNER JOIN ARRETER AS a ON b.NUMBANDIT = a.NUMBANDIT
    WHERE a.MATRICULE = '007'
    Essaie de faire les autres.
    Bonjour merci beaucoup pour votre aide effectivement c'est bien de l'algebre relationnel connaissez vous un site qui pourrait m'aider CORDIALEMENT

  9. #9
    Modérateur

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par johndoc Voir le message
    Bonjour merci beaucoup pour votre aide effectivement c'est bien de l'algebre relationnel connaissez vous un site qui pourrait m'aider CORDIALEMENT
    Un site non, mais il y a sur notre forum un expert du sujet : fsmrel.
    Je lui envoie un message pour qu'il prenne le relais.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Un site non, mais il y a sur notre forum un expert du sujet : fsmrel.
    Je lui envoie un message pour qu'il prenne le relais.
    Merci beaucoup

  11. #11
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ton titre de discussion peut laisser penser qu'il s'agit d'un exercice uniquement d'algèbre relationnelle, ce que je ne maîtrise pas du tout.
    Mais vous vous trompez CinePhil. Je pense que vous connaissez très bien l'algèbre relationnelle.

    L'algèbre relationnelle est simplement un ensemble d'opérateurs prenant comme opérande une ou plusieurs relations et dont le résultat est une relation.
    Ces opérateurs, qui forment l'algèbre relationnel sont entre autre JOIN, RESTRICT (Where), PROJECT (Select).

    Ensuite, il faut s'accorder sur la syntaxe à utiliser.

    Pour reprendre votre solution à la première question, en SQL:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT b.NUMBANDIT, b.NOMBANDIT, a.DATE_ARRESTATION
    FROM BANDIT AS b
    INNER JOIN ARRETER AS a ON b.NUMBANDIT = a.NUMBANDIT
    WHERE a.MATRICULE = '007'
    Elle pourrait s'écrire en Tutorial D comme ceci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BANDIT JOIN ARRETER
    WHERE MATRICULE = MATRICULE('007')
    {NUMBANDIT, NOMBANDIT, DATE_ARRESTATION}
    Ou dans un pseudo-langage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JOIN(BANDIT, ARRETER)
    WHERE(Matricule = '007')
    PROJECT(NUMBANDIT, NOMBANDIT, DATE_ARRESTATION)
    La partie B des exercices n'est pas différente de la partie A.
    Utilisez les opérateurs relationnels (algèbre) que vous avez définit en cours et que vous avez déjà utilisé dans l'exercice A.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Oishiiii Voir le message
    Mais vous vous trompez CinePhil. Je pense que vous connaissez très bien l'algèbre relationnelle.

    L'algèbre relationnelle est simplement un ensemble d'opérateurs prenant comme opérande une ou plusieurs relations et dont le résultat est une relation.
    Ces opérateurs, qui forment l'algèbre relationnel sont entre autre JOIN, RESRICT (Where), PROJECT (Select).

    Ensuite, il faut s'accorder sur la syntaxe à utiliser.

    Pour reprendre votre solution à la première question, en SQL:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT b.NUMBANDIT, b.NOMBANDIT, a.DATE_ARRESTATION
    FROM BANDIT AS b
    INNER JOIN ARRETER AS a ON b.NUMBANDIT = a.NUMBANDIT
    WHERE a.MATRICULE = '007'
    Elle pourrait s'écrire en Tutorial D comme ceci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BANDIT JOIN ARRETER
    WHERE MATRICULE = MATRICULE('107')
    {NUMBANDIT, NOMBANDIT, DATE_ARRESTATION}
    Ou dans un pseudo-langage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JOIN(BANDIT, ARRETER)
    WHERE(Matricule = '107')
    PROJECT(NUMBANDIT, NOMBANDIT, DATE_ARRESTATION)
    La partie B des exercices n'est pas différente de la partie A.
    Utilisez les opérateurs relationnels (algèbre) que vous avez définit en cours et que vous avez déjà utilisé dans l'exercice A.
    RE: LES CHIFFRES CORRESPONDENT BIEN AU LIAISON DES TABLES???

  13. #13
    Modérateur

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Quels chiffres ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Quels chiffres ?


    107 ca correspond à quoi??

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Quels chiffres ?

    merci beaucoup à vous deux j'ai compris le fonctionnement à bientot

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par johndoc Voir le message
    merci beaucoup à vous deux j'ai compris le fonctionnement à bientot

    LE CHIFFRE NE SERT A RIEN C'est juste pour l'énoncer !!!

  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 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

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

    Histoire d’y voir plus clair, affichons votre MCD et votre MLD.

    MCD


    Quelques commentaires sur ce MCD :

    1) La patte connectant l’entité-type CASSE et l’association-type Participer est porteuse d’une cardinalité minimale 0. Cela veut dire qu’il peut exister des casses pour lesquels on n’a pas encore identifié les participants. Est-ce bien ce que le MCD veut exprimer ?

    2) La patte connectant l’entité-type BANDIT et l’association-type Participer est porteuse d’une cardinalité minimale 1. Cela veut dire qu’à terme la base de données ne recensera que les bandits ayant participé à des casses. Est-ce bien ce que le MCD veut exprimer ?

    3) La modélisation des séjours en prison est correcte, mais sera à aménager au niveau du MLD si on ne veut pas partir dans la mise en œuvre de contraintes nécessaires à la bonne santé de la base de données (par exemple, Louis ne peut pas être en même temps à Fresnes et à La Santé, etc.) et une rédaction compliquée des requêtes (cf. B.3). En effet, on a là un exemple de gestion de données datées, à savoir en cours d’une part (Louis est actuellement en prison) et historisées d’autre part (Louis a purgé plusieurs peines à La Santé et en d’autres lieux). Mais bon, on fera avec ce MCD et le MLD qui en est dérivé.

    MLD




    Venons-en à vos requêtes.

    Vous écrivez :
    1) Quels sont les bandits table bandit et table participer?
    Quel est le sens de cette phrase incompréhensible ?

    Vous écrivez :
    T1= jointure(bandit,participer) T1(numbandit,nombandit,numcasse)
    Il faudrait que vous fournissiez un minimum d’explications quant aux opérateurs et à la syntaxe. Si vos notations sont basées sur une grammaire donnée, merci de fournir le lien vers celle-ci.

    Ainsi, qu’est-ce que T1 ? Le résultat d’une « jointure » ? Pourquoi T1 figure deux fois sur la même ligne ?

    Que veut dire « T1(numbandit,nombandit,numcasse) » ?

    Le terme « jointure » symbolise-t-il l’opération d’équijointure ? De jointure naturelle ? De thêta-jointure ?

    Vous écrivez :
    T2=sélection(T1,numcasse=251) T2(numbandit,nombandit,251)
    Je ne vois aucun rapport entre ces expressions et la question posée.

    Concernant la question 2 :
    2) nom et matricule du commissaire
    Que vient faire le casse 543 ? Est-ce à dire que la question posée est en fait la suivante :
    Quel est le nom et quel est le matricule du commissaire chargé de l’enquête concernant le casse pour lequel la valeur de l’attribut Numcasse dans l’en-tête de la table CASSE est égal à 543 ?


    Passons à la question B.1 :
    Liste des bandits arrêtés par le commissaire Bond (MATRICULE = 007) : NUMBANDIT, NOMBANDIT, DATE-ARRESTATION
    Les informations demandées figurent dans la table BANDIT (attributs NUMBANDIT et NOMBANDIT), ainsi que dans la table ARRETER (attributs NUMBANDIT, DATE_ARRESTATION et MATRICULE). Il y a donc à prévoir une jointure naturelle à laquelle participent ces deux tables, ainsi qu’une restriction (ce que vous appelez une sélection) pour se limiter aux arrestations auxquelles a procédé le commissaire de matricule 007, puis une éventuelle projection sur les attributs NUMBANDIT, NOMBANDIT, DATE_ARRESTATION comme l’a fait CinePhil.

    Dans le style impératif, on peut procéder ainsi (voyez la formulation d’Oishiiii) :

    1) Restriction des lignes de la table ARRETER, pour lesquelles le prédicat MATRICULE = '007' est VRAI.
    2) Jointure naturelle des tables ARRETER et BANDIT, afin de récupérer les lignes concernant les bandits correspondants.
    3) Projection sur les attributs à faire figurer dans le résultat : NUMBANDIT, NOMBANDIT, DATE_ARRESTATION.

    Je vous renvoie à l’annexe B de l’article Bases de données relationnelles et normalisation dans lequel je rappelle la notation des opérateurs relationnels dans le style de Tutorial D.

    Toujours dans le style impératif et en Tutorial D, on formalise ainsi ce qui précède :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WITH 
          ARRETER WHERE MATRICULE = '007' AS T1,
          T1 JOIN BANDIT AS T2 :
          T2 {NUMBANDIT, NOMBANDIT, DATE_ARRESTATION} ; 
    Si vous préférez le style déclaratif :
    ((ARRETER WHERE MATRICULE = '007') JOIN BANDIT) {NUMBANDIT, NOMBANDIT, DATE_ARRESTATION} ;
    Vous pouvez aussi utiliser le style SQL, comme l’a fait CinePhil.

    Maintenant, si vous avez une grammaire spécifique, à vous d’adapter.

    A noter : dans la jointure naturelle des tables ARRETER et BANDIT, seul l’attribut MATRICULE est utile en ce qui concerne la table ARRETER. Dans ces conditions, vous pouvez utiliser la semi-jointure (opérateur SEMIJOIN), c'est-à-dire ne retenir de la table BANDIT que les lignes qui ont leur contrepartie dans la table ARRETER. Ainsi, on peut remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WITH 
          ARRETER WHERE MATRICULE = '007' AS T1,
          T1 JOIN BANDIT AS T2 :
          T2 {NUMBANDIT, NOMBANDIT, DATE_ARRESTATION} ;
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WITH 
          ARRETER WHERE MATRICULE = '007' AS T1,
          BANDIT SEMIJOIN T1 AS T2 :
          T2 {NUMBANDIT, NOMBANDIT, DATE_ARRESTATION} ;
    Mais attention, les termes BANDIT et T1 doivent impérativement figurer respectivement à gauche et à droite de l’opérateur SEMIJOIN. Dans le cas contraire, ce sont les lignes de T1 qui sont retenues et pas celle de BANDIT.


    Passons à la question B.2 :
    Liste des NUMCASSE, DESIGN-CASSE, DATE-CASSE, VILLE-CASSE ET TYPE-CASSE auxquels a participé Jo MAGNUM (NUMBANDIT = 532)
    La table CASSE est partie prenante à cause des attributs NUMCASSE, DESIGN-CASSE, DATE-CASSE, VILLE-CASSE ET TYPE-CASSE. La table PARTICIPER est aussi partie prenante, à cause des attributs NUMCASSE et NUMBANDIT.

    Comme dans l’exemple précédent, on peut procéder ainsi :

    1) Restriction des lignes de la table PARTICIPER, pour lesquelles le prédicat NUMBANDIT = '532' est VRAI.
    2) Jointure naturelle (ou semi-jointure) des tables PARTICIPER et CASSE.
    3) Projection sur les attributs à faire figurer dans le résultat : NUMCASSE, DESIGN-CASSE, DATE-CASSE, VILLE-CASSE ET TYPE-CASSE.

    Je vous laisse formaliser.

    Passons à la question B.3 :
    Quels sont les séjours que P'tit Louis de NUMBANDIT = 999 a effectués en prison : DATE_DEBUT, DATE_FIN, NOMPRISON
    Dans l’état de votre MCD (donc de votre MLD), la solution est loin d’être triviale. Dans un premier temps, il faut comparer les lignes de la table DEBUTER_SEJOUR avec celle de la table FINIR_SEJOUR, pour lesquelles NUMBANDIT = '999' et on a égalité sur les attributs NOMPRISON et NUMBANDIT (comme dans le cas d’une jointure naturelle), mais pour lesquelles on vérifie en plus l’inégalité DATE_DEBUT < DATE_FIN, sachant qu’au résultat de cette vérification, il faudra retenir chaque ligne pour laquelle la date de fin est la plus ancienne (utilisation de l’opérateur d’agrégation MIN), car Louis a pu faire plus d’un séjour dans la même prison.

    Dans le style de Tutorial D :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH 
               ((DEBUTER_SEJOUR RENAME NUMBANDIT AS BANDIT_A, 
                                       NOMPRISON AS PRISON_A) 
          TIMES 
               (DEBUTER_SEJOUR RENAME NUMBANDIT AS BANDIT_B, 
                                      NOMPRISON AS PRISON_B))
             WHERE BANDIT_A = '999' 
               AND BANDIT_A = BANDIT_B 
               AND PRISON_A = PRISON_B 
               AND DATE_DEBUT < DATE_FIN AS T1,
          MIN (T1, DATE_FIN) AS T2 :
          T2 {DATE_DEBUT, DATE_FIN, PRISON_A} ;
    On a traité ici de l’historique des séjours. Reste à traiter la partie qui concerne les personnes actuellement en détention (pas évident...)

    En SQL (a priori complet, à CinePhil de vérifier...) :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  A1.NUMBANDIT, A1.NOMPRISON, A1.DATE_DEBUT, Min(B1.DATE_FIN) as DATE_FIN
    FROM    DEBUTER_SEJOUR AS A1 LEFT JOIN FINIR_SEJOUR AS B1
              ON      A1.NOMPRISON = B1.NOMPRISON 
                AND   A1.NUMBANDIT = B1.NUMBANDIT
                AND   A1.DATE_DEBUT < B1.DATE_FIN
    WHERE   A1.NUMBANDIT >= '999'
    GROUP BY A1.NUMBANDIT, A1.NOMPRISON, A1.DATE_DEBUT ;


    Passons à la question B.4 :
    Liste des bandits qui se sont évadés de la prison de Nîmes : NUMBANDIT, NOMBANDIT, DATE_EVASION
    On peut procéder ainsi :

    1) Restriction sur l’attribut EVASION : FINIR_SEJOUR WHERE EVASION = 'OUI',
    2) Jointure naturelle des tables FINIR_SEJOUR et BANDIT,
    3) Projection sur les attributs NUMBANDIT, NOMBANDIT, DATE_FIN (que l’on peut renommer en DATE_EVASION).
    Je vous laisse le soin de la rédaction.

    Passons à la question B.5 :
    Liste des NOMPRISON et NOMDIRECTEUR des prisons où il y a eu au moins une évasion
    1) Restriction sur l’attribut EVASION : FINIR_SEJOUR WHERE EVASION = 'OUI',
    2) Jointure naturelle des tables PRISON et FINIR_SEJOUR,
    3) Projection sur les attributs NOMPRISON et NOMDIRECTEUR.

    Passons à la question B.6 :
    Quels sont les "amis" de Jack Dalton (NUMBANDIT = 631)
    Pas de panique, il s’agit d’une auto-jointure. Faites comme s’il y avait deux tables BANDIT.

    1) Restriction sur la table BANDIT,
    2) Jointure naturelle de BANDIT et de BANDIT (ce qui suppose de renommer les attributs ne servant pas dans la jointure proprement dite),
    3) Projection sur les attributs voulus.
    (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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Bonjour,

    Histoire d’y voir plus clair, affichons votre MCD et votre MLD.

    MCD


    Quelques commentaires sur ce MCD :

    1) La patte connectant l’entité-type CASSE et l’association-type Participer est porteuse d’une cardinalité minimale 0. Cela veut dire qu’il peut exister des casses pour lesquels on n’a pas encore identifié les participants. Est-ce bien ce que le MCD veut exprimer ?

    2) La patte connectant l’entité-type BANDIT et l’association-type Participer est porteuse d’une cardinalité minimale 1. Cela veut dire qu’à terme la base de données ne recensera que les bandits ayant participé à des casses. Est-ce bien ce que le MCD veut exprimer ?

    3) La modélisation des séjours en prison est correcte, mais sera à aménager au niveau du MLD si on ne veut pas partir dans la mise en œuvre de contraintes nécessaires à la bonne santé de la base de données (par exemple, Louis ne peut pas être en même temps à Fresnes et à La Santé, etc.) et une rédaction compliquée des requêtes (cf. B.3). En effet, on a là un exemple de gestion de données datées, à savoir en cours d’une part (Louis est actuellement en prison) et historisées d’autre part (Louis a purgé plusieurs peines à La Santé et en d’autres lieux). Mais bon, on fera avec ce MCD et le MLD qui en est dérivé.

    MLD




    Venons-en à vos requêtes.

    Vous écrivez :
    1) Quels sont les bandits table bandit et table participer?
    Quel est le sens de cette phrase incompréhensible ?

    Vous écrivez :
    T1= jointure(bandit,participer) T1(numbandit,nombandit,numcasse)
    Il faudrait que vous fournissiez un minimum d’explications quant aux opérateurs et à la syntaxe. Si vos notations sont basées sur une grammaire donnée, merci de fournir le lien vers celle-ci.

    Ainsi, qu’est-ce que T1 ? Le résultat d’une « jointure » ? Pourquoi T1 figure deux fois sur la même ligne ?

    Que veut dire « T1(numbandit,nombandit,numcasse) » ?

    Le terme « jointure » symbolise-t-il l’opération d’équijointure ? De jointure naturelle ? De thêta-jointure ?

    Vous écrivez :
    T2=sélection(T1,numcasse=251) T2(numbandit,nombandit,251)
    Je ne vois aucun rapport entre ces expressions et la question posée.

    Concernant la question 2 :
    2) nom et matricule du commissaire
    Que vient faire le casse 543 ? Est-ce à dire que la question posée est en fait la suivante :
    Quel est le nom et quel est le matricule du commissaire chargé de l’enquête concernant le casse pour lequel la valeur de l’attribut Numcasse dans l’en-tête de la table CASSE est égal à 543 ?


    Passons à la question B.1 :
    Liste des bandits arrêtés par le commissaire Bond (MATRICULE = 007) : NUMBANDIT, NOMBANDIT, DATE-ARRESTATION
    Les informations demandées figurent dans la table BANDIT (attributs NUMBANDIT et NOMBANDIT), ainsi que dans la table ARRETER (attributs NUMBANDIT, DATE_ARRESTATION et MATRICULE). Il y a donc à prévoir une jointure naturelle à laquelle participent ces deux tables, ainsi qu’une restriction (ce que vous appelez une sélection) pour se limiter aux arrestations auxquelles a procédé le commissaire de matricule 007, puis une éventuelle projection sur les attributs NUMBANDIT, NOMBANDIT, DATE_ARRESTATION comme l’a fait CinePhil.

    Dans le style impératif, on peut procéder ainsi (voyez la formulation d’Oishiiii) :

    1) Restriction des lignes de la table ARRETER, pour lesquelles le prédicat MATRICULE = '007' est VRAI.
    2) Jointure naturelle des tables ARRETER et BANDIT, afin de récupérer les lignes concernant les bandits correspondants.
    3) Projection sur les attributs à faire figurer dans le résultat : NUMBANDIT, NOMBANDIT, DATE_ARRESTATION.

    Je vous renvoie à l’annexe B de l’article Bases de données relationnelles et normalisation dans lequel je rappelle la notation des opérateurs relationnels dans le style de Tutorial D.

    Toujours dans le style impératif et en Tutorial D, on formalise ainsi ce qui précède :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WITH 
          ARRETER WHERE MATRICULE = '007' AS T1,
          T1 JOIN BANDIT AS T2 :
          T2 {NUMBANDIT, NOMBANDIT, DATE_ARRESTATION} ; 
    Si vous préférez le style déclaratif :
    ((ARRETER WHERE MATRICULE = '007') JOIN BANDIT) {NUMBANDIT, NOMBANDIT, DATE_ARRESTATION} ;
    Vous pouvez aussi utiliser le style SQL, comme l’a fait CinePhil.

    Maintenant, si vous avez une grammaire spécifique, à vous d’adapter.

    A noter : dans la jointure naturelle des tables ARRETER et BANDIT, seul l’attribut MATRICULE est utile en ce qui concerne la table ARRETER. Dans ces conditions, vous pouvez utiliser la semi-jointure (opérateur SEMIJOIN), c'est-à-dire ne retenir de la table BANDIT que les lignes qui ont leur contrepartie dans la table ARRETER. Ainsi, on peut remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WITH 
          ARRETER WHERE MATRICULE = '007' AS T1,
          T1 JOIN BANDIT AS T2 :
          T2 {NUMBANDIT, NOMBANDIT, DATE_ARRESTATION} ;
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WITH 
          ARRETER WHERE MATRICULE = '007' AS T1,
          BANDIT SEMIJOIN T1 AS T2 :
          T2 {NUMBANDIT, NOMBANDIT, DATE_ARRESTATION} ;
    Mais attention, les termes BANDIT et T1 doivent impérativement figurer respectivement à gauche et à droite de l’opérateur SEMIJOIN. Dans le cas contraire, ce sont les lignes de T1 qui sont retenues et pas celle de BANDIT.


    Passons à la question B.2 :
    Liste des NUMCASSE, DESIGN-CASSE, DATE-CASSE, VILLE-CASSE ET TYPE-CASSE auxquels a participé Jo MAGNUM (NUMBANDIT = 532)
    La table CASSE est partie prenante à cause des attributs NUMCASSE, DESIGN-CASSE, DATE-CASSE, VILLE-CASSE ET TYPE-CASSE. La table PARTICIPER est aussi partie prenante, à cause des attributs NUMCASSE et NUMBANDIT.

    Comme dans l’exemple précédent, on peut procéder ainsi :

    1) Restriction des lignes de la table PARTICIPER, pour lesquelles le prédicat NUMBANDIT = '532' est VRAI.
    2) Jointure naturelle (ou semi-jointure) des tables PARTICIPER et CASSE.
    3) Projection sur les attributs à faire figurer dans le résultat : NUMCASSE, DESIGN-CASSE, DATE-CASSE, VILLE-CASSE ET TYPE-CASSE.

    Je vous laisse formaliser.

    Passons à la question B.3 :
    Quels sont les séjours que P'tit Louis de NUMBANDIT = 999 a effectués en prison : DATE_DEBUT, DATE_FIN, NOMPRISON
    Dans l’état de votre MCD (donc de votre MLD), la solution est loin d’être triviale. Dans un premier temps, il faut comparer les lignes de la table DEBUTER_SEJOUR avec celle de la table FINIR_SEJOUR, pour lesquelles NUMBANDIT = '999' et on a égalité sur les attributs NOMPRISON et NUMBANDIT (comme dans le cas d’une jointure naturelle), mais pour lesquelles on vérifie en plus l’inégalité DATE_DEBUT < DATE_FIN, sachant qu’au résultat de cette vérification, il faudra retenir chaque ligne pour laquelle la date de fin est la plus ancienne (utilisation de l’opérateur d’agrégation MIN), car Louis a pu faire plus d’un séjour dans la même prison.

    Dans le style de Tutorial D :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH 
               ((DEBUTER_SEJOUR RENAME NUMBANDIT AS BANDIT_A, 
                                       NOMPRISON AS PRISON_A) 
          TIMES 
               (DEBUTER_SEJOUR RENAME NUMBANDIT AS BANDIT_B, 
                                      NOMPRISON AS PRISON_B))
             WHERE BANDIT_A = '999' 
               AND BANDIT_A = BANDIT_B 
               AND PRISON_A = PRISON_B 
               AND DATE_DEBUT < DATE_FIN AS T1,
          MIN (T1, DATE_FIN) AS T2 :
          T2 {DATE_DEBUT, DATE_FIN, PRISON_A} ;
    On a traité ici de l’historique des séjours. Reste à traiter la partie qui concerne les personnes actuellement en détention (pas évident...)

    En SQL (a priori complet, à CinePhil de vérifier...) :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  A1.NUMBANDIT, A1.NOMPRISON, A1.DATE_DEBUT, Min(B1.DATE_FIN) as DATE_FIN
    FROM    DEBUTER_SEJOUR AS A1 LEFT JOIN FINIR_SEJOUR AS B1
              ON      A1.NOMPRISON = B1.NOMPRISON 
                AND   A1.NUMBANDIT = B1.NUMBANDIT
                AND   A1.DATE_DEBUT < B1.DATE_FIN
    WHERE   A1.NUMBANDIT >= '999'
    GROUP BY A1.NUMBANDIT, A1.NOMPRISON, A1.DATE_DEBUT ;


    Passons à la question B.4 :
    Liste des bandits qui se sont évadés de la prison de Nîmes : NUMBANDIT, NOMBANDIT, DATE_EVASION
    On peut procéder ainsi :

    1) Restriction sur l’attribut EVASION : FINIR_SEJOUR WHERE EVASION = 'OUI',
    2) Jointure naturelle des tables FINIR_SEJOUR et BANDIT,
    3) Projection sur les attributs NUMBANDIT, NOMBANDIT, DATE_FIN (que l’on peut renommer en DATE_EVASION).
    Je vous laisse le soin de la rédaction.

    Passons à la question B.5 :
    Liste des NOMPRISON et NOMDIRECTEUR des prisons où il y a eu au moins une évasion
    1) Restriction sur l’attribut EVASION : FINIR_SEJOUR WHERE EVASION = 'OUI',
    2) Jointure naturelle des tables PRISON et FINIR_SEJOUR,
    3) Projection sur les attributs NOMPRISON et NOMDIRECTEUR.

    Passons à la question B.6 :
    Quels sont les "amis" de Jack Dalton (NUMBANDIT = 631)
    Pas de panique, il s’agit d’une auto-jointure. Faites comme s’il y avait deux tables BANDIT.

    1) Restriction sur la table BANDIT,
    2) Jointure naturelle de BANDIT et de BANDIT (ce qui suppose de renommer les attributs ne servant pas dans la jointure proprement dite),
    3) Projection sur les attributs voulus.



    MERCI BEAUCOUP DE VOTRE AIDE ET DE CETTE CLARIFICATION, BEAUCOUP PLUS SIMPLE MAINTENANT, LA TECHNIQUE QUE J'UTILISE C'EST LE PSEUDO LANGAGE ET J'AI TOTALEMENT ASSIMILé . à tres bientot

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par johndoc Voir le message
    MERCI BEAUCOUP DE VOTRE AIDE ET DE CETTE CLARIFICATION, BEAUCOUP PLUS SIMPLE MAINTENANT, LA TECHNIQUE QUE J'UTILISE C'EST LE PSEUDO LANGAGE ET J'AI TOTALEMENT ASSIMILé . à tres bientot


    quand aux deux T1 sur la meme ligne c'est en faite deux possibilités différentes.

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 21/02/2010, 19h02
  2. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39
  3. [sgbd] Accès au base de données en Perl
    Par totox17 dans le forum SGBD
    Réponses: 3
    Dernier message: 24/02/2003, 16h05
  4. [VB6] [Access] Compacter une base de donnée
    Par mdoyer dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 24/09/2002, 11h33
  5. [VB6] [ODBC] Référencer une base de données avec vb
    Par af.balog dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/09/2002, 09h51

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