Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072

    [MySQL] Cardinalità tabella

    Ciao a tutti, la "Cardinalità" di una tabella indica il valore dell'ultimo ID??

    Lo chiedo perchè in una tabella con 4 elementi ho cardinalità 4. Supponiamo che venga inserito un nuovo record, che avrà ID 5 e che poi questo record venga cancellato. Il prossimo record avrà ID 6 (resterà un buco tra 4 e 6). Se però dopo la cancellazione del record con ID 5 ripristino la cardinalità a 4 non avrò questo problema. Corretto???
    Tutto questo funziona "real time", intedo: modifico la cardialità appena cancellato il record e tutto si sistema.

    Ma ipotizziamo una situazione a regime.
    Ipotizziamo che una tabella abbia 900 record ma la cardinalità è 920. Vuol dire che sono stati eliminati, nel corso del tempio, 20 record OK?. Se metto cardinalità a 900 in questa tabella.... cosa accade?

    Grazie per i chiarimenti

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120

    Re: [MySQL] Cardinalità tabella

    Originariamente inviato da Valeria75_bis
    Grazie per i chiarimenti
    In effetti te ne servono parecchi.
    Tanto per cominciare, parlare di "cardinalità di una tabella" non ha un gran senso, perché la cardinalità si riferisce ad una colonna (o, eventualmente, ad una relazione fra tabelle).
    Nel caso delle colonne, la cardinalità rappresenta il numero di valori diversi esistenti nella tabella per quella colonna. E' chiaro quindi che in una colonna id la cardinalità sarà sempre uguale al numero di righe presenti nella tabella, ma questo è ben diverso da dire che sia il valore dell'ultimo id, per i motivi che tu stessa hai notato.

    Detto questo, le ipotesi che tu fai sul modo di gestire gli id, al di là dell'uso inappropriato del termine cardinalità, sono pure esse insensate. Tu dici "resterà un buco fra 4 e 6" e lo definisci "un problema". E perché mai lo sarebbe?
    Gli id già utilizzati non vanno riciclati, se non vuoi creare il rischio che in giro per il database rimanga qualche chiave esterna che puntava all'id cancellato e che, una volta riciclato l'id, punterà ad un record che non c'entra niente. E' chiaro che una corretta logica di programmazione dovrebbe impedire che ciò accada, ma rimane il fatto che, anche se ciò fosse garantito, per "tappare i buchi" dovresti fare un grosso lavoro, prono ad errori, e con utilità zero.
    Per quale motivo?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    136
    Quello che hai scritto non ha assolutamente senso.La cardinalità descrive il numero minimo e massimo a cui un record di una tabella A può essere legato ad un altro record di una tabella B in una relazione C.

    A(0,N)-------C-------(0,N)B

    In questo caso un record di A lo possiamo legare 0 o N volte con un record di B attraverso la relazione C.La stessa cosa vale per B.A cosa serve sapere qual è l'ultimo record inserito?A meno che tu non abbia bisogno di tenerne traccia devi usare un'altra strategia.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Grazie per i chiarimenti!!

  5. #5
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Io invece più che chiarimenti direi... oscuramenti.
    Se la domanda è una forma contorta di "esiste un modo per controllare un campo autoincrementante mysql"?

    La risposta è
    "ovviamente NO" in quanto, per ragioni storiche, altro non è che un vero contatore intero in RAM incrementato monotonicamente, con accesso mediante mutex.
    Scrivo "per ragioni storiche" perchè con gli engine a transazioni la situazione è un po' cambiata, ancor più con la versione 5.6.
    Ma il succo resta quello.

    ---
    Se invece la domanda è "cosa si intende per cardinalità in mysql" allora la risposta è diversa, ed è relativa agli indici btree, in particolare al numero di elementi DISTINCT che li compongono.
    Questo serve principalmente per l'ottimizzatore (ma in realtà dovrebbe servire anche all'umano) per decidere - sulla base di una stima - il piano di accesso.
    Anche qui il discorso è lungo assai, perchè le varie versioni di mysql hanno introdotto innovazioni sensibili tra 5.1 e 5.5, e anche su 5.6.

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.