--- fabrizio venerandi ha scritto: 
> Davide Prina ha scritto:

> Ma le relazioni tra le diverse tabelle le ho fatte io nella mia
> testa, e restano implicite finché non le utilizzo o con una query o 
> con l'uso delle caselle di riepilogo.

come ho detto è possibile utilizzare un database senza le varie
relazioni, ma è meglio "esplicitarle" nel db.

Per esempio una foreign key

create table A
(
id_a integer not null,
des_a varchar(50)
);

alter table A add pk_a primary key( id_a );

create table B
(
id_b integer not null,
id_a integer,
des_b varchar2(50)
);

alter table B add pk_b primary key( id_b );
alter table B add fk_b_a foreign key( id_a ) references A( id_a );

La fk_b_a permette di:
1) avere in B soltanto valori di id_a presenti nella tabella A più il
valore null
2) impedire la cancellazione di un record della tabella A se esiste un
record nella tabella B con valore di id_a uguale al record che si sta
cancellando
3) impedire l'inserimento nella tabella B di un record che ha come id_a
un valore non contenuto nella tabella A e diverso da null

Queste sono le funzionalità principali della relazione fk_b_a. Tali
funzionalità sono automatiche.

Poi tale relazione può essere utilizzata per capire come mettere in
join le due tabelle (es: select * from A, B where A.id_a = B.id_a), ma
non è detto che l'operazione di join debba essere esattamente quella
... dipende molto da cosa devi ottenere (es: se ci sono più colonne
nella foreign key può essere che per dati utilizzi ti basta mettere in
join meno delle colonne che sono in relazione).

> Quello che non capisco è cosa serva il fatto di esplicitarle nella 
> funzione di Oo 2. E' l'uso della funzione 'Relazioni' che non
> capisco.

ho fatto un database di esempio con le tabelle A e B, per capire cosa è
la funzione 'Relazioni'.

Ho visto che per creare la chiave primaria basta, sulla struttura della
tabella, selezionare la riga (o le righe), premere il tasto destro del
mouse sulla barra laterale a sinistra della selezione e mettere la
spunta su chiave primaria del box che si apre.
Quando hai creato le due tabelle con le rispettive chiavi primarie (in
realtà per l'esempio basta la chiave primaria per la tabella A), allora
dal menù Strumenti puoi selezionare la voce Relazioni. Tale voce ti
permette di creare le foreign key (basta prendere la colonna id_a dalla
tabella B e trascinarla sulla tabella A).
Come vedi la relazione è 1 (per la tabella A) a n (per la tabella B).
'n' è detto molti. Questo significa che per ogni valore di id_a
presente nella tabella A ci possono essere più record con lo stesso
id_a nella tabella B. Nella tabella A ci può essere soltanto un record
perché id_a è chiave primaria (non ci possono essere due record con lo
stesso valore id id_a), mentre in id_b non c'è nessun blocco sui
duplicati di id_a.

Se nell'help cerchi: Chiave;esterna
trovi una spiegazione su questo argomento

> > qui c'è qualcosa che non va. Se utilizzi lo stesso campo in due
> > tabelle, allora il campo deve avere lo stesso tipo. Se utilizzi lo
> >   
> 
> non capisco. come posso usare lo stesso campo in due tabelle diverse?
> Intendi dire un campo con lo stesso nome in due tabelle diverse?

intendo se vuoi che in due tabelle sia presente lo stesso campo: stesso
nome e stesso tipo di dati (per esempio per poter creare una foreign
key).

> > stesso campo in due tabelle differenti se possibile è meglio
> > assegnargli lo stesso nome. È invece da evitare che campi con lo
> > stesso
> > nome, ma in tabelle diverse, contengano cose totalmente differenti.
> >   
> Questo perché? Solo per confusione o per problemi software?

per evitare confusioni.
Tieni presente che quando operi su poche tabelle puoi tenere a mente
facilmente tutti i campi e le relazioni ... quando le tabelle iniziano
a diventare qualche centinaia, allora se non hai un modo univoco per
rappresentare determinate cose puoi perdere una marea di tempo per cose
che altrimenti sarebbero immediate. Inoltre è più semplice riprendere
in mano e capire subito un database che hai creato anni prima o che è
stato fatto da qualcun altro.

> esatto, descritto perfettamente il mio esempio (tranne des_azione 
> varchar che nel mio esempio non serve). non sapevo che i campi
> numerici usati per relazionare si chiamassero foreign key, mi scuso.

no, tutti i campi di qualsiasi tipo che mettono in relazione due
tabelle sono chiamati foreign key (o chiavi esterne in italiano).
Una foreign key può essere formata da uno o più campi.

> > non ho mai usato OOoBase, però penso che nel form dovresti poter
> > decidere che campo visualizzare ... magari hai usato il wizard che
> > di default ti visualizza solo l'id?
> 
> No, se io decido di visualizzare come subform la tabella AZIONE, e 
> scelgo di mostrare i campi id_scena e id_personaggio, nella tabella 
> appariranno i valori numerici e non i campi testo dei campi a cui
> sono relazionati. L'unico modo per visualizzare i valori testo è 
> quello di usare una query da far leggere a un controllo casella di 
> riepilogo (o usare una query come subform, che però potrebbe 
> risultare non modificabile se attinge valori da più tabelle). Almeno 
> così era in Oo

come detto non ho mai usato OOoBase e quindi non riesco a capire bene
il problema e la soluzione indicata.
Penso di aver capito che hai utilizzato qualche wizard che però ti ha
dato un risultato diverso da quello che volevi e quindi sei intervenuto
manualmente. Io penso sia preferibile imparare bene la base ed evitare
di utilizzare i wizard e quindi fare sempre tutto manualmente; in
questo modo sai esattamente cosa stai facendo e sei sicuro che la
soluzione finale è quella voluta.

Ciao
Davide

Dizionari: http://linguistico.sourceforge.net/wiki
Conoscere il TC: http://www.no1984.org
Strumenti per l'ufficio: http://it.openoffice.org
Sistema operativo: http://www.it.debian.org
Browser: http://www.mozilla.org/products/firefox
Client di posta: http://www.mozilla.org/products/thunderbird
GNU/Linux User: 302090: http://counter.li.org
--
Non autorizzo la memorizzazione del mio indirizzo di posta a chi usa outlook: 
non voglio essere invaso da spam


        

        
                
___________________________________ 
Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB 
http://mail.yahoo.it

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Rispondere a