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

Sådan vælger du de rigtige datatyper

Da en typisk virksomheds mængde af data er vokset eksponentielt, er det blevet endnu mere kritisk at optimere datalagring. Størrelsen på dine data påvirker ikke kun lagerstørrelse og omkostninger, den påvirker også forespørgselsydeevne. En nøglefaktor til at bestemme størrelsen af ​​dine data er den datatype, du vælger. Denne vejledning vil forklare, hvordan du vælger de rigtige datatyper.

Hvad er datatyper?

Datatyper definere, hvilken type og række af data der kan gemmes i et givet felt (eller kolonne).

Overvej en salgstabel med disse eksempelregistreringer:

Hvert felt har sin egen type og række af værdier:

købstidspunkt :dato og tidspunkt for salgetsale_id :heltalsværdier, der stiger med én for hvert nyt salgcustomer_id :heltalsværdier, der stiger med én for hver ny kundevaluta :tekst altid med 3-tegns valutakodeamount_paid :monetære reelle numeriske værdier mellem 0,00 USD og 1.000,00 USDenhed :tekst, hvor værdierne kan være:'desktop', 'mobilapp' og 'mobilweb'har_rabat :boolesk, hvor indtastninger kan være TRUE eller FALSE noter :tekst, hvor indtastningen kan være lige så lang, som det er tilladt i vores agentinputværktøj (250 tegn)

Typen af ​​data (heltal, tekst, reelle tal osv...) og de mulige værdiintervaller (0 til 1.000; alle 3 tegn; osv...) svarer til specifikke database-datatyper .

Hvad er de mulige datatyper?

Forskellige databaser har forskellige datatyper tilgængelige, men de fleste passer ind i disse kategorier:

Numerisk:

  • heltal :for tal uden brøker. Kan have fortegn (tillad positive og negative værdier) eller uden fortegn (tillad kun positive tal). Almindeligvis brugt til ID-felter og tællinger af noget
  • decimal(x,y) :for tal med brøker, der kræver nøjagtig præcision. Kan have fortegn (tillad positive og negative værdier) eller uden fortegn (tillad kun positive tal). Almindeligvis brugt til monetære felter. Brugeren angiver antallet af betydende cifre tilladt samlet (x) og efter decimaltegnet (y) i parentes
  • float / fordobler :for tal med brøker, der ikke kræver nøjagtig præcision. Kan have fortegn (tillad positive og negative værdier) eller uden fortegn (tillad kun positive tal). Almindeligvis brugt til alle reelle tal undtagen pengefelter

Dato/tid:

dato :for datoværdier

  • tid :for tidsværdier
  • tidsstempel/datotid :for dato- og tidsværdier

Tekst:

  • tegn(n) :for tegnstrenge med fast længde, hvor værdien i parentesen dikterer den faste størrelse af hver post
  • varchar(n) :for tegnstrenge med variabel længde, hvor værdien i parentes dikterer den maksimalt accepterede størrelse for hver indtastning

Boolesk:

  • boolesk :for booleske (sand/falsk) værdier. Nogle databaser (som MySQL) har ikke boolesk datatype og konverterer i stedet booleske værdier til heltal (1=TRUE, 0 =FALSE)

De fleste databaser tilbyder størrelsesvariationer for hver type. For eksempel giver MySQL disse mulige heltalsdatatyper:

Sådan vælger du de rigtige datatyper

Den grundlæggende strategi for at vælge den bedste datatype er at vælge den mindste datatype, der matcher den type data, du har, og som giver mulighed for alle de mulige værdier af dine data.

For eksempel customer_id i vores eksempelsalgstabel er et helt tal, der starter med 0. I dag har vores fiktive virksomhed kun 15.000 kunder. Ved at bruge MySQL-heltalsdatatypetabellen fra det foregående afsnit, kan vi blive fristet til at vælge SMALLINT usigneret som datatypen, da det er den mindste datatype, der accepterer vores nuværende heltalværdier fra 0 til 15.000. Vi forventer dog at nå op på 100.000 kunder i løbet af de næste 6-12 måneder. Når vi går over 65.535, er SMALLINT vil ikke længere være tilstrækkeligt. Et bedre valg er således MEDIUMINT usigneret, hvilket skulle dække os i de næste mange år.

Du kan lade din database vælge datatyper for dig, når du opretter din tabel med eksempelposter. Dette vil dog sjældent give dig det bedste valg af datatype. For eksempel giver det flere problemer at lade MySQL vælge datatyperne for en salgstabel med de tidligere viste eksempelværdier.

De problemer, vi støder på med de datatyper, som MySQL automatisk er valgt, er:

  1. forkert datatype :du vil ikke være i stand til at bruge feltet på den måde, du ville forvente. For eksempel at have purchase_time som en streng og ikke en tidsdatatype betyder, at du ikke vil være i stand til at udføre tidsoperationer (såsom at beregne, hvor lang tid det er siden købet) på marken
  2. for begrænset :MySQL vil give fejl, når du forsøger at indtaste værdier, der er større end hvad datatypen tillader. For eksempel får vi fejl, hvis vi har et salg med et beløb_paid på $100.00 eller mere eller en agent_comment, der er længere end 65 tegn
  3. for konservativ :Mens intet vil bryde fra at være for konservativt med datatyper, vil du spilde lagerplads. Med vores eksempeldata kunne vi spare 15 % lagerplads ved at bruge de mindre konservative foretrukne muligheder

Hvor smarte moderne databaser end er, ved ejerne af dataene stadig bedst, hvilken slags data der er gemt, og hvilke mulige værdier dataene kan tage inden for en overskuelig fremtid. Så du skal nøje specificere datatyperne for hvert af dine felter.

Dokumentation om datatyper for forskellige almindelige databaser findes her:

  • MySQL
  • Amazon Redshift
  • Apache Hive
  • Teradata

Konklusion

For at din database skal fungere korrekt og være så optimeret som muligt, er det vigtigt omhyggeligt at vælge datatyperne for hvert felt i dine tabeller.


  1. Ignorerer tidszoner helt i Rails og PostgreSQL

  2. Er MS-SQL OG/ELLER betinget (udfør kortslutningsevaluering)?

  3. SQLite - Slet data

  4. LINQ til Java-værktøj