Kort svar på rubriken :Nej
Lite längre svar :
Du bör lära dig att använda arrayer när det är lämpligt. Arrayer är inte dålig design i sig, de är lika atomära som ett karaktärsvarierande fält (array av tecken, eller hur?) och de finns för att göra våra liv enklare och våra databaser snabbare och lättare. Det finns problem med tanke på portabilitet (de flesta databassystem stöder inte arrayer, eller gör det på ett annat sätt än Postgres)
Exempel:
Du har en blogg med inlägg och taggar, och varje inlägg kan ha 0 eller fler taggar. Det första som kommer att tänka på är att göra en annan tabell med två kolumner postid
och tagid
och tilldela taggarna i den tabellen.
Om vi behöver söka igenom inlägg med tagid är den extra tabellen nödvändig (med lämpliga index förstås).
Men om vi bara vill att tagginformationen ska visas som inläggets extra info, så kan vi enkelt lägga till en heltalsmatriskolumn i tabellen över inlägg och extrahera informationen därifrån. Detta kan fortfarande göras med den extra tabellen, men att använda en array minskar storleken på databasen (inga extra tabeller eller extra rader behövs) och förenklar frågan genom att låta oss köra våra urvalsfrågor genom att ansluta en tabell mindre och verkar lättare att förstå av mänskligt öga (den sista delen är i betraktarens öga, men jag tror att jag talar för en majoritet här). Om våra taggar är förladdade behövs inte ens en anslutning.
Exemplet kan vara dåligt men det är det första som kom att tänka på.
Slutsats :
Arrayer är inte nödvändiga. De kan vara skadliga om du använder dem fel. Du kan leva utan dem och ha en bra, snabb och optimerad databas. När du överväger portabilitet (t.ex. att skriva om ditt system för att fungera med andra databaser) får du inte använda arrayer.
Om du är säker på att du kommer att hålla fast vid Postgres, kan du säkert använda arrayer där du finner lämpligt. De finns av en anledning och är varken dålig design eller icke-kompatibla. När du använder dem på rätt ställen kan de hjälpa lite med enkelheten i databasstrukturer och din kod, samt utrymmes- och hastighetsoptimering. Det är allt.