|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
[MySql] Come modificare una tabella per aggiungergli un references ad un'altra?
Ciao,
ho due tabelle fatte nel seguente modo: Codice:
mysql> describe citta; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | ID | int(11) | NO | PRI | NULL | auto_increment | | Citta | varchar(35) | YES | | NULL | | | Cap | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ 3 rows in set (0.02 sec) mysql> describe utente; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | User_Id | varchar(20) | NO | PRI | NULL | | | Nome | varchar(20) | NO | | NULL | | | Cognome | varchar(20) | NO | | NULL | | | Data_Nascita | date | NO | | NULL | | | Indirizzo | varchar(50) | NO | | NULL | | | Cap | int(11) | NO | | NULL | | +--------------+-------------+------+-----+---------+-------+ 6 rows in set (0.01 sec) ALTER TABLE utente ADD CONSTRAINT CapDeveEsistere FOREIGN KEY (Cap) REFERENCES citta (Cap); come mai? Cosa sbaglio? Tnx Andrea |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
Altra domanda:
Domanda 2, se ho una tabella come questa: Codice:
mysql> describe comuni; +------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------+--------------+------+-----+---------+-------+ | comune | varchar(255) | YES | | NULL | | | provincia | varchar(255) | YES | | NULL | | | cap | varchar(255) | YES | | NULL | | | prefisso_tel | varchar(255) | YES | | NULL | | | codice_istat | varchar(255) | YES | | NULL | | | codice_catastale | varchar(255) | YES | | NULL | | | sito_comune | varchar(255) | YES | | NULL | | +------------------+--------------+------+-----+---------+-------+ 7 rows in set (0.00 sec) |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
, CONSTRAINT `nomeconstraint' FOREIGN KEY (cap) REFERENCES citta(cap) Occhio alla virgola inziale Inoltre sappi che MySql puo' montare diversi Engine, alcuni dei quali NON supportano le foreign key, anche largamente usati per soluzioni commerciali. E questo secondo me la dice lunga sulla serieta' di MySql. Spera di non avere montato uno di questi engine sfortunati.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Non conosco bene MySql, ma su quasi tutti i motori lo statement e'
ALTER TABLE citta MODIFY COLUMN cap INT(11) Ancora una cosa, ovviamente per poter indicare una foreign key i campi delle 2 tabelle devono essere dello stesso tipo
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#5 | |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
Quote:
Altra domanda da un milione di dollari...praticamente una parte di questo esame funziona così: Prendo il vecchio progetto fatto al primo esame di Database, lo popolo di dati (tanti dati) e vedo quanto ci mette a fare le varie query. Poi si ottimizzano le query usando le view ed inserendo degli indici....si rieseguono le stesse query e si mostra il risultato dell'ottimizzazione mostrando che le query ottimizzate ed il database con degli indici ci mettono meno tempo rispetto a prima. Piccolo dettaglio...per ora ho popolato solo la tabella comuni, province, regioni (con tutti i dati relativi ad esempio ai comuni italiani: nome comune, cap del comune, numero abitanti, etcetc...ovviamente queste tabelle le ho trovate prefatte su Internet...sarebbe stato impossibile inserire dati coerenti a mano in poco tempo). Poi ho usato un programma chiamato Data Generator for MySql ed ho riempito la tabella utenti (per ora solo questa) con circa 6000 utenti (il programma è fatto molto bene ed è fatto per rispettare i vincoli di integrità referenziale popolando la tabella utente e mettendo nel relativo campo Cap un valore pescato dal campo Cap della tabella Comuni). Vabbè tutto sto discorso per dire: ho popolato con parecchi record la tabella utenti....anche le tabelle comuni, province non sono piccolissime in quanto contengono tutti i comuni e le province italiane...bene se provo a fare delle query (non complesse ma comunque con 2-3 join) ci mette sempre pochissimo ad eseguirle (tipo al più 0,3 secondi). Ora...vabbè che devo popolare anche tutto il resto del db ma mi sembra troppo basso come tempo e sopratutto così non saprei come far vedere la differenza tra query prima e dopo l'ottimizzazione del db e delle query stesse Può essere che è attivata una cache delle query e che ci mette così poco per questo motivo? In MySql eventualmente è possibile disattivare tale cache? Cmq ovviamente ho usato InnoDB che m garantisce le foreign key e mi dovrebbe anche gestire in automatico le transazioni...MyIsam sarà più prestazionale ma per tale progetto sarebbe solo scomodo... Grazie Andrea |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:02.




















