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

Langage SQL Discussion :

Relation complexe et conditionnelle


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 57
    Points
    57
    Par défaut Relation complexe et conditionnelle
    Bonjour,

    Je souhaite modéliser une relation complexe entre différentes tables.

    Voici mes entités :
    Continent, Pays, Ville, Catastrophe.

    Un continent regroupe plusieurs pays.
    Un Pays regroupe plusieurs villes.
    Une catastrophe affecte tout un continent ou tout un pays ou toute une ville.

    C'est cette dernière phrase qui me pose un problème. Je ne trouve pas mieux qu'une table de jointure entre les 4 entités, et des IF en php pour savoir qui est/sont concerné(s).

    Merci d'avance pour votre aide,

  2. #2
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Une idée : Utiliser l'héritage.

    Règles de gestion :
    1) Une entité géographique est soit un continent, soit un pays, soit une ville
    2) Une catastrophe affecte une et une seule entité géographique

    MCD :
    Catastrophe -1,1----Affecter----0,n- Entité géo
    Continent -1,1----Etre1----0,1---------|
    Pays -1,1---------Etre2----0,1---------|
    Ville -1,1----------Etre3----0,1---------|

    Continent -0,n----Contenir1----1,1- Pays -0,n----Contenir2----1,1- Ville

    Tables :
    EntitesGeo (EG_Id, ...)
    Continents (C_Id_EG, ...)
    Pays (P_Id_EG, P_IdContinent, ...)
    Villes (V_Id_EG, V_IdPays, ...)
    Catastrophes (Cat_Id, Cat_Id_EG, ...)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    J'ai du mal à obtenir le modèle physique que vous proposez malgré les précisions que vous m'avez fourni. Je ne saisis pas tout à fait quelles sont les clés étrangères et à qui elles font référence.

    Pouvez les indique avec une notation du type FK_nomCléPrimaire ?

    Merci

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Les clés primaires sont soulignées et les clés étrangères sont en italique.

    On voit que dans les tables Continents, Pays et Villes, les clés primaires sont également clés étrangères puisqu'elles héritent de la table EntitesGeo.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    Merci c'est plus clair maintenant.

    Dans ce cas, par quelle(s) requête(s) peut on accéder à la zone affectée d'une catastrophe donnée ?

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    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 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    tu part sur un postulat faux :
    2) Une catastrophe affecte une et une seule entité géographique
    Comme vous vous êtes limités au continent, les catastrophes intercontinentales ne pourrons être saisie. Exemple : météorite à l'origine de la disparition des dynausores, éruption du krakatoa et du santorin (tsunami de 60 m), tsunami de noêl 2004.

    Krakatoa :
    Le panache de cendres volcaniques monta à 40 Km dans l’atmosphère et répandit suffisamment de particules pour abaisser la température moyenne mondiale de 0,25°C l’année suivante.
    L’éruption fut à l’origine des couchers de soleil flamboyants, puis rouge lie-de-vin, notamment en Grande-Bretagne.
    Dans plusieurs villes des Etats-Unis, des lueurs rougeoyantes furent prises pour des incendies et l’on fit appel aux pompiers.
    Ces phénomènes se manifestèrent pendant environ trois ans. (Citation le Krakatoa, Mémoire de l'Humanité sous le direction de Nadeije Laneyrie-Dagen, maître de conférence à l'université de Lille-III)


    A +

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    disparition des dynausores
    Les dynausores je ne sais pas, mais les dinosaures certainement

  8. #8
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Je suis parti d'un postulat simple pour expliquer mon idée d'utiliser l'héritage.

    Il est bien évident, sans aller chercher les dynausores (sic ! ) qu'une catastrophe peut toucher plus d'une ville. La récente tempête dans le sud-ouest par exemple.

    Il suffit de changer les cardinalités de l'association Affecter et d'ajouter une table associative mais on n'a bien qu'une seule association au lieu des 3 de départ.

    Revenons à la question posée par gobgob :
    Dans ce cas, par quelle(s) requête(s) peut on accéder à la zone affectée d'une catastrophe donnée ?
    J'ai pensé à ce problème après avoir rédigé mon idée...
    L'association ne dit en effet pas si la zone géo affectée est un continent, un pays ou une ville.
    Il serait possible d'ajouter une colonne à la table EntitesGeo indiquant de quel type d'entité géographique il s'agit (Continent, Pays ou Ville).

    Il faudrait alors procéder en deux requêtes :
    - 1 pour connaître l'entité géographique et son type ;
    - 1 pour interroger le type de l'entité géographique.

    Peut-être faisable en programmation SQL que je ne maîtrise pas encore, sinon dans le langage de l'application qui utilise la BDD. En php par exemple ce n'est pas très compliqué.

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    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 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Pour avoir travaillé sur des bases de données d'accidents et catastrophes pendant 10 ans je peut te dire que le seul moyen de localiser la cata est de faire des aires géographiques indépendantes de toutes les notions politiques (ville, département région, pays continent) sont des notions politiques et non géographiques. rappelons que l'étymologie du mot politique vient de POLIS (comme dans Persepolis) la ville. La politique n'étant autre chose que la gestion globale de la "ville"....

    Or aujourd'hui nous disposons de SGBDR avec des options GIS comme PostGreSQL ou SQL Server 2005. Il est donc beaucoup plus facile de modéliser cela...

    De plus il faut faire des zones concentriques. Par exemple pour un TT il y aura des zones à 7 richter, puis 6 richter, puis 5 richter et enfin 4 (3 étant peu perceptible). par rapport à l'épicentre. Voir :
    http://fr.mapsofworld.com/mapinnews/...-may-2008.html
    http://www.ggl.ulaval.ca/personnel/b...1/seismes.html

    A +

    A +

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    Merci pour ces réponses.

    Concernant la première réplique de SQLPro, le postulat en question n'est pas assez clair. Une catastrophe affecte un seul type d'entités géographique. Donc un seul pays par exemple, donc évidemment toutes les villes de ce pays.

    La réponse que j'attendais était de savoir s'il fallait faire deux requêtes, jouer sur une troisieme colonne et profiter du php pour les différents tests. Je voulais savoir si une solution plus homogène, exclusiement basée sur ce que propose un SGBD (MySQL dans mon cas) était possible.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    J'ai tenté de mettre en place la solution proposée par CinePhil mais j'arrive sur un nouveau problème.

    Si la table Continent a une colonne ID qui est à la fois clé primaire et clé étrangère (qui référence l'attribut ID de la table Entités géographiques), comment faire en sorte que 2 continents pointent sur un même ID de la table Entités géographique ?

    En effet, lorsqu'on tente de le faire, le SGBD rejette notre requête car nous tentons de créer deux continents avec la même clé primaire !

Discussions similaires

  1. [Doctrine] Relation complexe avec doctrine 1
    Par lowdance dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 08/11/2013, 21h22
  2. relations complexe entre les tables
    Par baptistehgc dans le forum Modélisation
    Réponses: 15
    Dernier message: 02/08/2012, 19h08
  3. modélisation relations complexes
    Par Yanns dans le forum Modélisation
    Réponses: 2
    Dernier message: 11/10/2011, 11h35
  4. [MySQL] Affichage conditionnelle complexe
    Par lilia_dream dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 06/04/2009, 12h20
  5. [SQL] Relations complexes entre deux tables
    Par simonoche dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/06/2007, 01h23

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