View Full Version : [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
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
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.
morskott
22-05-2006, 20:52
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
A quanto pare,il disegno della base sembra corretto...
Vi metto a disposizione lo schema logico (cliccare qui (http://cesidio.altervista.org/tribunale_civile.jpeg)).
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!
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
Scusa prima cosa che cosa intendi per IS-A???
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
A quanto pare,il disegno della base sembra corretto...
Vi metto a disposizione lo schema logico (cliccare qui (http://cesidio.altervista.org/tribunale_civile.jpeg)).
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!
tabella persona con pk_persona(primary key di persona)
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à
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 :yeah:
come è andato poi il progetto? :D ne dovrei fare uno anch'io :(
Bah diciamo bene...
Sono quasi agli sgoccioli!! ;)
Vuoi che te lo faccia io il tuo progetto?!!!!
Bah diciamo bene...
Sono quasi agli sgoccioli!! ;)
Vuoi che te lo faccia io il tuo progetto?!!!!
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 ;) il mio corso si chiama "sistemi informativi" e in pratica il progetto deve essere con access però con anche il modello concettuale e logico dietro (non so se siano obbligatori ma meglio farli per parare eventuali domande ;) ) tu hai fatto le stesse mie cose per il tuo progetto del tribunale? :D
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
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
perfetto, per quando lo devi consegnare? hai un contatto msn? :D
ma che uni fai? anno? :)
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.
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.
azz, è troppo tardi! a me servirebbe diciamo in una settimana :mc: :mc: ma è così complicato il tuo progetto? perchè allo schema concettuale non mi sembrava... :stordita: ma perchè voi di informatica le fate al terzo anno queste cose e noi gestionali al secondo :doh: :doh:
forse perchè lo farete più approfondito, infatti io non so neanche cosa sia un trigger :fagiano:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.