Italiano English |
Array> Software developing Navigators Sections In evidence Most required Last Modify
Firebird: Tree data mangement Last update: 05/01/2011 -
Viewed: 4660 dal 05 Jan 2011
Translation for this document is not available or is not complete, if you are intrested to receive information please write to This document shown two different way for server side managment of Data Tree with Firebird. First method uses Recursive Common Table Expression. Second method uses Recursive Stored Procedure Una classica struttura ad albero N- o Bayer dove ogni nodo ha 0..N figli, è molto comoda per organizzare e rappresentare i dati in modo gerarchico, tuttavia presenta alcune difficoltà quando deve essere memorizzata (e soprattutto reperite) in un database. La via classica di attraversamento di un albero richiede la ricorsione che può essere eseguita sul client con grande facilità di programmazione ma con enormi ritardi e difficoltà se il collegamento client/server non è veloce e stabile. E' molto utile eseguire l'attraversamento ma soprattuto la ricorsione, sul server e ricevere sul client i dati gia organizzati. Con Firebird come altri DBMS mettono a disposizione alcuni strumenti che possono essere utilizzati allo scopo, in queste pagine vengono presentati degli esempi pratici su come utilizzare le Common Table Expression ricorsive e le Stored Procedure per la gestione delle strutture ad albero. Un Esempio praticoAbbiamo una struttura ad albero con relazione padre/figlio come segue
CREATE TABLE FAMILY ( ID INTEGER NOT NULL , IDFATHER INTEGER DEFAULT NULL, NOME VARCHAR(100), AGE SMALLINT ); /* Primary Keys*/ ALTER TABLE FAMILY ADD CONSTRAINT PK_FAMILY PRIMARY KEY (ID); /* Foreign Keys*/ ALTER TABLE FAMILY ADD CONSTRAINT FK_FAMILY_1 FOREIGN KEY (IDFATHER) REFERENCES FAMILY (ID) ON UPDATE CASCADE; Il campo ID è la chiave primaria mentre il campo IDFATHER stabilisce la relazione padre/figlio sulla stessa tabella FAMILY.
Per completezza è bene definire un generatore ed un trigger per gestire una eventuale funzione di AutoInc sul campo ID. Allo scopo si consiglia di utilizzare la tecnica presentata in Firebird: A safe trigger for autoinc fields
Inseriamo i dati di esempio: INSERT INTO FAMILY (ID, IDFATHER,NOME,AGE) VALUES (1,NULL,'GrandFather1',80); INSERT INTO FAMILY (ID, IDFATHER,NOME,AGE) VALUES (2,1,'Son1',60); INSERT INTO FAMILY (ID, IDFATHER,NOME,AGE) VALUES (3,1,'Son2',58); INSERT INTO FAMILY (ID, IDFATHER,NOME,AGE) VALUES (4,2,'GrandSon1',14); INSERT INTO FAMILY (ID, IDFATHER,NOME,AGE) VALUES (5,2,'GrandSon2',19); A questo punto il problema è come interrogare e reperire le informazioni in modo gerarchico ovvero rispettando la struttura padre/figlio definita? About this...
Vote this page
|
|
Nota: questo materiale è di proprietà di Pk Lab ed è utilizzabile liberamente a condizione di citarne la fonte
[Privacy] [Termini e condizioni] [Home Page] [Search]Copyright PkLab (c) 2009 Contatto: - P.Iva: 01219980776 |
Comments
0 comments (Send your comment)