Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
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 27/06/2006, 10h04   #1
Futur Membre du Club
 
Homme
Développeur informatique
Inscription : mai 2006
Messages : 30
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 30
Points : 18
Points : 18
Par défaut Arbre: comment créer la racine

Bonjour

J'ai besoin de gérer une structure arborescente dans une table.
Chaque élément de la table a une clé primaire qui l'identifie et une clé étrangère qui pointe vers son parent.

Mon problème est : comment créer la racine qui n'a pas de parent et donc viole la contrainte sur la clé étrangère ?

La seule mauvaise solution que j'ai trouvée, c'est de ne pas mettre de contrainte. Mais ce n'est pas satisfaisant.

Problème annexe: comment autoriser les suppressions de feuilles et de branches tout en empéchant la suppression de la racine ?

Cordialement
uluru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 11h39   #2
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
Salut,

J'ai une structure semblble au tiens :
Une Table TARTICLE qui contient ART_REF et ART_SUBSTITUT.
J'ai mis une Foreign key sur ART_SUBSTITUT qui pointe vers ART_REF.
Mais ART_SUBSTITUT peux être null et ça passe sans problème.

A+
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 12h22   #3
Futur Membre du Club
 
Homme
Développeur informatique
Inscription : mai 2006
Messages : 30
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 30
Points : 18
Points : 18
Oui bien sur, mais ce n'est pas mon problème.

Dans mon cas tous les éléments sont dans la même table, un arbre classique quoi, avec des feuilles, des noeuds, et ... une racine. La longueur des branches, la profondeur, est indéfinie.
Exemple: le registre de windows.
uluru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 11h40   #4
Membre du Club
 
Inscription : septembre 2002
Messages : 144
Détails du profil
Informations personnelles :
Âge : 42
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : septembre 2002
Messages : 144
Points : 54
Points : 54
Bonjour,

je pense qu'il faut que tu gère l'intégrité avec des triggers, à chaque insertion tu regarde si le parent appartient à ta table. Dans ce cas, tu peux mettre 0 (si l'id est numérique) au parent de ta racine.
Il faut aussi que ton trigger vérifie qu'il n'y a aucun autre enregistrement avec 0 en parent, sinon tu peux mettre plusieurs racines

Bonne chance
gudul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 13h40   #5
Futur Membre du Club
 
Homme
Développeur informatique
Inscription : mai 2006
Messages : 30
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 30
Points : 18
Points : 18
J'avais mis le problème un peu de côté.
Je vais reprendre en suivant ton conseil

Merci
uluru 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 23h47.


 
 
 
 
Partenaires

Hébergement Web