Topic: Pubblico - Composto da 8 Posts di 2 Utenti.
| 19 Novembre, 2011 00:02 | #1 | ||
|---|---|---|---|
|
Salve Ragazzi,
Ultima modifica 19 Novembre, 2011 00:04 di Hg89 |
|||
| 19 Novembre, 2011 11:59 | #2 | ||
|---|---|---|---|
|
Ciao, la foreign_key in realtà non è altro che un tipo particolare di constraint mysql. Alcune constraint mysql sono anche, ad esempio, PRIMARY KEY, UNIQUE e NOT NULL. La parola chiave CONSTRAINT posta prima della foreign key ti permette di assegnare un nome all'indice che rappresenta la foreign key. INNO_DB utilizza questi indici per non effettuare ogni volta lo scan dell'intera tabella e individuare subito la chiave, quindi questi indici devono essere unici all'interno del db. Di solito per i nomi da assegnare alle foreign key si utilizza la convenzione fk_nomeTabellaOrigine_nomeTabellaDestinazione. Spero di essere stato utile. Se servono altri chiarienti fammi sapere. Ciao. |
|||
| 19 Novembre, 2011 13:00 | #3 | ||
|---|---|---|---|
|
Grazie per il chiarimento, mi hai tolto un grosso dubbio. Ti volevo chiedere 3 cose: 1) La ForenKey; Primary Key; Unique e not null sono in sè per sè degli indici? 2) Come potrei facilmente individuare la foreign key nel caso volessi aggiornarla o cancellarla? Potresti farmi qualche esempio in merito alla individuazione dell'indice, alla modifica e cancellazione (Cosi concludo l'argomentazione (ForenKey)? 3) Ho un dubbio sul Tipo di dato in Mysql, mi consigli di aprire un altro Topic o posso inserirlo in questo? Grazie di nuovo per la tua disponibilità.
Ultima modifica 19 Novembre, 2011 13:09 di Hg89 |
|||
| 20 Novembre, 2011 07:36 | #4 | ||
|---|---|---|---|
|
1) Foreign Key e Primary Key vengono utilizzate da Inno_DB per velocizzare le operazioni di ricerca di un record; naturalmente anche la constraint unique è di aiuto perchè se effettuo una query indicando il valore del campo unique Inno_DB sa che quel campo è come una primary key in quanto è unico nella tabella. Quindi si possono considerare indici. Not null è una semplice constraint che ti garantisce che quel campo non sia mai nullo. 2) Puoi fare così per aggiungere: E così per cancellare: 1ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol; Per modificarla penso che l'unica soluzione sia cancellarla e reinserirla. 3)Meglio che apri un nuovo topic con un titolo pertinente, anche per agevolare altri utenti che magari hanno lo stesso problema e cercano un topic specifico Se vuoi continuare ad approfondire il tema indici e foreign key ti dò un paio di suggerimenti: 1) InnoDB ti permette di far diventare indice qualsiasi campo (a te scoprire come ;)). Analizza le tue query e vedi se spesso fai ricerche utilizzando campi che non sono chiavi e che quindi magari ti converrebbe far diventare indici 2) Studiati la parola chiave EXPLAIN. Ti sarà molto utile per ottimizzare le tue query e la struttura del tuo DB. Naturalmente per ogni chiarimento non esitare a chiedere. Ciao. ;) |
|||
| 20 Novembre, 2011 12:25 | #5 | ||
|---|---|---|---|
|
Sei un Mito, grazie 1000... per l'aiuto che mi stai dando. Ho letto il codice che mi hai postato, però non capisco una cosa; aggiungendo un CONSTRAINT sia per una forenkey o una primarykey ecc..., noi cosi facendo aggiungiamo un nome (personale) all'indice che rappresenta la foreign key o altro...Però noto che dopo la forenkey c'è un altro parametro opzionale [index_name] e poi (index_col_name, ...) ma a questo punto se noi abbiamo già dato un nome a cosa serve questo parametro opzionale? Ipotizzando di dover mettere mani ad una tabella creata ed ampliata da un'altro progettista, qualè il modo per vedere i nomi degli indici utilizzati dallo sviluppatore che ci ha preceduto? InnoDB ti permette di far diventare indice qualsiasi campo quindi se noi creiamo una tabella e la inizializziamo come "ENGINE= INNODB" automaticamente tutte le colonne create, automaticamente vengono create come indice (ovviamente con un nome dato da MySQL)??? Comunque in merito al comando EXPLAIN, ho cercato qualcosa su internet e anche su questo portale ma le guide non sono molto esaurienti, però voglio capirlo meglio perchè a quando pare e l'unico comando adatto per il test delle query. Ti continuo a ringraziare per i continui aiuti e suggerimenti.
Ultima modifica 20 Novembre, 2011 12:52 di Hg89 |
|||
| 21 Novembre, 2011 12:06 | #6 | ||
|---|---|---|---|
|
Ciao, mi rendo conto che non sono stato abbastanza esauriente per quanto riguarda la spiegazione sulla creazione di una constraint. Rimedio subito ;) Quando si crea una constraint (foreign key, primary key, unique...) InnoDb oltre a creare una "costrizione" che regola le modifiche a quel determinato campo (nel caso di foreign key il campo deve esistere sulla tabella di riferimento, nel caso di unique ogni valore deve essere unico ecc...), crea anche un indice su quel campo. Spero sia più chiaro così :) |
|||
| 21 Novembre, 2011 13:12 | #7 | ||
|---|---|---|---|
|
Ottimo, finalmento ho capito come funzionano queste benedette "Constraint". Gentilmente mi potresti chiarire quest'ultimo dubbio? |
|||
| 25 Novembre, 2011 08:37 | #8 | ||
|---|---|---|---|
quindi se noi creiamo una tabella e la inizializziamo come "ENGINE= INNODB" automaticamente tutte le colonne create, automaticamente vengono create come indice (ovviamente con un nome dato da MySQL)??? La risposta è no...non crea indici in automatico su ogni campo ma ti permette di crearli. InnoDB ti permette di far diventare indice qualsiasi campo (a te scoprire come ;)). Quindi lascio a te il compito di approfondire sull'argomento creazione degli indici ;) |
|||
Condividi su:
Loggati o Registrati per replicare