Discussione:
[mysql] innoDB e relazioni: pazzo per gl indici
(troppo vecchio per rispondere)
spintop
2004-04-12 23:09:34 UTC
Permalink
salve a tutti,
sto imparando mysql da poco, qualche settimana fa' ero riuscito a
relazionare 1:n campi di due tabelle innoDB.

se ho ben capito devo creare degli indici prima di tutto.
l'ho fatto ma adesso sto riprovando, su un altro db, ma non capisco dove
sbaglio.

esempio: tabella categorie (parent), tabella prodotti (child)

categorie:
id : smallint(10),auto_increment,not null,pk
nome : varchar(255),not null

prodotti:
id : smallint(10),auto_increment,not null,pk
categoria: smallint(10),not null, unsigned
prodotto: varchar(250)

la relazione dovrebbe essere :

categorie.id -> prodotti.categoria
1 ------ : ------^ n (CASCADE)

sto provando con phpmyadmin e DBmanager (win) ma senza risultati.
continuo a ricevere da phpmyadmin il solito errore, cioe' che manca
l'indice.

pensavo di aver capito ma mi sbagliavo:

devo creare uno o piu' indici?
dove?
quali?

:-/

sp-
Govardo Woody
2004-04-13 08:11:16 UTC
Permalink
Post by spintop
esempio: tabella categorie (parent), tabella prodotti (child)
id : smallint(10),auto_increment,not null,pk
nome : varchar(255),not null
id : smallint(10),auto_increment,not null,pk
categoria: smallint(10),not null, unsigned
prodotto: varchar(250)
categorie.id -> prodotti.categoria
1 ------ : ------^ n (CASCADE)
sto provando con phpmyadmin e DBmanager (win) ma senza risultati.
continuo a ricevere da phpmyadmin il solito errore, cioe' che manca
l'indice.
Sei sicuro di aver indicizzato prodotti.categoria?

Ciao, Angelo.
--
Powered by Debian Woody
[Linux Registered User # 341564]
spintop
2004-04-13 10:00:20 UTC
Permalink
Post by Govardo Woody
Sei sicuro di aver indicizzato prodotti.categoria?
da phpmyadmin premo il tastino "indice" sul campo categoria della
tabella prodotti.
si fa cosi' ?

ciao
sp-
spintop
2004-04-13 10:07:27 UTC
Permalink
quando provo a creare una relazione, DBmanager risponde cosi':

Error creating the Foreign Key.
Check these information before creating a foreign key:

- both tables should have an Index for the columns specified
- the size and the signedness of integer types has to be the same
- defined ON DELETE/UPDATE SET NULL but the column is defined as NOT NULL

continuo a non capire.
:-/

sp-
spintop
2004-04-13 10:57:35 UTC
Permalink
adesso va.
solite operazioni, solita procedura: adesso funziona.
mmah....

soltanto ho dovuto farlo su due tabelle create ex-novo :(

a questo punto mi viene da pensare che se si debba fare una modifica a
due tabelle, trasformandole in InnoDB, per creare le relazioni, sia
proprio un dramma.

mmmmmmmmmaaaaahhhhhh.....
:-/

sp-
Govardo Woody
2004-04-13 12:25:23 UTC
Permalink
Post by spintop
adesso va.
solite operazioni, solita procedura: adesso funziona.
mmah....
soltanto ho dovuto farlo su due tabelle create ex-novo :(
a questo punto mi viene da pensare che se si debba fare una modifica a
due tabelle, trasformandole in InnoDB, per creare le relazioni, sia
proprio un dramma.
NO, non è un dramma, ma trattandosi di un vincolo "serio" devi star attento
a tutti i particolari, es. indici, dati gia presenti nelle tabelle, valori
nulli.

Ciao, Angelo.
--
Powered by Debian Woody
[Linux Registered User # 341564]
spintop
2004-04-13 12:51:19 UTC
Permalink
Post by Govardo Woody
NO, non è un dramma, ma trattandosi di un vincolo "serio" devi star attento
a tutti i particolari, es. indici, dati gia presenti nelle tabelle, valori
nulli.
immagino.
dunque, le tabelle (le prime due) erano vuote (le avevo svuotate
apposta), l'indice su "prodotti.categoria" era stato creato, inutile
dire che erano gia' tabelle innoDB, e i tipi di campi correlati erano
identici.

non so come mai oggi va e ieri no :-/
sp-
Gabriele
2004-04-16 20:05:09 UTC
Permalink
Post by spintop
Post by Govardo Woody
NO, non è un dramma, ma trattandosi di un vincolo "serio" devi star attento
a tutti i particolari, es. indici, dati gia presenti nelle tabelle, valori
nulli.
immagino.
dunque, le tabelle (le prime due) erano vuote (le avevo svuotate
apposta), l'indice su "prodotti.categoria" era stato creato, inutile
dire che erano gia' tabelle innoDB, e i tipi di campi correlati erano
identici.
Se mi posso permettere ti suggerisco di cambiare strumenti.
Usa DBDesigner4 (freeware) per progettare il database, poi esporti
direttamente gli script sql e li carichi dal root mysql usando il comando
source.
Molto più rapido e molto più indolore, ti puoi concentrare di più sulla
progettazione e meno sul deployment.

Loading...