Aller au contenu principal

Bases de données

Nous utilisons principalement PostgreSQL comme moteur de BDD relationnelle.

La qualité du modèle de données est cruciale dans le développement :

  • simplification des applications qui vont exploiter ces données
  • communication avec le reste de l'équipe (une sémantique commune)
  • performance des requêtes
  • intégrité des données
  • sécurité...

Il est important de prendre le temps de concevoir un modèle de données cohérent et scalable que vous pourrez partager facilement avec les product owners (métier) et faire évoluer ensemble.

L'équipe SRE est à votre disposition pour vous aider dans cette démarche.

Recommandations

  • Les ORMs ne sont pas recommandés, y préférrer des query builders.
  • En JS/TS, utiliser la lib Postgres.js si possible
  • Utiliser un linter de tag SQL eslint-plugin-sql-pretty
  • Utiliser un outil qui gère les migrations (ex: postgres-shift, hasura)
  • Créer des fichiers de seed pour vos environnements de test/review
  • Maintenir un diagramme du modèle dans le repo, quelque outils:
    • draw.io language standard ouvert, bien pour démarrer la réflexion from sratch sur le modèle de données au démarrage du projet avant même de commencer à coder
    • DBeaver outil d'administration complet de base de données, permettant d'exporter un ER modèle depuis une base de données existante pour pouvoir facilement retravailler dessus
    • yEd gère le format de diagram exporté par DBeaver
    • pg_diagram

Debug

PgHero

Vous pouvez lancer localement PGHero et le connecter à votre base de données:

  • Ouvrir un port localement avec un port-forward ou teleport
  • Récupérer le secret pg-app dans votre namespace
  • Lancer PGHero avec Docker :
docker run -ti -e DATABASE_URL='postgresql://XXXX?sslmode=disable' -p 8080:8080 --net=host ankane/pghero

Puis ouvrir http://127.0.0.1:8080

Hasura

hasura est un composant battle-testé à la fabrique, qui se branche facilement sur votre base PostgreSQL.

Il permet d'exposer rapidement (low-code) une API GraphQL avec des modèles, migrations, souscriptions, RBAC...

Conventions

  • SQL Style guide
  • Positionner le diagramme dans docs/db-model.png sur votre repo
  • yarn seed pour executer les seeds

Chiffrement

[todo]

Skill up