--- "peolo" ha scritto: 

> facciamo il caso che mi ha fatto porre la domanda:
> ho una tabella A in cui volevo avere un indice che puntava a varie
> righe 
> in tabella B - cioè la foreign key era impostata su un indice di A
> verso una chiave primaria di B

un indice non può puntare a delle righe ... soprattutto se sono anche
di un'altra tabella.
Un indice serve solo, in teoria, a velocizzare l'accesso ad una
tabella, però, se fatto male, può addirittura rallentarlo.

Una foreign key serve solo a mantenere la consistenza dei tuoi dati.

> visto che questo non si può (mysql non ha avuto pietà ad
> impedirmelo!) 

aspetta ... su Postgres ho eseguito quanto da te affermato:

1) creo la tabella 'test1'
# create table test1( a integer not null );
CREATE TABLE

2) metto la colonna 'a' come chiave primaria
# alter table test1 add constraint pk_a primary key( a );
NOTICE:  ALTER TABLE / ADD PRIMARY KEY will create implicit index
"pk_a" for tab le "test1"
ALTER TABLE

3) creo la tabella 'test2'
# create table test2( b integer not null, a integer );
CREATE TABLE

4) creo la chiave primaria anche per 'test2' (questo è ininfluente per
l'esempio)
# alter table test2 add constraint pk_b primary key( b );
NOTICE:  ALTER TABLE / ADD PRIMARY KEY will create implicit index
"pk_b" for tab le "test2"
ALTER TABLE

5) creo un indice sulla colonna 'a' di 'test2'
# create index ndx_test2_a on test2( a );
CREATE INDEX

6) creo la foreign key
# alter table test2 add constraint fk_test1_test2_a foreign key( a )
refe rences test1( a );
ALTER TABLE

come vedi funziona

prova a farlo anche tu su MySql (non so se la sintassi è esattamente
uguale)

poi per cancellare le tabelle:

# drop table test2;
# drop table test1;

Notare l'ordine in cui è stato dato il drop

> allora imposto una foreign key sulla tabella B (che ricordo contiene 
> diverse righe che puntano tutte alla medesima riga di A) che punta ad
> una chiave primaria di A.

probabilmente anche qui intendi colonne al posti di righe.
Poi non riesco a capire cosa stai facendo ... prima stavi cercando di
creare una foreign key su alcune colonne di A verso una chiave primaria
di B ... ora invece fai una cosa opposta? Ma così ottieni una cosa
totalmente differente da quello che volevi all'inizio ... a meno che tu
prima non abbia rinominato la tabella A come B e la tabella B come A
:-)
 
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