Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412

    Chiarimenti sulle scelta delle chiavi

    Supponendo di avere una tabaella atta a memorizzare i messaggi degli utenti, questa sarà come minimo costituita da:

    IDmessaggio, IDutente, testo messaggio, data creazione

    L'IDmessaggio ovviamente fungerebbe da chiave primaria, ma per gli altri campi? Io ho sempre selezionato la voce "---" che non so cosa voglia significare. Per indenderci:
    Immagini allegate Immagini allegate

  2. #2
    "per gli altri campi" cosa?

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Originariamente inviato da optime
    "per gli altri campi" cosa?
    quelli riportati nell'esempio:
    IDutente (che ovviamente in questo caso non rappresenta una chiave primaria della tabella "messaggi", ma contiene unicamente un riferimento all'ID dell'utente memorizzato nella tabella "utenti", tabella in cui l'ID è settato naturalmente come chiave primaria), testo messaggio e data creazione.

  4. #4
    sì, ok, ma cosa vorresti sapere? la chiave primaria l'hai già definita, le altre colonne al massimo possono avere degli indici

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Originariamente inviato da optime
    sì, ok, ma cosa vorresti sapere? la chiave primaria l'hai già definita, le altre colonne al massimo possono avere degli indici
    essenzialmente mi serve sapere cos'è quel "---" che sta nell'interfaccia di phpmyadmin, e poi la tipologia di chiave che dovrei mettere, come suggerito da te "indice"... ma ad esmepio, per il campo "testo messaggio" è il caso di utilizzare l'indice?
    L'indice sarebbe invece opportuno metterlo per il campo "idUtente", anche se poi si presuppone ci siano dei duplicati, giusto?

  6. #6
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Originariamente inviato da American
    L'indice sarebbe invece opportuno metterlo per il campo "idUtente", anche se poi si presuppone ci siano dei duplicati, giusto?
    Attenzione, un indice è una cosa diversa da una chiave primaria
    Puoi tranquillamente definire un indice (purchè ovviamente, tu non lo imposti come "unique") per colonne che contengono valori duplicati

    Un indice sul campo IdUtente, anche se avrai più record con lo stesso IdUtente, ti può comunque aiutare nelle ricerche

    Una lettura introduttiva: http://www.html.it/pag/32148/indici/

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Originariamente inviato da comas17
    Attenzione, un indice è una cosa diversa da una chiave primaria
    Puoi tranquillamente definire un indice (purchè ovviamente, tu non lo imposti come "unique") per colonne che contengono valori duplicati

    Un indice sul campo IdUtente, anche se avrai più record con lo stesso IdUtente, ti può comunque aiutare nelle ricerche

    Una lettura introduttiva: http://www.html.it/pag/32148/indici/
    Si l'ho già letto quell'articolo tuttavia mi sfugge il lato pratico della faccenda. Allo stato attuale, pur non avendo impostato alcun indice, riesco tranquillamente a fare lo JOIN tra più tabelle.
    Se poi ci sono altri tipi idi vantaggi non è ho idea

  8. #8
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Gli indici non hanno a che vedere con le join, è evidente che le puoi fare lo stesso

    Gli indici sono strutture che permettono di effettuare ricerche più velocemente; immagina di effettuare una query che ti permetta di estrarre tutti i record di uno specifico idUtente

    Se non hai un indice sulla colonna idUtente il database dovrà scorrersi tutta l'intera tabella alla ricerca dei record che soddisfano la tua condizione (es: idUtente = 23)

    Se hai un indice il database lo "chiede" all'indice stesso, che gli dirà "i record che ti interessano sono il numero 34, il 45, il 67, il 123, etc" quindi la query (soprattutto ovviamente in presenza di grandi quantità di record) sarà molto più veloce

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    uhm interessante
    e dal punto di vista semantico, una query basata sull'utilizzo degli indici com'è scritta?
    Attualmente ad esempio, se devo prendere tutti i messaggi dell'utente 23 scriverei

    SELECT * from messaggi WHERE idUtente=23
    In questo caso come dici tu, mysql va a passarsi tutti i record estrapolando solo quelli che corrispondono alla mia condizione, nel caso idUtente lo settassi come INDICE, cambierebbe qualcosa nella query?

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2011
    residenza
    Dublin
    Messaggi
    34
    Originariamente inviato da American
    e dal punto di vista semantico, una query basata sull'utilizzo degli indici com'è scritta?
    ...
    nel caso idUtente lo settassi come INDICE, cambierebbe qualcosa nella query?
    No la query rimane la stessa.
    L'indice è usato internamente dall'engine del DB
    Chi non gode a tavola non gode neanche a letto

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.