Miglior modo per gestire relazioni anagrafiche con database

sabato 13 marzo 2010 - 11.19

pucci Profilo | Newbie

ho una tabella che cotiene dei dati relativi a persone

TABLE persona
IDpersona
cognome
nome
...

vorrei gestire le relazioni anagrafiche tra persone (fratello, padre, madre, ecc...). qual'è secondo voi il milgior modo?

avrei pensato ad una tabella del tipo

TABLE relazione
IDpersona1
IDpersona2
tiporelazione

però ho il dubbio che possa crearmi problemi di "circolarità" nelle ricerche (per esempio quando sono presenti 3 fratelli) e di non "bidirezionalità" di certe relazioni (se si parla di fratelli nessun problema, in quanto è un rapporto paritario, ma per esempio il rapporto padre-figlio a implicazioni diverse: un figlio può avere un solo padre e inoltre se voglio sapere chi "è il padre di", l'ordine in cui registro gli identificativi "persona" nella tabella "relazione" ha importanza)

quindi vi chiedo: qual'è il miglior modo per gestire queste cose? cosa dicono a riguardo i testi sull'argomento SQL?

alx_81 Profilo | Guru

Ciao
>ho una tabella che cotiene dei dati relativi a persone
>vorrei gestire le relazioni anagrafiche tra persone (fratello,
>padre, madre, ecc...). qual'è secondo voi il milgior modo?
>quindi vi chiedo: qual'è il miglior modo per gestire queste cose?
>cosa dicono a riguardo i testi sull'argomento SQL?
Questa è una gestione di gerarchia. Puoi farla in vari modi. Ti consiglio di seguire quanto indicato in questi link:
http://www.sqlteam.com/article/more-trees-hierarchies-in-sql
http://msdn.microsoft.com/en-us/library/ms174846.aspx
http://www.dbazine.com/oracle/or-articles/tropashko4
http://blogs.technet.com/josebda/archive/2009/03/24/sql-server-2008-hierarchies-and-hierarchyid.aspx

seguirei la strada del materialized path.
facci sapere


--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

pucci Profilo | Newbie

ho dato un occhiata ai link, ma purtroppo risolvono solo parte del problema: quella relativa alle relazioni "gerarchiche" (padre-figlio) e non a quelle "paritarie" (fratello-sorella). Nel mio progetto la parte preponderante sarà la seconda (e volendo la prima potrei eliminarla) in quanto si tratta di un database che raccoglie dati relativi ai soci di una organizzazione, e la presenza di fratelli o sorelle già presenti nell'oarganizzazione da dei vantaggi.
quindi usando alcuni dei metodi descritti nei link si presenta il grosso problema della "circolarità"

supponiamo i seguenti fratelli: Luigi, Laura, Luca

e la tabella:

socioID nome fratellosorellaID
1 Luigi 2
2 Laura 3
3 Luca 1

per il problema di circolarità inserimento e cancellazioni diventano "complicati"

un alternativa potrebbe essere usare una tabella esterna con tutti i collegamenti possibili

socioID nome
1 Luigi
2 Laura
3 Luca

socio1ID socio2ID
1 2
1 3
2 1
2 3
3 1
3 2

ma mi sembra inefficiente per le tante duplicazioni

come potrei procedere?

alx_81 Profilo | Guru

>socioID nome fratellosorellaID
> 1 Luigi 2
> 2 Laura 3
> 3 Luca 1

>come potrei procedere?
Ma non puoi evitare la parent child e dare spazio al materialized path? Secondo me trarresti benefici maggiori.

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

pucci Profilo | Newbie

ma anche le materialized path (se ho ben capito come funzionano) sono legate alle gerarchie (in pratica replicano un path di un albero binario), ma nel caso del fratello io non ho una gerarchia ho un albero :(

alx_81 Profilo | Guru

>ma anche le materialized path (se ho ben capito come funzionano)
>sono legate alle gerarchie (in pratica replicano un path di un
>albero binario), ma nel caso del fratello io non ho una gerarchia
>ho un albero :(
ma i fratelli condivideranno la stessa parte iniziale di path.. non ti basta?
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5