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

Requêtes MySQL Discussion :

Heritage et cle primaire


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Par défaut Heritage et cle primaire
    Bonjour,

    Je ne suis pas sur d’être sur le bon forum car ma question n'est pas spécifique a MySQL.
    J'utilise Hibernate pour la persistance objet-relationnel. Je sais que je parle de classes mais j'en ai besoin pour introduire le problème.
    J'ai une classe A abstraite possédant les attributs a,b,c,d et une classe B qui hérite de A avec les attributs e,f,g (et ceux de A par héritage bien sur).
    La classe abstraite A n'a aucun attribut (ou groupe d'attributs) pouvant l'identifier. Les instances de B sont identifiées a partir de l'attribut 'a' (de la classe A) et de l'attribut 'e' (de la classe B).
    Comment représenter cet héritage dans le modèle relationnel? (laissons de cote Hibernate, je parle dans le cas ou je ferais le mapping manuellement)

    Si je définis une table par classe (y compris la classe abstraite A), je me retrouve avec une table A et une table B (possédant une clé étrangère vers A). Le problème est qu'aucun des attributs (ou groupe d'attributs) de A ne peuvent identifier des lignes de A donc je me retrouve avec une table sans clé primaire, et c'est interdit. J'ai décidé donc d'ajouter une clé "artificiel"(je crois que ça s'appelle surrogate) qui n'a pas de représentation. Le problème est que le groupe d'attributs 'a' et 'e' (de A et B respectivement) est une clé candidate, il y a donc une contrainte d’unicité nécessaire; or je ne vois pas comment créer une contrainte d’unicité sur des attributs appartenant a des tables différentes.

    Si vous aviez une solution en changeant l'architecture ou autre.


    Merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Par défaut
    Personne n'a de solution? J'ai cherche sur internet, on parle de l'utilisation des triggers mais c'est valable pour des contraintes UNIQUE par exemple, ce n'est pas valable pour les contraintes de clé primaire.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Faire un mapping RO dans MySQL relève de l'utopie. Il ne sait pas gérer les trigger INSTEAD OF nécessaire à cela et quand aux autres triggers c'est tellement limité qu'en pratique cela ne sert à pas grand chose...
    Ce n'est pas avec MySQL que vous arriverez à faire proprement ce genre de chose.
    Quand à l'utilisation d'Hibernate, c'est l'un des outils de mapping RO les plus médiocre !
    Lisez les articles que j'ai écrit à ce sujet :
    1) Mapping RO côté SGBDR : http://sqlpro.developpez.com/cours/b...s-epaisses.pdf
    2) Critiques de MySQL : http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/
    3) comparaison outils de mapping : http://ormeter.net/
    Bref, débarrassez vous de ces outils qui constitue le "vietnam informatique" !
    http://www.theserverside.com/news/th...hread_id=41114

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

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Par défaut
    Merci pour la réponse.
    Dans ce cas, que me conseillez vous? Quel autre SGBD utiliser? Quel autre outil de mapping utiliser? Ou est ce que c'est mieux de créer sa base manuellement et de coder les accès a la base en SQL?
    D’après votre réponse, je comprends que je dois utiliser les triggers? Mais dans ce cas, dois-je continuer a utiliser une clé "artificiel" et donc de vérifier l’unicité avec un trigger?
    Aussi, je rencontre ces problèmes alors que je développe un projet open source, dans ce cas, n'y a t-il pas des limitations sur les bases de données a utiliser (j'ai choisi MySQL parce que elle est libre d'utilisation)?
    Même question pour l'outil de mapping OR.

    Merci

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Tout dépend de la montée en charge que vous voulez faire.... Il n'y a pas d'outils gratuit ou open source capable de mettre cela en œuvre aujourd'hui. PostGreSQL à prévu ce genre de techniques dans le futur...
    Les SGBDR qui font cela sont Oracle, SQL Server et IBM DB2.
    Pour les ORM, hibernate étant le plus mauvais, je vous conseille soit de vous en passer totalement (oui c'est parfaitement faisable et c'est un gain de temps), soit d'opter pour le meilleur, et là c'est plus de ma compétence !

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

Discussions similaires

  1. Heritage et cle primaire
    Par Miko95 dans le forum JPA
    Réponses: 1
    Dernier message: 20/03/2011, 14h47
  2. Heritage et cle primaire
    Par Miko95 dans le forum ALM
    Réponses: 12
    Dernier message: 23/02/2011, 10h29
  3. [debutant]cle primaire particuliere
    Par christophebmx dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/08/2004, 13h27
  4. [ db2 ] cle primaire autoincrement
    Par hocinema dans le forum DB2
    Réponses: 4
    Dernier message: 25/02/2004, 14h20
  5. XSD, Cle primaire...
    Par Goupil dans le forum Valider
    Réponses: 3
    Dernier message: 21/10/2003, 09h04

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