Newsgroup: it.comp.software.database
Titolo: AIUTO: Postgres e FOREIGN KEY...

Salve a tutti! Ho da poco iniziato ad usare postgres per interfacciare un 
database via PHP3; risolti i problemi di login e password mi trovo ora a 
scontrarmi con un problema piu' grosso: la "create table(...);" NON supporta
"FOREIGN KEY" (ossia la definizione di chiavi esterne)!!!!!!!! Postgres 
versione 6.5.3 dice testuale: 
 
  NOTICE:  CREATE TABLE/FOREIGN KEY clause ignored; not yet implemented
Questo e' un GROSSO problema!!! Come si fa a garantire l'integrita' referenziale
delle tabelle se NON supporti le chiavi esterne????? Sapete per caso se Postgres
utilizzi un metodo per utilizzare le chiavi esterne (che so.. qualche funzione
misconosciuta o nota...)???? Avrei pensato di andare ad aggiornare MANUALMENTE
tutte le tabelle che includerebbero una chiave esterna, quando l'originale venisse
cambiato: ma cosa accadrebbe se PER CASO il browser crashasse e si determinasse 
uno STATO DI INCOSISTENZA???????????????? Dovrei forse gestirmi il 'redo' ed 'undo'
delle transazioni (vi imploro, non dite di si' [non saprei da dove iniziare!!!])????
Per non parlare della 'sfacchinata' dell'aggiornamento!!!!!
Sarei mooooooolto grato a chiunque mi indichi una soluzione accettabile (magari passare 
a MySQL? Poi pero' MySQL supporta le FOREIGN KEY? Se si' supporta IL RESTO dell'SQL
standard [se no siamo daccapo con un problema similare..]THANX)!!!
Di seguito metto i due file con le istruzioni SQL che ho provato in Postgres con le 
FOREIGN KEY:
CREATE TABLE membri (matricola  varchar(30) NOT NULL,
		     nome       varchar(30) NOT NULL,
		     cognome    varchar(30) NOT NULL,
	             PRIMARY KEY (matricola)
	 	     );
CREATE TABLE fondi (tipo                varchar(30) NOT NULL,
		    anno                int         NOT NULL, 
		    matricola		varchar(30) NOT NULL,
		    ammontare_iniziale  int         NOT NULL, 
		    ammontare_corr      int         NOT NULL,
		    data_scadenza       date        NOT NULL,
		    PRIMARY KEY(tipo, anno, titolare),
		    FOREIGN KEY(matricola) 
		      REFERENCES membri
		      ON DELETE RESTRICT
		      ON UPDATE CASCADE
	           );
Giacche' ci siamo : sapete per caso come posso fare se voglio fare si' che in fondi 
la 'matricola' di un membro venga chiamata 'titolare'? Si puo' fare o devo tenermi 
la colonna della chiave esterna con lo stesso nome della tabella riferita???
VI PREGO AIUTATEMI! SOLO VOI POTETE SAPERE COSA FARE!!
N.B. Se potete rispondetemi ANCHE in mail. Molte Grazie!
MANY MANY MANY THANX
MAURIZIO.

a MySQL? Poi pero' MySQL supporta le FOREIGN KEY? 
No, e non hanno neanche intenzione di implementarla nel futuro.
Ritengono che sia inutile, dannosa e che rallenti le prestazioni
(obiettivo primario di mysql).
Secondo loro l'integrità referenziale la devi garantire tu facendo
attenzione alle query SQL.  
Per ulteriori info vai qui:
http://www.mysql.com/php/manual.php3?section=Broken_Foreign_KEY
.
Per quanto riguarda il nome del campo nella tabella, basta che lo
rinomini :-) anche se da quello che ho sentito in giro sembra sia
buona pratica mantenere lo stesso nome quando c'è una relazione.
Ciao.
 
Fabio Serra
***********
Per rispondere in e-mail cancella "the." e sostituisci 
"whitehouse" con "faser".
***********

 wrote in message
8bfj97$hge$1...@pluto.sm.dsi.unimi.it...


 Io ho provato la versione beta e funzione egregiamente.
 Spero di provarla al piu' presto (purtroppo la sua installazione qua all'universita'
 non dipende da me!). Sai per caso se e' stabile, la versione beta 3 o da' problemi?
 Se fosse sicura potrei sostenere con piu' forza la sua installazione.
 Molte grazie delle indicazioni.
 MAURIZIO

 wrote in message
8bqf7e$o81$1...@pluto.sm.dsi.unimi.it...
