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 :

Meilleure solution pour un héritage ?


Sujet :

Langage SQL

  1. #1
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut Meilleure solution pour un héritage ?
    Bonjour,

    J'ai vu que si on souhaite simuler un héritage en relationnel, il existe deux solutions, par exemple:

    Première solution :
    Personne(idPersonne, nom, prenom)
    Footballeur(idFootballeur, nbButs) avec idFootballeur qui reference idPersonne
    Basketteur(idBasketteur, nbPaniers) avec idFootballeur qui reference idPersonne

    Seconde solution :
    Footballeur(idFootballeur, nom, prenom, nbButs)
    Basketteur(idBasketteur, nom, prenom, nbPaniers)


    La première solution va m'obliger a faire des jointures à chaque requête entre une "sous-table" et ma "super-table"
    Tandis que la seconde implique de la redondance entre attributs.

    Quelle est la meilleure solution selon vous?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    La redondance étant interdite dans les SGBD relationnel par définition, la seule solution est la première !

    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/ * * * * *

  3. #3
    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
    La seconde solution n'est d'ailleurs pas un héritage.
    Le bon héritage, c'est la première solution.

    Et ne vous affolez pas pour les jointures. Faites des vues et vous interogez les vues comme si c'étaient des tables. Les jointures sont dans les vues mais on s'en fout ; elles sont écrites une fois pour toutes.
    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 !

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Une troisième solution serait :

    Personne (id, nom, prenom)
    Sport (id, nom)
    Score (personne_id, sport_id, points)

    Ainsi, si demain il y a à gérer du tennis, du volley ou du golf, pas besoin de démultiplier le nombre de tables.
    Attention cependant, si on veut avoir ensuite avoir des données de types ou nombres différentes selon les sports, ce modèle à des limites.
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut
    @CinePhil @SQLpro: merci pour vos réponses, ça a le mérite d'être clair.

    @StringBuilder: j'ai pris le Sport juste pour l'exemple, mais ta méthode résout complètement le problème.

    En réalité, j'ai les tables suivantes :
    Utilisateur (idUtilisateur, nom, prenom, email, ...)
    Etudiant (idEtudiant, numINE, promotion) avec idEtudiant = Utilisateur(idUtilisateur)
    Enseignant (idEnseignant) avec idEnseignant = Utilisateur(idUtilisateur)
    Tuteur (idTuteur, entreprise) avec idTuteur = Utilisateur(idUtilisateur)
    Secrétaire (idSecretaire) avec idSecretaire = Utilisateur(idUtilisateur)

    Sauf que qu'un enseignant, peut aussi être un tuteur. Est ce que ça pose pas de problème si il apparait dans les deux tables?
    Autre question: est-ce que vous ne trouvez pas bizarre mes tables Enseignant et Secrétaire qui n'ont qu'un seul attribut?

    En fait, je fais ça pour gérer l'affichage de mon site en fonction du "statut" de l'utilisateur.

  6. #6
    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
    L'héritage ne se justifie que s'il y a des propriétés ou des associations spéciales pour un type d'individu. S'il s'agit juste de typer l'individu pour lui accorder des droits à une application, cela se gère tout à fait autrement.
    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 !

  7. #7
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut
    Tu as des pistes ?

    Au début, je pensais mettre tout simplement un attribut 'role' dans la table Utilisateur.
    Mais étant donné qu'un utilisateur peut avoir plusieurs rôles (tuteur ET enseignant par exemple) ...

  8. #8
    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
    Et bien il faut une table des rôles et une table associative entre role et utilisateur.

    Règle de gestion :

    Un utilisateur a de un à plusieurs rôles et un rôle peut être attribué à plusieurs utilisateurs.

    MCD :
    utilisateur -1,n----attribuer----0,n role

    Tables :
    te_utilisateur_uti (uti_id, ...)
    te_role_rol (rol_id, ...)
    tj_uti_attribuer_rol_uar (uar_id_utilisteur, uar_id_role...)
    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 !

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

Discussions similaires

  1. Meilleure solution pour déployer un projet Eclipse
    Par nicolas.pied dans le forum Langage
    Réponses: 3
    Dernier message: 04/06/2006, 11h19
  2. [eCommerce] Meilleure solution pour ecommerce
    Par llax dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 23/12/2005, 21h03
  3. meilleure solution pour implementation
    Par shirya dans le forum C++
    Réponses: 2
    Dernier message: 20/12/2005, 21h46
  4. meilleur solution pour créer un document imprimable???
    Par martimacfly dans le forum XML/XSL et SOAP
    Réponses: 26
    Dernier message: 08/07/2004, 10h09
  5. [Conception] Meilleures solutions pour gérer le multilangage
    Par scorpiwolf dans le forum Général Java
    Réponses: 3
    Dernier message: 06/07/2004, 16h11

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