A che punto utilizzare le enumerazioni basate su stringhe può diventare un problema reale?

2

Questo è un seguace diretto di questa domanda . Una risposta data a queste domande dice (la mia comprensione), che oggigiorno usare enum basati su string invece di interi non è un grosso problema, perché i costi di hosting e i costi generali di DB sono oggi molto, molto più bassi, quindi possiamo permetterci per alcuni " spreco di dimensioni del database "(generalizzazione).

Sono interessato, a che punto questo può ribaltarsi e anche oggi diventare un vero problema?

Supponiamo di avere una tabella con n colonne, di cui quattro colonne usano enumerazioni basate su string invece di numeri interi. Supponiamo che ogni enum sia lungo 8 caratteri, se questo è importante (probabilmente sì - dimensione della colonna di stringhe). Ora, supponiamo, che sto compilando questo tavolo con i record. Quando posso iniziare a pensare, usare le enumerazioni è stata una decisione sbagliata?

A 100k record? A record 1M o forse non prima di raggiungere 1G di record?

C'è un modo semplice per me di determinare:

  • quale sarebbe la differenza di dimensione, se il mio database con n record userebbe numeri interi invece di stringhe?

  • quale dimensione generale del database potrebbe diventare un problema reale per il mio hosting?

Ho sentito che su un semplice hosting condiviso una dimensione del database di 1 GB diventa un problema e non sono consentiti database più grandi / non molto graditi dagli amministratori dell'hosting. Ma, dato che sono un principiante di database completo, non lo so, se è vero? E come diventa, quando parliamo di VPS o persino di hosting dedicato?

    
posta trejder 20.06.2015 - 19:46
fonte

3 risposte

4

Il problema non è lo spazio. Perché lo spazio è economico.

Ci vuole davvero un buon libro per spiegare cosa c'è di sbagliato nel ripetere i testi in una colonna, ma è una cattiva idea. Lo capirai quando leggi la normalizzazione del database . La normalizzazione del database è ciò che una strong tipizzazione è per i linguaggi di programmazione. Puoi vivere senza, soprattutto per progetti molto piccoli, ma è molto più facile finire con un casino completo. Quindi per i principianti, fallo nel modo tradizionale.

Fondamentalmente, dovresti avere una tabella di ricerca con tutti i tuoi valori e la chiave primaria di detta tabella dovrebbe essere nella tabella in cui avresti inserito il testo. Come relazione con una chiave esterna.

Questo significa che il database deve unirsi a quelle due tabelle. Ma questo è un lavoro di database. Solo se pensi di avere un carico così pesante che hai bisogno di per ottimizzare (suggerimento: se parli solo di milioni di record e gigabyte, non ), dovresti appiattire le tue relazioni con la tabella.

Ancora una volta, leggi prima un buon libro sulla progettazione del database, che ti farà risparmiare un sacco di grattacapi.

    
risposta data 20.06.2015 - 21:53
fonte
3

In realtà, internamente il database non memorizzerà la rappresentazione della stringa dell'enumerazione in ogni record. Sta effettivamente creando una propria tabella di ricerca e traducendo il valore intero memorizzato in stringa (e ritorno) quando interagisci con il database ...

Da: link

If you retrieve an ENUM value in a numeric context, the column value's index is returned. For example, you can retrieve numeric values from an ENUM column like this:

mysql> SELECT enum_col+0 FROM tbl_name;

    
risposta data 21.06.2015 - 05:09
fonte
1

Le enumerazioni non sono solo più veloci da inserire, eliminare, aggiornare e leggere. Inoltre occupano meno spazio su disco e, soprattutto, assicurano che è possibile memorizzare solo un insieme limitato di valori.

Se crei un campo e vuoi solo consentire valori "maschili" o "femminili", allora un enum è utile per assicurarti che nessuno memorizzi "uomo".

I campi di testo sono solo una cattiva soluzione per archiviare un insieme limitato di valori, per motivi simili a quelli che non dovresti usare i campi di testo per memorizzare numeri o date, indipendentemente dalle implicazioni di rendimento.

    
risposta data 21.06.2015 - 10:07
fonte

Leggi altre domande sui tag