Concevoir l'architecture de base de données SaaS

Les mauvaises décisions de base de données lors de votre première semaine vous hanteront pendant des années.

Un fondateur de SaaS a besoin d'un schéma qui gère le multi-tenancy, la facturation et la croissance. Si vous vous trompez, vous devrez réécrire l'intégralité de votre système dans six mois.

Voici comment construire un schéma prêt pour la production.

  1. Choisissez votre stratégie de tenant

Vous devez isoler les données entre les clients.

• Au niveau de la ligne (Base de données partagée) : Faible complexité. Idéal pour la plupart des startups. Utilisez un filtre WHERE organization_id = ? sur chaque requête. • Au niveau du schéma (Schémas séparés) : Complexité moyenne. Adapté aux besoins réglementaires. • Au niveau de la base de données (Bases de données séparées) : Complexité élevée. Idéal pour les clients grands comptes.

Pour 90 % des nouveaux produits, le multi-tenancy au niveau de la ligne est le bon choix.

  1. La hiérarchie correcte des entités

Ne facturez pas les utilisateurs directement. Les utilisateurs vont et viennent. Les organisations restent.

La hiérarchie devrait ressembler à ceci : Utilisateur ── MemberOf ── Organisation ── Abonnement ── Facture

• Utilisateurs : Conservez cette table uniquement pour l'identité. Utilisez des UUID pour prévenir les attaques. • Organisations : C'est votre limite de tenant. Liez toujours les abonnements à l'organisation. • Adhésions (Memberships) : Utilisez une table de jointure pour lier les utilisateurs aux organisations. Stockez les rôles ici, et non dans la table utilisateur.

  1. Facturation et abonnements

N'utilisez jamais un simple booléen comme is_active. Cela crée des données désordonnées.

Utilisez une machine à états pour les abonnements. Les états courants incluent : • trialingactivepast_duecanceledexpiredincomplete

Cela vous permet de gérer les échecs de paiement et les périodes de grâce sans corrections manuelles de données.

  1. Argent et facturation

Suivez ces règles strictes pour éviter les erreurs financières :

• N'utilisez jamais FLOAT ou REAL pour l'argent. Utilisez des entiers pour stocker les centimes. Par exemple, 29,99 $ devient 2999. • Utilisez une table invoice_line_items. Vous en aurez besoin pour les rapports fiscaux et les remboursements. • Utilisez une table usage_events si vous facturez en fonction de l'utilisation du produit par le client.

  1. Conseils de performance

• Indexez vos clés étrangères. • Indexez vos colonnes de statut. • Indexez vos colonnes d'horodatage (timestamp). • Évitez les requêtes N+1. Utilisez des JOIN pour récupérer les données de l'organisation et de l'abonnement en un seul appel.

Un bon schéma est invisible lorsqu'il fonctionne. Il est catastrophique lorsqu'il échoue.

Construisez pour l'organisation. Utilisez des machines à états. Stockez l'argent sous forme d'entiers.

Source: https://dev.to/feidou/designing-saas-database-architecture-users-organizations-subscriptions-and-billing-df

Communauté d'apprentissage optionnelle : https://t.me/GyaanSetuAi