Database
 sql >> Database >  >> RDS >> Database

Come selezionare i tipi di dati giusti

Poiché la quantità di dati di un'azienda tipica è cresciuta in modo esponenziale, è diventato ancora più fondamentale ottimizzare l'archiviazione dei dati. La dimensione dei tuoi dati non influisce solo sulle dimensioni e sui costi di archiviazione, ma influisce anche sulle prestazioni delle query. Un fattore chiave nel determinare la dimensione dei dati è il tipo di dati selezionato. Questo tutorial spiegherà come selezionare i tipi di dati corretti.

Cosa sono i tipi di dati?

Tipi di dati definire il tipo e l'intervallo di dati che possono essere archiviati in un determinato campo (o colonna).

Considera una tabella delle vendite con questi record di esempio:

Ogni campo ha il proprio tipo e intervallo di valori:

tempo_di_acquisto :data e ora della venditasale_id :valori interi che aumentano di uno per ogni nuova venditaid_cliente :valori interi che aumentano di uno per ogni nuovo clientevaluta :testo sempre nel codice valuta di 3 caratteriimporto_pagato :valori numerici reali monetari compresi tra $ 0,00 e $ 1.000,00dispositivo :testo, dove i valori possono essere:"desktop", "app mobile" e "web mobile"has_discount :booleano dove le voci possono essere TRUE o FALSE note :testo, in cui la voce può essere lunga quanto consentito nel nostro strumento di input dell'agente (250 caratteri)

Il tipo di dati (interi, testo, numeri reali, ecc…) e gli eventuali intervalli di valori (da 0 a 1.000; 3 caratteri qualsiasi; ecc…) corrispondono a specifici tipi di dati del database .

Quali sono i possibili tipi di dati?

Database diversi hanno diversi tipi di dati disponibili, ma la maggior parte rientra in queste categorie:

Numero:

  • interi :per i numeri senza frazioni. Può essere firmato (consenti valori positivi e negativi) o senza segno (consenti solo numeri positivi). Comunemente utilizzato per campi ID e conteggi di qualcosa
  • decimale(x,y) :per numeri con frazioni che richiedono la precisione esatta. Può essere firmato (consenti valori positivi e negativi) o senza segno (consenti solo numeri positivi). Comunemente usato per i campi monetari. L'utente specifica il numero di cifre significative consentite complessivamente (x) e dopo il punto decimale (y) tra parentesi
  • flotta / doppio :per i numeri con frazioni che non richiedono la precisione esatta. Può essere firmato (consenti valori positivi e negativi) o senza segno (consenti solo numeri positivi). Comunemente usato per tutti i numeri reali eccetto i campi monetari

Data/ora:

data :per valori di data

  • tempo :per valori temporali
  • data/ora :per i valori di data e ora

Testo:

  • carattere(n) :per stringhe di caratteri di lunghezza fissa, dove il valore tra parentesi determina la dimensione fissa di ogni voce
  • varchar(n) :per stringhe di caratteri di lunghezza variabile, dove il valore tra parentesi determina la dimensione massima accettata di ciascuna voce

Booleano:

  • booleano :per valori booleani (vero/falso). Alcuni database (come MySQL) non hanno il tipo di dati booleano e invece convertono i valori booleani in numeri interi (1=VERO, 0 =FALSO)

La maggior parte dei database offre variazioni di dimensione per ciascun tipo. Ad esempio, MySQL fornisce questi possibili tipi di dati interi:

Come selezionare i tipi di dati giusti

La strategia di base per selezionare il tipo di dati migliore è selezionare il tipo di dati più piccolo che corrisponda al tipo di dati che hai e che consenta tutti i valori ammissibili dei tuoi dati.

Ad esempio, customer_id nella nostra tabella di vendita campione è un numero intero che inizia con 0. Oggi la nostra azienda immaginaria ha solo 15.000 clienti. Utilizzando la tabella dei tipi di dati interi MySQL della sezione precedente, potremmo essere tentati di selezionare SMALLINT unsigned come tipo di dati, poiché è il tipo di dati più piccolo che accetterà i nostri valori interi correnti da 0 a 15.000. Tuttavia, prevediamo di raggiungere 100.000 clienti nei prossimi 6-12 mesi. Quando superiamo 65.535, il SMALLINT non sarà più sufficiente. Pertanto, una selezione migliore è MEDIUMINT non firmato, che dovrebbe coprirci per i prossimi anni.

Puoi consentire al tuo database di selezionare i tipi di dati per te durante la creazione della tabella con record di esempio. Tuttavia, questo raramente ti darà la migliore selezione del tipo di dati. Ad esempio, lasciare che MySQL selezioni i tipi di dati per una tabella di vendita con i valori di esempio mostrati in precedenza crea diversi problemi.

I problemi che incontriamo con i tipi di dati selezionati automaticamente da MySQL sono:

  1. tipo di dati errato :non sarai in grado di utilizzare il campo nel modo che ti aspetteresti. Ad esempio, avere purchase_time come una stringa e non un tipo di dati temporali significa che non sarai in grado di eseguire operazioni temporali (come calcolare quanto tempo è trascorso dall'acquisto) sul campo
  2. troppo vincolato :MySQL darà errori quando si tenta di inserire valori maggiori di quelli consentiti dal tipo di dati. Ad esempio, riceveremo errori se abbiamo una vendita con un importo_pagato pari o superiore a $ 100,00 o un agent_comment che supera i 65 caratteri
  3. troppo conservatore :anche se nulla si interromperà dall'essere troppo conservativo con i tipi di dati, sprecherai spazio di archiviazione. Con i nostri dati di esempio, potremmo risparmiare il 15% di spazio di archiviazione utilizzando le opzioni preferite meno conservative

Per quanto intelligenti siano i database moderni, i proprietari dei dati sanno ancora meglio che tipo di dati vengono archiviati e quali sono i possibili valori che i dati possono assumere nel prossimo futuro. Quindi devi specificare attentamente i tipi di dati per ciascuno dei tuoi campi.

La documentazione sui tipi di dati per diversi database comuni è fornita qui:

  • MySQL
  • Amazon Redshift
  • Alveare di Apache
  • Teradati

Conclusione

Affinché il database funzioni correttamente e sia il più ottimizzato possibile, è importante selezionare attentamente i tipi di dati per ciascun campo delle tabelle.