|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Mickael Étudiant Inscription : décembre 2007 Messages : 256 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Mickael Étudiant Inscription : décembre 2007 Messages : 256 ![]() |
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.
|
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
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://img1.lemondeinformatique.fr/f...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 Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#4 |
|
Membre du Club
![]() Mickael Étudiant Inscription : décembre 2007 Messages : 256 ![]() |
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 |
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
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 Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
Copyright © 2000-2012 - www.developpez.com