sql >> Database >  >> RDS >> PostgreSQL

Is het een slecht ontwerp om arrays in een database te gebruiken?

Kort antwoord op de titel :Nee

Een wat langer antwoord :

Je moet leren om arrays te gebruiken wanneer dat van toepassing is. Arrays zijn zelf geen slecht ontwerp, ze zijn zo atomair als een karaktervarierend veld (array van karakters, niet?) en ze bestaan ​​om ons leven gemakkelijker te maken en onze databases sneller en lichter. Er zijn problemen met overdraagbaarheid (de meeste databasesystemen ondersteunen geen arrays, of doen dit op een andere manier dan Postgres)

Voorbeeld:

Je hebt een blog met berichten en tags, en elk bericht kan 0 of meer tags hebben. Het eerste dat in je opkomt is om een ​​andere tabel te maken met twee kolommen postid en tagid en wijs de tags in die tabel toe.

Als we berichten met tagid moeten doorzoeken, dan is de extra tabel nodig (met de juiste indexen natuurlijk).

Maar als we alleen willen dat de tag-informatie wordt weergegeven als de extra info van het bericht, dan kunnen we eenvoudig een integer-arraykolom toevoegen aan de tabel met berichten en de informatie daaruit halen. Dit kan nog steeds worden gedaan met de extra tabel, maar het gebruik van een array verkleint de database (geen extra tabellen of extra rijen nodig) en vereenvoudigt de query doordat we onze geselecteerde query's kunnen uitvoeren door één tabel minder samen te voegen en lijkt gemakkelijker te begrijpen door menselijk oog (het laatste deel is in the eye of the beholder, maar ik denk dat ik hier voor een meerderheid spreek). Als onze tags voorgeladen zijn, is er niet eens één join nodig.

Het voorbeeld is misschien slecht, maar het is het eerste dat in me opkomt.

Conclusie :

Arrays zijn niet nodig. Ze kunnen schadelijk zijn als je ze verkeerd gebruikt. U kunt zonder hen leven en beschikt over een geweldige, snelle en geoptimaliseerde database. Als u overdraagbaarheid overweegt (bijv. uw systeem herschrijven om met andere databanken te werken), dan mag u geen arrays gebruiken.

Als u zeker weet dat u bij Postgres blijft, kunt u veilig arrays gebruiken waar u dat nodig vindt. Ze bestaan ​​met een reden en zijn niet slecht ontworpen of niet-conform. Als u ze op de juiste plaatsen gebruikt, kunnen ze een beetje helpen met de eenvoud van databasestructuren en uw code, evenals met ruimte- en snelheidsoptimalisatie. Dat is alles.



  1. Update-instructie met inner join op Oracle

  2. Hoe van database te wisselen met PostgreSQL

  3. Gebruik meerdere conflict_targets in ON CONFLICT-clausule

  4. Index voor het vinden van een element in een JSON-array