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