Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306

    Esempi con Primary key ed indici

    Ciao a tutti ragazzi
    ho trovato alcune guide di mysql con le quali ho letto o della possibilità di inserire indici e chiave primaria nelle tabelle, per velocizzare la loro consultazione.

    La mancanza di tutte le guide che ho trovato è: mancanza di esempi per far capire praticamente cosa fanno queste chiavi e indici.

    Potete indicarmi un file/documento/guida con una creazione di database con l'uso di queste cose dove si mette in risalto praticamente con esempi, la differenza tra l'uso ed il non uso di indici e primary key ?

    grazie a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    In altre parole io con l'indice e con la PK che devo fare ?


    andiamo sul pratico


    1)
    vado a definire una tabella amici con tutti i nomi,cognomi e telefono dei miei ventimila amici.e definisco id come Primary Key


    codice:
    CREATE TABLE amici (
      id INT(20) AUTO_INCREMENT,
      nome VARCHAR(20),
      cognome VARCHAR(20),
      telefono INT(10),
      PRIMARY KEY(id)
    );

    ora così dopo creato questa tabella amici, vado ad inserire tutti i dati dei miei ventimila amici con INSERT........
    quindi ottengo una tabella amici piena di dati e quindi con 20.000 righe (record , giusto? con record identifichi le righe della tabella,giusto?)


    ora con la PK, io che faccio?




    2)
    Ora poi mi creo una tabella amici2 come prima, ma ha anche un indice col nome indice_cognomi; quindi ho indicizzato il cognome.


    codice:
    CREATE TABLE amici2 (
      id INT(20) AUTO_INCREMENT,
      nome VARCHAR(20),
      cognome VARCHAR(20),
      telefono INT(10),
      PRIMARY KEY(id),
      INDEX indice_cognomi (cognome)
    );

    Vado ad inserire tutti i 20000 amici che ho, come ho fatto prima.


    Ora ottengo quindi una tabella amici2 piena di dati dei miei amici.


    Cosa faccio con l'indice?

  3. #3
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    ........ Cosa faccio con l'indice?
    Con l'indice non fai nulla,
    lo devi solo creare se necessario e lasciarlo poi al DB



    Non ho capito perché 2 tabelle diverse ma con gli stessi dati ?????????????



    Comunque:

    - Il Numero telefonico assolutamente non numerico
    usa tranquillamente un formato Varchar(nn)


    Molto molto molto in generale ----- Cosa devi indicizzare:

    Tabella Amici con
    - IdAm (Key)
    - Nome
    - Cognome
    - Eccetera

    Tabella Appuntamenti con:
    - IdAp (Key)
    - RIdAm (Key esterna) (qui scrivi il IdAm di quello/a con cui hai appuntamento)
    - Dove
    - Ora
    - Motivo
    - Eccetera

    I campi IdAm e IdAp certamente indicizzati perché sono Key
    quindi tu quando in qualunque punto del DB dovrai fare riferimento a
    quello specifico record (esatto, il record è la riga )
    userai solamente il suo Id


    Il campo RIdAm si chiama KeyEsterna e nella tabella Appuntamenti
    ti dice con quale Amico hai l'appuntamento
    Anche quella va indicizzata ( con duplicati ammessi )
    perché serve a legare le tabelle fra di loro


    ______ Fino a qui c'è la base _________

    Poi devi valutare te se farai per esempio ricerche frequenti
    per esempio sui campi Cognome oppure Dove
    quei campi conviene indicizzarli

    attenzione pero a non indicizzare indiscriminatamente,
    perché gli indici ti aiutano nelle ricerche, ma ti rallentano
    negli INSERT

    Si tratta in effetti di altri campi nascosti che non puoi vedere


    Ripeto sono stato moltissimo riduttivo perché l'argomento
    è molto più esteso

    .

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Grazie nman per la tua risposta.
    Ti posso chiedere di andare per gradi? e visto che hai la padronanza dell'argomento puoi utilizzare le mie tabelle? Ti ringrazio anche per questo: è importante per me che sono ai primi databese della mia vita.

    Ho creato due tabelle con gli stessi dati proprio per tentare di capire a cosa servono le PK (Primary Key) e l'index, andando appunto per gradi, cambiando poche cose alla volta, per poi prendere più confidenza con questi argomenti e poter creare tabelle quanto più diverseè possibile.
    ( Le chiavi esterne non le ho ancora incontrate e direi di lasciarle fuori per il momento.....non ho ancora chiare le chiavi interne, figuriamoci le esterne )

    Io vorrei capire una volta create le tabelle con un indice o una PK (come ho fatto nel mio intervento precedente) io che devo fare precisamente per sfruttarle? (i ragionamenti li lascerei stare per il momento).


    vado ad inserire i dati con
    codice:
    INSERT INTO amici VALUES (' 1 ', 'Mario', 'Rossi', '123456789');
    e cosï per tutti i 20000 amici che ho.
    come faccio a fare riferimento ad uno specifico record? usando SELECT?
    Così ho in risposta tutti i campi della tabella.

    codice:
    SELECT * FROM amici;
    Considerando la tabella amici, quando e come uso la PK?cioè con che comando uso il fatto che id sia un PK?

    Poi considerando la tabella amici2 quando e come uso l'indice_cognome? cioè con che comando uso il fatto che indice_cognomi sia un indice?


    In riferimento a quello che hai scritto ti chiedo:
    1)Perchè il numero di telefono va in Varchar? e non in intero?

    2) quando definisci una Primary Key, stai indicizzando qualcosa? allora quale � la differenza tra indice e PK?
    Ultima modifica di Alfoxx; 18-04-2016 a 11:03

  5. #5
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    ...... sono ai primi databese della mia vita. ........
    beato te !!!

    Innanzitutto consiglio prima di leggere quanto sotto che è evidentemente molto semplicistico e riduttivo di
    fare uno studio sulla Normalizzazione Data Base fatti una bella ricerca su Google
    e impiega delle giornate e settimane per capirla

    La Normalizzazione sono 4 concetti, ma se non li capisci puoi andare a vendere gelati

    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    ( Le chiavi esterne non le ho ancora incontrate e direi di lasciarle fuori per il momento.....non ho ancora chiare le chiavi interne, figuriamoci le esterne )
    eppure senza chiave esterna non ha quasi senso la chiave interna .......
    chiamiamole con i nomi convenzionali:
    PrymaryKey, PK, Key, ChiavePrimaria, Chiave, sono tutti sinonimi (Noi usiamo PK)
    ForegenKey, FK, ChiaveEsterna, sono tutti sinonimi (Noi usiamo FK)

    Bene, nella tabella secondaria (Appuntamenti) nel campo della FK ci metti il valore della PK della tabella primaria



    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    Io vorrei capire una volta create le tabelle con un indice o una PK (come ho fatto nel mio intervento precedente) io che devo fare precisamente per sfruttarle?
    Non devi fare nulla, come le fondazioni del palazzo, le hai mai viste ????? No
    Sai che ci sono le fondazioni e allora dormi tranquillo

    Certo che se devi metterti in casa una cassaforte da 2500 Kg allora ti preoccupi di metterla sulla verticale di un pilastro

    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    vado ad inserire i dati con
    codice:
    INSERT INTO amici VALUES (' 1 ', 'Mario', 'Rossi', '123456789');
    questa va bene, non c'entra nulla con gli indici,
    non hai scritto il nome dei campi, io consiglio di scriverli, ma forse il tuo DB inserisce in sequenza i valori .....
    Quegli spazi fra gli apici e il numero 1 a cosa servono ????

    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    e cosï per tutti i 20000 amici che ho.
    come faccio a fare riferimento ad uno specifico record? usando SELECT?
    codice:
    SELECT * FROM amici;
    Wowww!!!! 20000 amici,
    io ai miei tempi avevo una misera agenda blu popolata in diversi anni con dentro solamente un centinaio di amiche
    (pero erano quasi tutte assaggiate e straniere)
    quando le tedesche scendevano in orde sulla riviera romagnola,
    ma torniamo a noi

    Sconsiglio il " SELECT * ", esplicita sempre il nome dei campi
    SELECT IdAm, Cognome, Nome, Telefono FROM amici WHERE IdAm=12;

    quindi il campo indicizzato è il "IdAm" e la ricerca (WHERE) la fai appunto su quel campo



    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    Considerando la tabella amici, quando e come uso la PK?cioè con che comando uso il fatto che id sia un PK?
    Nessun comando specifico, d evi sapere che ci sono e quali sono le PK e le FK e fare le ricerche usando quelle
    la query sopra potevi anche scriverla cosi:
    SELECT IdAm, Cognome, Nome, Telefono FROM amici WHERE Telefono='02/9860424 int 8';
    ma avrebbe avuto prestazioni diverse


    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    Poi considerando la tabella amici2 quando e come uso l'indice_cognome? cioè con che comando uso il fatto che indice_cognomi sia un indice?
    Come sopra gli indici non si usano, devi solo sapere che ci sono e dove sono


    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    1)Perchè il numero di telefono va in Varchar? e non in intero?
    Prova a livello pratico in un campo INT a scrivere i seguenti numeri telefonoci:
    - 0290729875
    - 02/8954781
    - 06 / 875495 int 12
    - cell. 328 - 7854156
    - 547865 (ore 19/22)



    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    2) quando definisci una Primary Key, stai indicizzando qualcosa? allora quale � la differenza tra indice e PK?
    In funzione del DB che usi quando definisci una PrimaryKey hai gia di fatto Indicizzato quel campo
    diciamo che la PK puo essere considerata un indice che NON ammette duplicati
    Ultima modifica di nman; 18-04-2016 a 12:56

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Da una guida che ho trovato ho letto che:


    in un database relazionale le tabelle sono collegate tra loro tramite relazioni logiche, facendo si che righe di una tabella contengano riferimenti a valori chiave di un'altra tabella.

    I principali aspetti dei punti di legame tra la cartella principale amici e quella secondaria votiMatematica2 sono:

    - i campi coinvolti nella relazione devono essere di tipi simili.
    - le tabelle devohno avere lo stesso Storage Engine
    - la FOREIGN KEY deve essere contenuta nella tabella secondaria
    - i campi coinvolti nella relazione devono essere sottoposti ad un indice di qualche tipo , sia nella tabella principale che in quella secondaria in modo da renderli accessibili in modo efficiente


    1)per quest'ultima caratteristica l'indice di cui si parla nella tabella principale sarebbe la PK?




    La mia tabella amici è questa:



    codice:
    CREATE TABLE amici (  
    id INT(20) AUTO_INCREMENT,
    
      nome VARCHAR(20),
      cognome VARCHAR(20),
      telefono INT(10),
      PRIMARY KEY(id)
    
    );


    la mia tabella secondaria viene ad essere quella degli Appuntamenti

    codice:
    CREATE TABLE Appuntamenti (  
    id_amico INT(20) AUTO_INCREMENT,
    
       dove VARCHAR(20),
      motivo VARCHAR(50),
      
      index id_amico_ind(id_amico), 
     FOREIGN KEY (id_amico) REFERENCES amici(id),
    
    );
    


    2)
    La Foreign KEY ha legato id_amico della tabella Appuntamenti con id della tabella amici?
    3)cosa fa l'indice? tramite id_amico, che si ricava da id (grazie alla Foreign Key) si ha il voto in matematica dell'amico?


    4)ma quindi mettendo insieme le cose che mi hai detto mi viene da dire: è solo un modo di costruire le tabelle che devono essere legate tra loro? visto che poi per leggere i dati, cmq bisogna specificare tutti i campi di cui si vuole sapere il valore.
    Ultima modifica di Alfoxx; 18-04-2016 a 13:17

  7. #7
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    C'è qualcosa che non mi conince .....
    che DataBase usi ??? SQLServer? MySql? Oracle? Altri .....

    molto sommarianemte la prima tabella mi sembra a posto,

    ma la seconda ha del casino nel campo id_amico
    non puo essere contemporaneamente AUTO_INCREMENT e FOREIGN KEY

    nella seconda tabella devi avere:

    - una PrimaryKey AutoIncrement
    - una FreiginKey Numerica ma NON AutoIncrement
    - la FreiginKey deve essere indicizzata


    Se sei all'inzio come ci hai detto allora non avere fretta di costruire tabelle ......
    Impegnati piuttosto sulla Nomalizzazione, almeno le prime 3 forme Normali
    è fondamentale ......

    .

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    allora la tabella secondaria Appuntamenti è

    codice:
    CREATE TABLE Appuntamenti(
    
    id_amico INT(20)
    
       dove VARCHAR(20),
      motivo VARCHAR(50),
      
      index id_amico_ind(id_amico), 
     FOREIGN KEY (id_amico) REFERENCES amici(id),
    
    );
    ho solo sbagliato a digitare, in quanto ho utilizzato copia ed incolla...

    ho letto la normalizzazione, e devo dire che mi ha aiutato a capire il modo di ragionare, perchè appunto mi mancava qualcosa nella costruzione delle tabelle.
    Ma siamo in campo teorico, ora vorrei vedere come si creano praticamente legando i ragionamenti fatti.

    secondo me non ho fretta: vorrei capire gli indici e le primary key con degli esempi, non voglio avere fretta. E' solo che non trovo degli esempi esplicitati.

    Si parla sempre della stessa cosa, solo che manca il "praticamente"
    Ultima modifica di Alfoxx; 18-04-2016 a 18:07

  9. #9

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Grazie Luca
    la leggerò

    ciao ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.