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

Er det dårligt design at bruge arrays i en database?

Kort svar til titlen :Nej

Lidt længere svar :

Du bør lære at bruge arrays, når det er relevant. Arrays er ikke i sig selv dårligt design, de er lige så atomare som et karaktervarierende felt (array af tegn, ikke?), og de eksisterer for at gøre vores liv lettere og vores databaser hurtigere og lettere. Der er problemer med hensyn til portabilitet (de fleste databasesystemer understøtter ikke arrays eller gør det på en anden måde end Postgres)

Eksempel:

Du har en blog med indlæg og tags, og hvert indlæg kan have 0 eller flere tags. Det første, der kommer til at tænke på, er at lave en anden tabel med to kolonner postid og tagid og tildel taggene i den tabel.

Hvis vi har brug for at søge gennem indlæg med tagid, så er den ekstra tabel nødvendig (selvfølgelig med passende indeks).

Men hvis vi kun ønsker, at tag-informationen skal vises som indlæggets ekstra info, så kan vi nemt tilføje en heltal array-kolonne i tabellen over indlæg og udtrække informationen derfra. Dette kan stadig gøres med den ekstra tabel, men brug af et array reducerer størrelsen af ​​databasen (ingen nødvendige ekstra tabeller eller ekstra rækker) og forenkler forespørgslen ved at lade os udføre vores udvalgte forespørgsler med at slutte sig til en tabel mindre og virker lettere at forstå af et menneskeligt øje (den sidste del er i beskuerens øje, men jeg tror, ​​jeg taler for et flertal her). Hvis vores tags er forudindlæst, er ikke en eneste join nødvendig.

Eksemplet kan være dårligt, men det er det første, der kom til at tænke på.

Konklusion :

Arrays er ikke nødvendige. De kan være skadelige, hvis du bruger dem forkert. Du kan leve uden dem og have en fantastisk, hurtig og optimeret database. Når du overvejer portabilitet (f.eks. at omskrive dit system til at fungere med andre databaser), så må du ikke bruge arrays.

Hvis du er sikker på, at du vil holde dig til Postgres, kan du trygt bruge arrays, hvor du finder passende. De findes af en grund og er hverken dårligt design eller ikke-kompatible. Når du bruger dem de rigtige steder, kan de hjælpe lidt med enkelhed af databasestrukturer og din kode, samt plads- og hastighedsoptimering. Det er alt.



  1. Returner sæt af post (virtuel tabel) fra funktion

  2. Henter den sidste post i hver gruppe - MySQL

  3. SQLite Opret tabel

  4. Er der nogen forskel mellem !=og <> i Oracle Sql?