Newsgroup: it.comp.appl.access
Titolo: Corrette relazioni tra tabelle

Salve a tutti.
Ho una tabella "Anagrafica" contenente:
filippo
mario
luigi
marco
giulio
e una "Vetture":
punto
saxo
panda
 
ognuno in anagrafica può essere:
solo proprietario oppure,
solo autista oppure,
solo passeggero.
 
Può essere inoltre:
proprietario e/o autista,
autista e/o passeggero.
 
Come posso relazionare correttamente le tabelle?
mi servono tabelle aggiuntive di collegamento?
 
mi aiutatate?
Grazie anticipate.

 mi aiutatate?
 
Si, in teoria dovresti (con l' ipotesi sopra) : 
 
1)
dare un codice univoco alle persone e 
aggiungerlo come campo alla tabella delle persone
2)
dare un codice univoco alle vetture e
aggiungerlo come campo alla tabella delle vetture
3)
dare un codice univoco alla relazione persona - vettura
per quest' ultimo obiettivo io farei cosi' : 
codice = abc dove
a vale 1 se persona e' autista, 0 se non e' autista
b vale 1 se persona e' passeggero, 0 se non lo e'
c vale 1 se persona e' proprietario, 0 se non lo e'.
 
dunque se ad es. 
codice = 001 il tizio e' proprietario 
codice = 101 il tizio e' autista, non passeggero, proprietario
ecc
 
4)
costruisci una terza tabella indipendente nel seguente
modo, ossia con i seguenti tre campi :   
codice relazione ; codice persona ; codice vettura
 
Stop
 
 
 
 
 


tabella anagrafica composta da
idnome/nominativo/etc
 
tabella auto composta da
 
idauto/auto/etc
 
tabella ruoli
 
idruoto/ruolo   (1 /autista, 2/passeggero, 3/proprietario)
 
 
tabella ruolipersone legata a uno a molti con la tabella anagrafica
idpersona/idruolo
 
esempio se idnome 1 è sia  autista che proprietario questa tabella avrà 
due righe
 
1;1
1;3
 
 
per il discorso auto non hai specificato se un'auto è guidata sempre 
dalla stessa persona, quindi impossibile risponderti
 
 
ciao
BFS
 
 
 
 
 
 
 
 


 
non è in terza forma normale questa soluzione
 
 
ciao
BFS
 


beh,  in  realta'  non  necessariamente :  dipende  dalla 
interpretazione.
 
Se interpreti la relazione persona-vettura come uno "stato", 
ossia una "qualita' sintetica" allora e' in forma normale. 
 
Se invece vuoi scindere questo stato  nelle sue  possibili
componenti allora non e' in forma normale. 
 
 
 


la terza forma normale in un database non è un "interpretazione"
 
ciao
BFS
 


Ma si che lo  e', suvvia.
 
Perfino la  prima forma normale e' una interpretazione ed e' molto 
facile  dimostrarlo  :  i  dati  soddisfano  la  1NF  quando  sono 
"atomici", ossia non ulteriormente divisibili in componenti. 
 
Ed e' ovvio che il livello di suddivisione a cui spingersi e' mera
questione di buon senso, non c'e' una regola precisa. 
 
Quindi, un  dato si *considera* (o meno) atomico in funzione della
interpretazione che si da di questo concetto. 
 
E mi permetto di aggiungere che  FORTUNATAMENTE e' cosi' : in caso
contrario non vi sarebbe piu' spazio per quel "quid pluris" che fa
il mestiere, l' esperienza e perche' no lo "stile" del programmatore.
 
 
 
 


supponiamo che l'autore del post voglia aggiungere tra due mesi una 
nuova tipologia associabile al nome...
esempio "copilota"
 
in bocca al lupo con la tua "interpretazione" della 3fn
 
devi mettere mano a tabella per aggiustare tutti it tuoi codi 101 011 
etc presenti
eventuali query ad hoc che avevi fatto per estrapolare dalla tua strana 
codifica il ruolo etc etc
 
""quid pluris"" non vuol dire fare le cose alla "dick of dog"
 
 
ciao
BFS
 
 
 
 
 
 
 
 
 
 

Il giorno lunedì 2 febbraio 2015 10:47:03 UTC+1, Principiante ha scritto:

Intanto Grazie a tutti per l'attenzione.
Per spiegarmi meglio, esempio:
Filippo è il prorietario della Panda, La guida prevalentemente lui e abitualmente i suoi passeggeri sono Mario Luigi e Marco.
 
Filippo e proprietario anche della Punto, l'autista è prevalentemente Giulio e i passeggeri possono essere sia Filippo che Mario e Luigi.


tabella auto
idauto,targa,
 
tabella persone
idpersona,nome....
 
tabellaRuoli
idruolo,ruolo   (conducente, passeggero, proprietario)
 
tabellaRuoliAutoPersone
idauto,idpersona,idruolo
 
questa struttura ti permette di ottenere tutte le query che vuoi
es. chi sono i proprietari
chi sono i passeggeri
chi possiede più di una macchina
chi guida più macchine
etc etc etc
 
ciao
BFS
 
 
 
 
 
 
 
 
 

 ""quid pluris"" non vuol dire fare le cose alla "dick of dog"
 
Ripeto : dipende da come vedi la questione. Quello che sembra un dick
of dog alle volte (raramente, d' accordo) puo'  essere una buona idea.


 
l'autore chiede come vanno relazionate le tabelle
io ho risposto così
http://it.wikipedia.org/wiki/Normalizzazione_%28informatica%29
 
tu anche stavolta (come per i segnalibri word dell'altra discussione) 
hai risposto con una tua personale interpretazione, che non esclude 
quello che wikipedia riporta subito alla prima riga "volto 
all'eliminazione della ridondanza informativa e del rischio di 
incoerenza dal database".
introduci concetti tipo "se il codice lo costruisco cosi e bla bla", 
l'altra volta con "se le stringhe da sostituire le costruisco in una 
determinata maniera" etc etc
forse il tuo codice lo leggi e te lo capisci solo tu è un conto.
usi codici "parlanti" che parlano solo per te...a nessun altro 
programmatore può venir in mente che 111 per te vuol dire una cosa e 101 
ne vuol dire un'altra.
un programmatore si aspetta una colonna idruolo che vada a corrispondere 
in un'altra tabella ruoli in relazioni 1 a molti.
se fai parte di un team dove lo stesso codice è analizzato da varie 
persone è necessario seguire determinate regole.
Per l'appunto in un database relazionale regola fondamentale è che sia 
in terza forma normale.
la chiudo qui pure stavolta
BFS
 
 
 
 
 
 
 


Francamente : mi dispiace. Ogni volta che faccio un ragionamento ti
faccio incazzare. Scusa. Davvero, scusami. 
 
Voglio dire che usare la soluzione standard (quella tua) e' sempre 
l' idea migliore  e  l' argomentazione  del  "lavorare  in team" e' 
pesante e corretta.
 
Pero' (spero che almeno questo me lo concederai) e' anche divertente
discutere di possibili alternative. Senno' che noia, dai ... 
 
Ciao