diff --git a/source/dev-vitis/bdd/generic.md b/source/dev-vitis/bdd/generic.md
new file mode 100644
index 0000000000000000000000000000000000000000..35a915b5922a3c47926992b52b6a888d916ebd84
--- /dev/null
+++ b/source/dev-vitis/bdd/generic.md
@@ -0,0 +1,114 @@
+# Concepts de base des bases de données
+
+## Qu'est-ce qu'une base de données ?
+
+Une base de données est une collection organisée de données interdépendantes, stockées de manière structurée et accessible. Elle permet de stocker, gérer, organiser et récupérer efficacement des informations. Une base de données est composée de tables qui regroupent des enregistrements contenant des données spécifiques. Chaque table est constituée de colonnes (aussi appelées champs) qui définissent les types de données stockées, et chaque enregistrement est représenté par une ligne. Les bases de données relationnelles, telles que MySQL, Oracle et PostgreSQL, utilisent le modèle relationnel, dans lequel les données sont organisées en tables interconnectées par des relations basées sur des clés. Ce modèle offre une structure solide pour la gestion des données, garantissant l'intégrité et la cohérence.
+
+Cependant, avec l'émergence de nouvelles exigences en termes de volume de données, de flexibilité et de performances, les bases de données NoSQL (Not Only SQL) ont gagné en popularité. Contrairement aux bases de données relationnelles, les bases de données NoSQL, telles que MongoDB, Cassandra et Redis, adoptent des modèles de données non relationnels et évolutifs. Elles offrent une grande flexibilité pour stocker et traiter des données non structurées, semi-structurées et en constante évolution, comme les données JSON ou les données provenant de capteurs IoT. Les bases de données NoSQL sont conçues pour gérer des charges de travail distribuées à grande échelle, offrant une évolutivité horizontale et une haute disponibilité.
+
+Le choix entre une base de données relationnelle et une base de données NoSQL dépend des besoins spécifiques de votre application. Les bases de données relationnelles sont idéales pour les applications nécessitant une structure de données rigide et une intégrité transactionnelle, comme les systèmes de gestion d'entreprise. Les bases de données NoSQL conviennent davantage aux applications nécessitant une évolutivité horizontale, une flexibilité de schéma et une gestion de données non structurées, comme les applications Web en temps réel et les plateformes d'analyse de Big Data.
+
+## Pourquoi utiliser PostgreSQL ?
+
+PostgreSQL est un système de gestion de base de données relationnelle open source qui offre de nombreux avantages par rapport à d'autres technologies relationnelles. L'un des points forts de PostgreSQL réside dans la diversité dans ses extensions, qui étend ses fonctionnalités pour prendre en charge les données géospatiales notamment.
+
+PostgreSQL présente plusieurs autres avantages significatifs. Tout d'abord, sa grande conformité aux normes SQL garantit une compatibilité élevée avec les applications existantes et facilite l'interchangeabilité avec d'autres SGBDR. Cela permet aux utilisateurs de migrer facilement depuis d'autres systèmes ou de développer des applications multiplateformes sans rencontrer de problèmes majeurs de compatibilité, via l'utilisation d'une couche d'abstraction comme DBAL en PHP par exemple.
+
+De plus, PostgreSQL se distingue par sa robustesse et sa fiabilité. Il est réputé pour sa capacité à gérer des charges de travail intensives et de grandes quantités de données, tout en maintenant des performances élevées. Sa conception modulaire permet une extensibilité facile, ce qui signifie que de nouvelles fonctionnalités peuvent être ajoutées à la base de données sans compromettre sa stabilité.
+
+Un autre avantage clé de PostgreSQL est sa riche gamme de fonctionnalités avancées. Outre la prise en charge des données géospatiales avec PostGIS, PostgreSQL offre des fonctionnalités telles que les transactions ACID (Atomicité, Cohérence, Isolation, Durabilité), les vues matérialisées, les déclencheurs, les procédures stockées et les index avancés. Ces fonctionnalités permettent aux développeurs de créer des applications sophistiquées et d'optimiser les performances de leurs requêtes.
+
+Enfin, PostgreSQL bénéficie d'une communauté active et engagée. La communauté PostgreSQL travaille constamment à l'amélioration du système, à la correction des bogues, à l'ajout de nouvelles fonctionnalités et à la fourniture d'un support solide. Cette communauté dynamique offre un accès à une vaste base de connaissances, des forums d'entraide et une documentation complète, ce qui facilite l'apprentissage et le développement avec PostgreSQL.
+
+Dans l'ensemble, PostgreSQL se distingue par sa polyvalence, sa fiabilité, ses fonctionnalités avancées et son support géospatial avec PostGIS. Ces avantages font de PostgreSQL un choix solide pour les applications nécessitant une gestion de données relationnelle robuste et une prise en charge des données géographiques.
+
+## Terminologie courante
+
+- Table : Une table est une structure fondamentale dans une base de données relationnelle. Elle est composée de lignes et de colonnes et représente une entité ou un concept spécifique. Par exemple, une table "Utilisateurs" peut contenir des informations telles que les noms, les adresses e-mail et les identifiants des utilisateurs.
+
+- Colonnes : Les colonnes, également appelées attributs ou champs, représentent les différentes caractéristiques ou propriétés d'une table. Chaque colonne a un nom unique et un type de données spécifique qui définit le type de valeurs qu'elle peut contenir. Par exemple, une table "Produits" peut avoir des colonnes telles que "Nom", "Prix" et "Quantité".
+
+- Lignes : Les lignes, également appelées enregistrements ou tuples, représentent des instances spécifiques de données dans une table. Chaque ligne contient les valeurs correspondantes pour chaque colonne de la table. Par exemple, une ligne dans la table "Utilisateurs" peut contenir les informations d'un utilisateur spécifique, telles que son nom, son adresse e-mail et son identifiant.
+
+- Clé primaire : Une clé primaire est une colonne ou un ensemble de colonnes qui identifie de manière unique chaque enregistrement dans une table. Elle garantit l'unicité des données dans la table et permet de référencer facilement un enregistrement spécifique. Par exemple, une clé primaire dans la table "Utilisateurs" peut être l'identifiant unique attribué à chaque utilisateur.
+
+- Clé étrangère : Une clé étrangère est une colonne ou un ensemble de colonnes dans une table qui fait référence à la clé primaire d'une autre table. Elle établit une relation entre les enregistrements de deux tables différentes. Par exemple, une table "Commandes" peut avoir une clé étrangère qui fait référence à la clé primaire de la table "Utilisateurs", liant ainsi les commandes à leurs utilisateurs associés.
+
+- Index : Un index est une structure de données utilisée pour accélérer la recherche et l'accès aux données dans une table. Il est créé sur une ou plusieurs colonnes spécifiques et permet de localiser rapidement les enregistrements correspondant à certaines valeurs. Les index améliorent les performances des requêtes en réduisant le temps de recherche.
+
+- Schéma : Un schéma est une collection logique d'objets de base de données, tels que des tables, des vues, des procédures stockées, etc. Il permet d'organiser et de regrouper les objets connexes au sein d'une base de données. Les schémas aident à maintenir la séparation et la cohérence des données dans un environnement de base de données complexe.
+
+- Trigger (Déclencheur) : Un trigger est un objet de base de données qui est associé à une table et est déclenché automatiquement lorsque certaines actions sont effectuées sur cette table, telles que l'insertion, la mise à jour ou la suppression de données. Les triggers permettent d'effectuer des actions spécifiques avant ou après l'exécution des opérations sur la table, offrant ainsi une flexibilité pour l'automatisation des tâches et l'application de règles métier.
+
+- Séquence : Une séquence est un objet de base de données qui génère automatiquement une série de valeurs numériques dans un ordre croissant ou décroissant. Les séquences sont souvent utilisées pour générer des identifiants uniques pour les tables, garantissant ainsi l'unicité des valeurs dans une colonne spécifique. Elles sont couramment utilisées dans les bases de données relationnelles pour gérer les valeurs d'auto-incrémentation.
+
+- Vue : Une vue est une représentation virtuelle d'une ou plusieurs tables dans une base de données. Elle permet de sélectionner et de présenter un sous-ensemble des données d'origine selon des critères spécifiques, sans modifier les données réelles. Les vues offrent une couche d'abstraction et facilitent la simplification des requêtes complexes en fournissant des vues pré-définies et filtrées des données.
+
+- Vue matérialisée : Une vue matérialisée est une vue qui est physiquement stockée en tant que table dans la base de données. Contrairement aux vues classiques, qui sont générées à la volée lors de l'exécution des requêtes, les vues matérialisées sont précalculées et mises à jour périodiquement pour refléter les modifications des données sous-jacentes. Cela permet d'améliorer les performances des requêtes répétitives et de réduire la charge sur la base de données.
+
+- Rôle de connexion : Un rôle de connexion, également appelé utilisateur, est un compte qui permet à un utilisateur d'accéder à une base de données et d'effectuer des opérations sur les objets de cette base de données. Les rôles de connexion ont des privilèges et des autorisations qui définissent ce que l'utilisateur peut faire dans la base de données, tels que la lecture, l'écriture, la création ou la suppression de données.
+
+- Rôlegroup : Un rôlegroup est un groupe de rôles de connexion qui permet de regrouper plusieurs rôles en une seule entité logique. Les rôlegroups facilitent la gestion des autorisations en attribuant des privilèges communs à un groupe de rôles, plutôt que de les définir individuellement pour chaque rôle de connexion. Cela simplifie la gestion des autorisations et facilite les modifications globales des privilèges pour un ensemble de rôles.
+
+- Fonction : Une fonction, également appelée procédure stockée, est un bloc de code réutilisable qui effectue une tâche spécifique dans une base de données. Les fonctions sont utilisées pour encapsuler des séquences d'instructions SQL et de logique de programmation dans un seul objet. Elles peuvent être appelées à partir de requêtes SQL ou d'autres procédures stockées pour effectuer des calculs, des manipulations de données complexes ou des opérations personnalisées.
+
+# Conception d'une base de données
+
+## Étapes de la conception
+
+La conception du modèle de données consiste en plusieurs étapes essentielles qui permettent de définir la structure, les relations et les contraintes de la base de données. La première étape est l'identification des entités clés et de leurs attributs. Une entité représente un objet ou un concept dans le monde réel, tandis que ses attributs décrivent les caractéristiques de cette entité. Par exemple, un client nous contacte pour réaliser une application de gestion de patrimoine, il faut lister les objet qui liste ce patrimoine, puis comprendre les relation entre les objets ...
+
+Une fois les entités et leurs attributs identifiés, la prochaine étape est de définir les relations entre les entités. Les relations sont des associations entre les entités qui reflètent les dépendances et les liens logiques. Il existe différents types de relations, tels que les relations un-à-un (OneToOne, 1-1), un-à-plusieurs (OneToMany, 1-n) et plusieurs-à-plusieurs (ManyToMany, n-n). Par exemple, une relation 1-n peut exister entre les clients et les commandes, où un client peut passer plusieurs commandes.
+
+A ce stade là on peut commencer à passer d'une représentation UML grossière, un modèle plus concret sous pgModeler.
+
+Après avoir défini les entités et les relations, la troisième étape est de normaliser le modèle de données. La normalisation est un processus qui vise à éliminer les redondances et à garantir l'intégrité des données en les structurant de manière optimale. Cela implique de diviser les entités en tables distinctes, d'identifier les clés primaires et étrangères, et de s'assurer que les dépendances fonctionnelles entre les attributs sont correctement gérées.
+
+Une fois le modèle de données normalisé, la quatrième étape consiste à ajouter des contraintes d'intégrité pour garantir la cohérence et la validité des données. Les contraintes peuvent inclure des règles telles que les valeurs uniques, les valeurs obligatoires, les contraintes de plage et les contraintes de référence. Par exemple, une contrainte de clé primaire garantit que chaque enregistrement dans une table est unique et identifiable, tandis qu'une contrainte de clé étrangère assure l'intégrité des relations entre les tables.
+
+A ce moment là on peut commencer à développer, pour construire les vues en fonction des besoin de l'application.
+
+Enfin, la dernière étape de la conception du modèle de données est la création du schéma physique. Le schéma physique définit la manière dont le modèle de données est implémenté dans un système de gestion de base de données spécifique. Cela implique de définir les types de données, les index, les vues et les autres structures nécessaires pour stocker et manipuler les données de manière efficace.
+
+En résumé, les étapes de conception du modèle de données comprennent l'identification des entités et de leurs attributs, la définition des relations, la normalisation, l'ajout de contraintes d'intégrité et la création du schéma physique. Une conception soigneuse du modèle de données est essentielle pour garantir une base de données bien structurée, cohérente et performante.
+
+A aucun moment je ne parle de gestion de droit dans ces étapes, mais c'est clairement un point critique de la phase de conception. Il est primordiale d'ouvrir les droit au fur et à mesure du développement, en ouvrant au minimum les accés aux différents rolegroupe.
+
+
+## Spécificité de Vitis par rapport à la modélisation des données
+
+Utilisation de colonnes de type timestamp with timezone pour stocker les dates.
+
+Favoriser les colonnes de type jsonb au type json classique.
+
+## Normalisation des données
+
+III. Manipulation des données
+   A. Langage de requête structuré (SQL)
+      1. Syntaxe de base
+      2. Sélection de données (SELECT)
+      3. Insertion, mise à jour et suppression de données (INSERT, UPDATE, DELETE)
+      4. Jointures de tables
+   B. Requêtes avancées
+      1. Agrégation de données
+      2. Sous-requêtes
+      3. Opérations sur ensembles (UNION, INTERSECT, EXCEPT)
+   C. Indexation des données
+   D. Transactions et contrôle de la concurrence
+
+IV. Gestion de la base de données
+   A. Création de la base de données
+   B. Sécurité et contrôle d'accès
+   C. Sauvegarde et restauration des données
+   D. Maintenance et optimisation des performances
+
+V. Intégration et échange de données
+   A. Importation et exportation de données
+   B. Intégration avec d'autres systèmes (API, ETL, etc.)
+   C. Synchronisation des données
+
+VI. Bonnes pratiques et astuces
+   A. Optimisation des requêtes
+   B. Modélisation efficace des données
+   C. Sécurité des données
+   D. Évolutivité et extensibilité
\ No newline at end of file
diff --git a/source/dev-vitis/bdd/images/carinalite_vitis.png b/source/dev-vitis/bdd/images/carinalite_vitis.png
new file mode 100644
index 0000000000000000000000000000000000000000..d5f3074ca9c6ccf9b70cc0a9a1a6cc07e5e69a44
Binary files /dev/null and b/source/dev-vitis/bdd/images/carinalite_vitis.png differ