Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/01/2008, 23h12   #1
Invité de passage
 
Inscription : mai 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 5
Points : 2
Points : 2
Par défaut hiérarchie sur une table et contrainte associée

Bonjour à tous,

Débutant, j'essaie de mettre en place une arborescence de catégories et de sous catégores.

Dans une base de donnée de type MySql, je souhaiterais utiliser une seule table 'categorie' avec une relation enfant-parent. Il s'agit d'une table de type InnoDB, car je souhaite utiliser des contraintes.

Code :
1
2
3
4
5
6
CREATE TABLE `categorie` (
  `id_categorie` int(20) NOT NULL DEFAULT '0',
  `libelle` varchar(100) NOT NULL DEFAULT '',
  `parent_categorie_id` int(20) DEFAULT '0',
  PRIMARY KEY  (`id_categorie`),
) TYPE=InnoDB;
Je voudrais également utiliser le framework hibernate pour la persistance, je souhaiterais générer les fichiers de mapping automatiquement à partir de la table 'categorie' en question (ide MyEclipse).

Pour gérer la mutiplicité des associations, (many-to-one....), MyEclipse se base sur les contraintes d'intégrités décrites dans la base.

J'aimerais donc indiquer dans ma table, qu'il existe une association entre la catégorie enfant et la catégorie parent.

Seulement, je n'arrive pas à créer une telle contrainte malgré de nombreux essais...

Code :
1
2
3
4
ALTER TABLE 'categorie' 
  ADD CONSTRAINT `cat_FK` 
    FOREIGN KEY (`parent_categorie_id`) REFERENCES `categorie` (`id_categorie`)
    ON DELETE CASCADE ON UPDATE CASCADE;
Merci beaucoup si vous pouvez me donner une idée...
ps: question de base, cela devrait-être possible une telle relation récursive dans une bd?

A bientôt!

rock'roll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 08h20   #2
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 993
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 993
Points : 2 919
Points : 2 919
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
C'est l'inverse, puisque une foreign key a besoin de pointer vers un element qui existe.
Si tu fait ta contrainte du pere vers le fils, tu poura ajouter un pere que si un fils existe.
Bien evidement ca devrait marcher si ta base est vide, mais si ce n'est pas le cas, alors au moment ou tu ajoute ta contrainte les donnée ne les respectent deja plus, et tu te prend une erreur mySQL.

Tente :
Code :
1
2
3
 
ALTER TABLE 'categorie' ADD CONSTRAINT `cat_FK` FOREIGN KEY (`categorie_id`) REFERENCES `parent` (`parent_id_categorie`)
ON DELETE CASCADE ON UPDATE CASCADE;
PS : pense aux balises CODE
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 09h08   #3
Invité de passage
 
Inscription : mai 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 5
Points : 2
Points : 2
Merci beaucoup Kazou pour ta réponse!
Je vais tester ta solution proposée...
Bonne journée!
rock'roll est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h45.


 
 
 
 
Partenaires

Hébergement Web