Tabella Autoreferenziata

mercoledì 10 gennaio 2007 - 12.14

melmar20 Profilo | Junior Member

ciao a tutti,
ho un grosso bisogno di aiuto...vi espongo il problema:

nel mio progetto devo modellare un'entità Azienda. Questa potrà avere diverse Aziende figlie,che a loro volta ne potranno avere delle altra e cosi via....in questo modo si andrà a creare una struttura ad Albero....

Come potrei realizzare una cosa di questo genere?

Fatemi sapere....

Vi ringrazio

alx_81 Profilo | Guru

>ciao a tutti,
>ho un grosso bisogno di aiuto...vi espongo il problema:
>
>nel mio progetto devo modellare un'entità Azienda. Questa potrà
>avere diverse Aziende figlie,che a loro volta ne potranno avere
>delle altra e cosi via....in questo modo si andrà a creare una
>struttura ad Albero....
>
>Come potrei realizzare una cosa di questo genere?
Ma intendi lato DB? perchè se è così tin invito a postare il messaggio nella stanza appropriata la prossima volta .. In caso contrario, spiegaci meglio quello che ti serve e dove..
Per ora, facci sapere se vuoi ottenere una gerarchia sul database o se intendi altro.. ok?
ciao!

>
>Fatemi sapere....
>
>Vi ringrazio

Alx81 =)

http://blogs.dotnethell.it/suxstellino

melmar20 Profilo | Junior Member

Vorrei creare la tabella nel database,per poi lavorarci sopra usando asp....che faccio?

alx_81 Profilo | Guru

>Vorrei creare la tabella nel database,per poi lavorarci sopra
>usando asp....che faccio?


Parlando di db, è possibile realizzare gerarchie in vario modo..
Nel tuo caso farei una tabella contenente sia l'id dell'azienda sia l'id dell'azienda "padre"..

-- creazione tabella -- *********************************************************************************** IF EXISTS (SELECT * FROM sys.tables WHERE object_id = object_id('Aziende')) DROP TABLE Aziende CREATE TABLE Aziende ( IDAzienda int IDENTITY(1,1) PRIMARY KEY CLUSTERED, RagioneSociale varchar(100) NOT NULL, Indirizzo varchar(100) NOT NULL, Tel varchar(18) NOT NULL, Fax varchar(18) NOT NULL, IDSuperAzienda int NULL ) CREATE NONCLUSTERED INDEX IX_IDSuperAzienda ON Aziende ( IDSuperAzienda ) -- inserimento dati -- *********************************************************************************** INSERT INTO Aziende (RagioneSociale,Indirizzo,Tel,Fax,IDSuperAzienda) VALUES ('Azienda 1','Via Mazzini 10',111111,111111,NULL) -- inserisce id 1 INSERT INTO Aziende (RagioneSociale,Indirizzo,Tel,Fax,IDSuperAzienda) VALUES ('Azienda 2','Via Melloni 10',222222,222222,NULL) -- inserisce id 2 INSERT INTO Aziende (RagioneSociale,Indirizzo,Tel,Fax,IDSuperAzienda) VALUES ('Azienda 3','Via Garibaldi 10',333333,333333,NULL)-- inserisce id 3 INSERT INTO Aziende (RagioneSociale,Indirizzo,Tel,Fax,IDSuperAzienda) VALUES ('Azienda 1.1','Via Matteotti 10',111111,111111,1) -- inserisce id 4 INSERT INTO Aziende (RagioneSociale,Indirizzo,Tel,Fax,IDSuperAzienda) VALUES ('Azienda 1.2','Via Verdi 10',222222,222222,1) -- inserisce id 5 INSERT INTO Aziende (RagioneSociale,Indirizzo,Tel,Fax,IDSuperAzienda) VALUES ('Azienda 2.1','Via Repubblica 10',111111,111111,2) -- inserisce id 6 INSERT INTO Aziende (RagioneSociale,Indirizzo,Tel,Fax,IDSuperAzienda) VALUES ('Azienda 3.1','Via Dalla Chiesa 10',111111,111111,3) -- inserisce id 7 INSERT INTO Aziende (RagioneSociale,Indirizzo,Tel,Fax,IDSuperAzienda) VALUES ('Azienda 3.1.1','Via Cavour 10',222222,222222,7) INSERT INTO Aziende (RagioneSociale,Indirizzo,Tel,Fax,IDSuperAzienda) VALUES ('Azienda 3.1.2','Via Dante 10',333333,333333,7) -- ricorsione per ottenere la gerarchia -- *********************************************************************************** ;WITH Gerarchia AS ( SELECT IDAzienda, RagioneSociale, IDSuperAzienda FROM Aziende WHERE IDSuperAzienda IS NULL UNION ALL SELECT A.IDAzienda, A.RagioneSociale, A.IDSuperAzienda FROM Aziende A JOIN Gerarchia B ON A.IDSuperAzienda = B.IDAzienda ) SELECT * FROM Gerarchia -- ***********************************************************************************

tramite le CTE (common table expression, la with, per intenderci) possiamo ottenere la ricorsione, in modo da ottenere la corretta gerarchia ad albero.. ho creato l'indice sul campo IDSuperAzienda per rendere più performante la JOIN interna al processo di ricorsione.

Tutto questo è valido per SQL Server 2005.
Se hai 2000 ne riparliamo..
ciao!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

melmar20 Profilo | Junior Member

Grazie tante....adesso lo testo e poi ti dico

Ciaooo

melmar20 Profilo | Junior Member

ottima la soluzione...ora però non sò come posso fare a ricavare l'Id delle categoria da associare ad una sottocategoria....

ovvero non riesco a ricavare l'Id della categoria padre....

Come posso fare?

spero di esser stato il + chiaro possibile

alx_81 Profilo | Guru

>ottima la soluzione...ora però non sò come posso fare a ricavare
>l'Id delle categoria da associare ad una sottocategoria....
>
>ovvero non riesco a ricavare l'Id della categoria padre....
>
>Come posso fare?
Non so se ho veramente capito il problema..

cmq, proviamo..
se tu vuoi ottenere i "primi" padri della gerarchia, basta che ricavi le righe dove l'idSuperAzienda è NULL

SELECT IDAzienda FROM Aziende WHERE IDSuperAzienda IS NULL

se invece vuoi ottenere l'id dell'azienda padre di una qualunque azienda basta fare:

SELECT IDSuperAzienda FROM Aziende WHERE IDAzienda = IDAziendaDaRicercare

se non ho capito il problema, ti chiedo di farmi un esempio pratico.. poi provo ad aiutarti meglio.. ok?
ciao!

>
>spero di esser stato il + chiaro possibile

Alx81 =)

http://blogs.dotnethell.it/suxstellino

melmar20 Profilo | Junior Member

è giustissimo ciò che dici,il punto è che devo scrivere del codice in vb.net e quindi non riesco a capire tutta la serie di passaggi per arrivare a ricavare quel dato....

alx_81 Profilo | Guru

>è giustissimo ciò che dici,il punto è che devo scrivere del codice
>in vb.net e quindi non riesco a capire tutta la serie di passaggi
>per arrivare a ricavare quel dato....

Se guardi l'altro post in cui ti ho risposto
http://www.dotnethell.it/forum/messages.aspx?ThreadID=12993

dovresti vedere come si creano le stored procedure, e come si lanciano da vb.net.. se hai ancora problemi dopo i tentativi, vediamo di approfondire il discorso. Ma vedrai che è semplice.
ciao!


Alx81 =)

http://blogs.dotnethell.it/suxstellino
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5