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

MS SQL Server Discussion :

Requêtes sur des tables nées d'un héritage [2012]


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Elève Ingénieur
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Elève Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 34
    Points
    34
    Par défaut Requêtes sur des tables nées d'un héritage
    Bonjour à tous et désolé si je ne suis pas au bon endroit pour poser cette question. Je tiens déjà à remercier tous ceux qui prendront un peu de leur précieux temps pour jeter un oeil à mon problème.

    Bon sans plus tarder, j'entre dans le vif du sujet. . Je travaille dans une boite de développement et actuellement je suis sur une application web ASP.NET MVC avec VB.NET sous VS 2013. Pour des raisons que je ne vais pas citer (je ne pense pas que ce soit important), nous (équipe projet) avons décidé d'opter pour le Code First afin d'optenir notre base de données. Il s'avère donc que lors de la modélisation nous avons fait recours à la notion d'héritage. En effet nous avons trois classe (Region, Departement, Commune) qui ont la particularité d'être des collectivités territoriales (du point de vue de notre projet). De ce fait nous avons jugé bon de regrouper les attributs communs aux trois classes en une classe (Collectivite) et de faire appel à la notion d'héritage. Pour que tous le monde puisse suivre, voici le code des différentes classes concernées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    /*Ici c'est la classe Collectivite*/
     
    Imports System
    Imports System.Collections.Generic
    Partial Public Class Collectivite
        Public Property Id As Long
        Public Property Code As String
        Public Property Libelle As String
        Public Property Superficie As Decimal
        Public Property Population As Decimal
        Public Property DateCreation As Date = Now
        Public Property UserId As String
        'Public Overridable Property User As ApplicationUser
        Public Overridable Property PointAcces As ICollection(Of PointAcces) = New HashSet(Of PointAcces)
    End Class
     
    /*Ici c'est la classe Commune*/
     
    Imports System
    Imports System.Collections.Generic
    Partial Public Class Commune
        Inherits Collectivite
     
        Public Property DepartementId As Long
        Public Overridable Property Departement As Departement
        Public Overridable Property BudgetCommune As ICollection(Of BudgetCommune) = New HashSet(Of BudgetCommune)
        Public Overridable Property ValeurChamps As ICollection(Of ValeurChamps) = New HashSet(Of ValeurChamps)
    End Class
     
     
    /*Ici c'est la classe Departement*/
     
    Imports System
    Imports System.Collections.Generic
    Partial Public Class Departement
        Inherits Collectivite
     
        Public Property ChefLieu As String
        Public Property RegionId As Long
        Public Overridable Property Region As Region
        Public Overridable Property Communes As ICollection(Of Commune) = New HashSet(Of Commune)
    End Class
     
     
    /*Ici c'est la classe Region*/
     
    Imports System
    Imports System.Collections.Generic
     
    Partial Public Class Region
        Inherits Collectivite
     
        Public Property ChefLieu As String
        Public Overridable Property Departements As ICollection(Of Departement) = New HashSet(Of Departement)
    End Class
    Nous avons pu obtenir notre base de données via le code first. Cette base de données contient donc les quatre tables ci-dessus et les tables filles dépendent de la table mère (collectivite). pour faire une insertion, dans l'une des tables filles, nous ajoutons d'abord un tuple dans la table mère qui a un identifiant auto-incrémenté. puis nous récupérons l'Identifiant en question pour l'insérer dans la table fille sur laquelle nous travaillons.

    La table Commune est reliée à une autre table appelée "Projet" via une relation (1..n) ---> (1..1), donc la clé de commune est clé étrangère dans projet. Je suis sur la réalisation d'un des états lié au projet et j'ai besoin de récupérer chaque projet ainsi que le nom de la commune concernée mais aussi celui du département et celui de la région car une région compte des départements qui elles à leur tour comptent des communes.

    Je ne sais pas si j'ai été assez clair dans la formulation de mon problème. Je vous remercie d'avance pour vos solutions.

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

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 291
    Points : 39 558
    Points
    39 558
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Vous devriez communiquer un exemple de jeu de données en entrée, un exemple de résultat attendu en sortie, et le DDL de vos tables et index (instructions CREATE TABLE... et CREATE INDEX)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Elève Ingénieur
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Elève Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Vous devriez communiquer un exemple de jeu de données en entrée, un exemple de résultat attendu en sortie, et le DDL de vos tables et index (instructions CREATE TABLE... et CREATE INDEX)
    Vous souhaitez avoir la totalité du script de la BD ou alors juste celui des tables dont j'ai mentionné le nom dans mon poste. J'ai oublié de signaler que l'état que je dois générer fait appel a plus de 7 tables dont évidement plusieurs que j'ai cité.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Il faudra pour cela effectuer plusieurs jointure sur la table Collectivité, et donc utiliser des alias de table pour vous (et aussi le SGBDR !) vous y retrouviez :


    Quelque chose comme ceci, a adapter au besoin, et vrais nom de table et de colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SELECT
    		P.id_projet
    	,	ColCommune.Nom		AS NomCommune
    	,	ColDepartement.Nom	AS ColDepartement
    	,	ColRegion.Nom		AS NomRegion
    FROM	Projet P
    INNER JOIN Collectivite colCommune
    	ON	ColCommune.id_collectivite = P.id_commune
    INNER JOIN Commune C
    	ON	C.id_commune = colCommune.id_collectivite
    INNER JOIN Collectivite ColDepartement
    	ON	colDepartement.id_collectivite = C.id_departement
    INNER JOIN Departement D
    	ON	D.id_departement = C.id_departement
    INNER JOIN Collectivite ColRegion
    	ON	ColRegion.id_collectivite = D.id_region

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Elève Ingénieur
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Elève Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 34
    Points
    34
    Par défaut
    Merci à vous aieeeuuuuu j'ai tester votre requête tout en utilisant bien sûr le véritable nom des colonnes et des tables. Pour le moment cela fonctionne. Toutefois avant de marquer la discussion comme résolue, je vais consulter mon supérieur pour qu'il effectue d'autres tests, mais je crois vraiment qu'il n'aura rien à redire.

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

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 291
    Points : 39 558
    Points
    39 558
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par lefajele Voir le message
    Vous souhaitez avoir la totalité du script de la BD ou alors juste celui des tables dont j'ai mentionné le nom dans mon poste. J'ai oublié de signaler que l'état que je dois générer fait appel a plus de 7 tables dont évidement plusieurs que j'ai cité.
    Seules les tables requises pour votre besoin, et leurs index
    Sauf si vous avez dans l'intervalle réussi à adapter la proposition de aieeeuuuuu à votre cas réel, auquel cas l'incident est clos

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Elève Ingénieur
    Inscrit en
    Juillet 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Elève Ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 26
    Points : 34
    Points
    34
    Par défaut Problème résolu
    Le problème que j'ai eut à poser quelques jours a été résolu grâce à votre aide à tous. Je vous remercie d'avoir pris un peu de votre temps pour vous pencher sur ce problème qui me cassait déjà la tête . J'espère que vous vous portez tous bien et que je pourrais continuer à compter sur vous.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/12/2015, 18h20
  2. Réponses: 22
    Dernier message: 10/07/2011, 17h49
  3. Réponses: 2
    Dernier message: 07/05/2008, 08h51
  4. Réponses: 1
    Dernier message: 28/02/2008, 08h17
  5. Réponses: 13
    Dernier message: 29/01/2008, 15h28

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