|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
[SQL] VINCOLI REFERENZIALI
Salve a tutti.
E' possibile associare un attributo di una tabella ad un attributo di piu tabelle??? Mi spiego meglio... Mi trovo a dover progettare una base di dati per la gestione di un tribunale civile. Ora ho creato cinque tabelle (civile,giudice,avvocato,perito e giuridica) ciascuna delle quali conterrà l'attributo chiave "codice" che sarà incrementato da un unico contatore...Successivamente ho creato la tabella "causa".Tra i vari attributi di "causa" vi è l'attributo "accusato"... In teoria vorrei che questo attributo riferisca all'attributo "codice" o della tabella "civile" o della tabella "giudice" o della tabella "avvocato"... Dato che non si sa a priori a che tabella esso possa riferire c'è un modo per collegarlo cmq a tutte e cinque le tabelle sapendo che tra le cinque tale "codice" si troverà in una tabella sola??? Grazie a tutti per eventuali risposte |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
direi di no.. cmq anche se fosse, il disegno della base dati non sarebbe correttissimo... in teoria dovresti creare la tabella causa, le varie tabelle giudice, giuria, avvocato, etc etc e poi fare delle tabelle di relazione, in cui associ un accusato a una causa e cosi via. |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
se fai una tabella persona da cui le tabelle Giudice, Avvocato etc etc sono IS-A e poi metti una relazione tra causa e Persona?
Oppure fai una foreign key "artificiale", cioè il vincolo invece che implementato da SQL propio lo implementi con un Trigger che, per ogni tupla che inserisci, controlla se il valore "esterno" sia nell'unione delle altre tabelle Ultima modifica di morskott : 22-05-2006 alle 20:54. |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
A quanto pare,il disegno della base sembra corretto...
Vi metto a disposizione lo schema logico (cliccare qui). Questo problema nasce,secondo me,proprio perche è stata creata l'entità "persona" la quale viene generalizzata nelle varie sottoentità,quindi l'attributo "codice" nella ristrutturazione viene ereditato nelle varie sottoentità. L'entità "causa" è collegata con delle relazioni con l'entità "persona",ma trattandosi di relazioni con cardinalità (1,1) esse vengono accorpate nella rispettiva entità e quindi ereditano l'attributo chiave... Il problema è proprio questo!Nella ristrutturazione le relazioni "accusato" e "proponente" vanno a finire nell'entità "causa".Tali attributi dovranno per l'appunto riferire ad una persona (avvocato,giudice,civile... qualsiasi esso sia). Sulla base dello schema fornito avete qualche suggerimento??? Grazie a tutti per aver risposto cosi tempestivamente! |
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
Quote:
Il problema è che "accusato" e "proponente" cosi come "vincitore" e "perdente" sono attributi di "causa",quindi il problema sorge nel momento in cui creo la tabella "causa"!!Pure se creassi una trigger come giustamente tu mi dici,nel momento in cui creo la tabella "causa" come li dichiaro gli attributi sopra citati??? Dovranno far riferimento (chiave esterna) ad un particolare attributo??? Grazie ancora |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
proponente con fk_persona(foreign key a persona) e pk_proponente accusato con fk_persona(foreign key a persona) e pk_accusato ... ... causa con pk_causa, e fk_proponente, fk_accusato etc etc se ci possono essere piu proponenti/accusati per causa allora devi fare una tabella di relazione: causa con pk_causa accusatiInCausa fk_causa, fk_accusati proponentiInCausa fk_causa, fk_proponenti etc etc Il trucco (apparte studiarsi la normalizzazione)è separare le entità. Una persona è una persona. Un accusato è un persona. E' un accusato che partecipa alla causa, non una persona(potrebbe essere un azienda, al che dovresti introdurre l'entità giuridica, ma questa è un altra questione ![]() Se piu accusati partecipano a una causa, devi creare una tabella di relazione molti a molti fra le 2 entità Ultima modifica di thebol : 23-05-2006 alle 08:16. |
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
Grazie a tutti ma il problema è risolto mediante l'ausilio dei trigger!!
Il problema era proprio che una "persona" veniva generalizzata in piu sottopersone (persona_giuridica,civile,avvocato,giudice,perito) e ciascuno di essi puo essere accusato o proponente!Semplicemente ho dovuto creare un trigger che controllasse,prima dell'inserimento,se il codice inserito in accusato/proponente fosse effettivamente presente all'interno di una delle cinque tabelle... Cmq grazie a tutti per le risposte e per la tempestività nel rispondere ![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Dec 2003
Città: Bergamo
Messaggi: 3889
|
come è andato poi il progetto?
![]() ![]()
__________________
Ho trattato con un sacco di gente!! ![]() DFI Lanparty nforce4 ultra-d / a64 4600+ x2 / 2*1gb samsung TCCC / ati x1950xtx |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Dec 2003
Città: Bergamo
Messaggi: 3889
|
Quote:
guarda, io ho appena fatto l'esame e siccome il voto mi abbasserebbe la media e di fare l'orale non ho voglia nè tempo causa marea di altri esami avrei pensato appunto all'idea del progettino... tu sei capace? perchè quello che ha me manca è appunto solo il tempo ![]() ![]() ![]()
__________________
Ho trattato con un sacco di gente!! ![]() DFI Lanparty nforce4 ultra-d / a64 4600+ x2 / 2*1gb samsung TCCC / ati x1950xtx Ultima modifica di gallo85 : 14-06-2006 alle 12:22. |
|
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
Si anche io ho fatto modello concettuale e modello logico...
Se vuoi appena finito ti passo la mia relazione e sulla base di quella svolgi il tuo. Appena finito e consegnato posso anche dirti quanto mi è stato valutato!! Ciao |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Dec 2003
Città: Bergamo
Messaggi: 3889
|
Quote:
perfetto, per quando lo devi consegnare? hai un contatto msn? ![]() ma che uni fai? anno? ![]()
__________________
Ho trattato con un sacco di gente!! ![]() DFI Lanparty nforce4 ultra-d / a64 4600+ x2 / 2*1gb samsung TCCC / ati x1950xtx |
|
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
Si utilizzo msn,trovi l'icona sotto il mio nome!Frequento informatica nell'università dell'aquila e sono al terzo anno.
Il progetto dovrei consegnarlo il 29 giugno.Qualche altro giorno per la valutazione e poi posso dartelo. |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Dec 2003
Città: Bergamo
Messaggi: 3889
|
Quote:
![]() ![]() ![]() ![]() ![]() forse perchè lo farete più approfondito, infatti io non so neanche cosa sia un trigger ![]()
__________________
Ho trattato con un sacco di gente!! ![]() DFI Lanparty nforce4 ultra-d / a64 4600+ x2 / 2*1gb samsung TCCC / ati x1950xtx Ultima modifica di gallo85 : 14-06-2006 alle 19:13. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:08.