Vraag Postgresql enum wat zijn de voor- en nadelen?


Waar ik werk, gebruiken we een postgres-database (binnenkort 8.3 om te migreren naar 8.4). Er is momenteel een klein debat over het gebruik van enums in de database. Persoonlijk vind ik het db enum-type niet leuk. Het plaatst onder andere toepassingslogica in de database en creëert een mogelijkheid voor een mismatch tussen code en gegevens.

Ik vroeg me af wat nu precies de voordelen van postgres-enums zijn (naast readablity) en wat zijn de nadelen?


15
2018-02-23 12:42


oorsprong


antwoorden:


De voordelen van enums zijn:

  • Prestaties zijn beter. U kunt gewoon weergeven wat u uit de kerntabel krijgt in plaats van een afzonderlijke opzoektabel die een code omzet in een waarde of app-logica heeft die een code omzet naar een waarde. Dit kan met name handig zijn in datawarehouse-applicaties.
  • Adhoc SQL is eenvoudiger te schrijven

De nadelen zijn:

  • Het encoderen van weergavewaarden in uw database ddl is een slechte vorm. Als u de enum-waarde in een andere weergavewaarde in uw app-code vertaalt, hebt u veel van de voordelen van het gebruik van enums verloren.
  • Het toevoegen van waarden vereist DDL-wijzigingen
  • Maakt taallokalisatie moeilijk
  • Databaseportabiliteit is verminderd

24
2018-02-23 22:21



Enums combineren de voordelen van ints met de voordelen van strings: ze zijn klein en snel zoals ints, leesbaar als strings, en hebben het extra voordeel dat ze veilig zijn (je kunt een enum niet verkeerd spellen).

Als je je echter niets aantrekt van de leesbaarheid, is een int zo goed als een opsomming.


2
2018-02-23 13:18



Als voordeel heeft u ook DB-controle, dat niets anders de waarde van de opsom niet in de kolom kon worden vastgelegd. Het grote nadeel voor mij was dat die opsomming alleen kon worden gewijzigd door het toevoegen van waarde aan het einde, maar sinds Postgres 9.1 is het in het verleden: https://stackoverflow.com/a/7834949/548473


0
2017-11-11 18:06



Punt is dat als toepassingen DDL mogen doen, ze eerder blokkeringen of conflicten veroorzaken. DDL kan het beste offline gedaan worden, d.w.z. in de modus voor één gebruiker.


-1
2018-06-14 15:03