--- 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]
