Chapitre 9

Persistance des données

Apprenez à utiliser l’IA pour améliorer l’efficacité du développement et de la gestion des bases de données, et maîtrisez les bonnes pratiques telles que la conception de bases de données assistée par l’IA, l’optimisation des requêtes et la migration des données.

Apprendre la persistance des données pilotée par l’IA avec Sequential Thinking

Les applications de l’IA dans les bases de données impliquent plusieurs aspects, en utilisantMéthodes de pensée structuréePeut vous aider à maîtriser systématiquement :

1
Aperçu des types de bases de données
Comprendre rapidement les bases de données relationnelles, non relationnelles et distribuées
2
Conception de base de données assistée par IA
Génération de modèles de données, conception de schémas, conventions de nommage
3
Optimisation des requêtes assistée par IA
Analyse des requêtes lentes, optimisation SQL, recommandations d’index
4
Gestion des données assistée par l’IA
Génération de scripts de migration, validation des données, optimisation des performances
5
Exploitation de bases de données pilotée par l’IA
Surveillance des alertes, réglage automatique, diagnostic des pannes

Aperçu des types de bases de données

Comprendre rapidement trois types de bases de données et acquérir des connaissances de base pour la pratique de l’IA.

Base de données relationnelle (SQL)

Représentant:PostgreSQL、MySQL、SQLite

Caractéristiques: Transactions ACID, données structurées, requêtes complexes

Applicable: Transactions requises, structure de données fixe, requêtes complexes

Bases de données non relationnelles (NoSQL)

Représentant: MongoDB (document), Redis (clé-valeur), Cassandra (colonnaire), Neo4j (graphe)

Caractéristiques: mode flexible, mise à l’échelle horizontale, lecture/écriture haute performance

Applicable: données semi-structurées, lectures/écritures à haute concurrence, schéma flexible

Base de données distribuée

Représentant:SelectDB(Apache Doris)、SAP HANA、ClickHouse、TiDB、Snowflake

Caractéristiques : prend en charge l’architecture distribuée, l’analyse de mégadonnées et la recherche vectorielle

Applicable: Analyse de big data, OLAP en temps réel, scénarios IA/ML, recherche vectorielle

Bonnes pratiques de l’IA dans les bases de données

Utiliser l’IA pour améliorer l’efficacité du développement et de la gestion des bases de données, avec des pratiques assistées par l’IA tout au long du processus, de la conception à l’exploitation.

Conception de base de données assistée par IA

Générer des modèles de données avec l’IA

Décrivez les besoins métier à l’IA, et elle générera un Prisma Schema ou une TypeORM Entity :

Modèle de prompt :

J’ai besoin de concevoir un modèle de base de données pour un système de blog, avec les exigences suivantes :
1. Table utilisateurs : id, nom d’utilisateur, e-mail, hachage du mot de passe, date de création
2. Table articles : id, titre, contenu, ID de l’auteur (clé étrangère), ID de catégorie (clé étrangère), date de création, date de mise à jour
3. Table catégories : id, nom, description
4. Table tags : id, nom
5. Les articles et les tags ont une relation plusieurs-à-plusieurs

Veuillez générer un schéma Prisma, incluant :
- Les types et contraintes de tous les champs
- Les relations entre les tables
- Les index nécessaires
- Le respect des bonnes pratiques Prisma

Exemple de schéma Prisma généré par l’IA

// prisma/schema.prisma
model User {
  id        String   @id @default(cuid())
  username  String   @unique
  email     String   @unique
  passwordHash String @map("password_hash")
  createdAt DateTime @default(now()) @map("created_at")
  updatedAt DateTime @updatedAt @map("updated_at")
  
  posts     Post[]
  
  @@map("users")
}

model Post {
  id          String   @id @default(cuid())
  title       String
  content     String   @db.Text
  authorId    String   @map("author_id")
  categoryId  String   @map("category_id")
  createdAt   DateTime @default(now()) @map("created_at")
  updatedAt   DateTime @updatedAt @map("updated_at")
  
  author      User     @relation(fields: [authorId], references: [id])
  category    Category @relation(fields: [categoryId], references: [id])
  tags        PostTag[]
  
  @@index([authorId])
  @@index([categoryId])
  @@map("posts")
}

model Category {
  id          String   @id @default(cuid())
  name        String   @unique
  description String?
  posts       Post[]
  
  @@map("categories")
}

model Tag {
  id    String    @id @default(cuid())
  name  String    @unique
  posts PostTag[]
  
  @@map("tags")
}

model PostTag {
  postId String @map("post_id")
  tagId  String @map("tag_id")
  
  post   Post   @relation(fields: [postId], references: [id])
  tag    Tag    @relation(fields: [tagId], references: [id])
  
  @@id([postId, tagId])
  @@map("post_tags")
}

Conventions de nommage assistées par l’IA

Utiliser l’IA pour garantir la cohérence des noms :

Prompt :

Vérifiez si la nomenclature du schéma Prisma suivant respecte les bonnes pratiques :
- Les noms de tables utilisent le pluriel
- Les noms de champs utilisent le camelCase
- Les champs de clé étrangère utilisent le format nom de table + Id
- Les champs de temps utilisent createdAt/updatedAt

[Collez le code du schéma]

Veuillez indiquer les éléments non conformes et proposer des modifications.

Bases de la conception de modèles de données

Conserver les concepts clés et fournir une base pour la pratique de l’IA. L’utilisation de l’IA permet de générer rapidement des modèles de données conformes aux bonnes pratiques.

Conception de la structure de la table

  • Normalisation: réduire la redondance des données et garantir la cohérence
  • Type de champ: Choisir le type de données approprié
  • Conventions de nommage : les noms de table et de champ suivent les conventions

Conception relationnelle

  • 1:1:Utilisateurs et profils utilisateur
  • Un-à-plusieurs : utilisateurs et commandes
  • Plusieurs-à-plusieurs: utilisateurs et rôles (via une table intermédiaire)

Fondamentaux des index

  • Index de clé primaire: Créé automatiquement, unique et non vide
  • Index normal: Accélérer les requêtes
  • Index composite: Index composite de plusieurs champs

Exemple de conception assistée par l’IA

Décrivez vos besoins métier à l’IA, et elle peut générer un modèle de données complet, incluant les structures de tables, les relations, les index et les contraintes. Consultez la section « Conception de base de données assistée par l’IA » ci-dessus pour un exemple détaillé.

Bases de la migration des données

Conserver le flux de migration principal et se concentrer sur la façon dont l’IA aide à la migration. L’IA permet de générer rapidement des scripts de migration et de vérifier les résultats.

Outils de migration

  • Prisma Migrate: Générer automatiquement des scripts de migration
  • TypeORM Migrations : Écrire manuellement la classe Migration
  • Flyway/Liquibase: outil de migration de l’écosystème Java

Stratégie de migration

  • Ajouter un champ : utiliser des valeurs par défaut ou autoriser NULL
  • Supprimer le champ: d’abord marquer comme obsolète, puis supprimer
  • Modifier le type du champ: Une transformation des données peut être nécessaire
  • Renommer les tables/champs : utiliser une méthode en deux étapes

Migration assistée par l’IA

L’IA peut générer des scripts de migration, vérifier les résultats de migration et optimiser les performances de migration. Consultez la section « Migration de données assistée par l’IA » ci-dessus pour des exemples détaillés et des modèles de Prompt.

Exemples pratiques

À travers des exemples de code réels, apprenez à utiliser l’IA pour améliorer l’efficacité du développement de bases de données.

Modèle de données généré par l’IA

Exemple complet de génération de Prisma Schema (Prompt + résultat) :

// 1. Fournir les exigences à l’IA
Prompt: "Concevez une base de données pour un système e-commerce, comprenant les tables utilisateurs, produits, commandes et lignes de commande..."

// 2. Schéma Prisma généré par l’IA
model User {
  id        String   @id @default(cuid())
  email     String   @unique
  name      String?
  orders    Order[]
  createdAt DateTime @default(now())
}

model Product {
  id          String      @id @default(cuid())
  name        String
  price       Decimal     @db.Decimal(10, 2)
  description String?
  orderItems  OrderItem[]
  createdAt   DateTime    @default(now())
}

model Order {
  id         String     @id @default(cuid())
  userId     String
  user       User       @relation(fields: [userId], references: [id])
  items      OrderItem[]
  total      Decimal    @db.Decimal(10, 2)
  status     String     @default("pending")
  createdAt  DateTime   @default(now())
  
  @@index([userId])
}

model OrderItem {
  id        String   @id @default(cuid())
  orderId   String
  productId String
  order     Order    @relation(fields: [orderId], references: [id])
  product   Product  @relation(fields: [productId], references: [id])
  quantity  Int
  price     Decimal  @db.Decimal(10, 2)
  
  @@index([orderId])
  @@index([productId])
}

Optimisation des requêtes par l’IA

Exemple d’analyse et d’optimisation des requêtes lentes (Prompt + comparaison avant/après) :

Avant optimisation (2,3 secondes)
SELECT u.*, p.*, c.name
FROM users u
LEFT JOIN posts p ON u.id = p.author_id
LEFT JOIN categories c ON p.category_id = c.id
WHERE u.created_at > '2024-01-01'
ORDER BY u.created_at DESC
LIMIT 20;
Après optimisation par l’IA (0,15 seconde)
-- Suggestion de l’IA : ajouter un index et optimiser JOIN
CREATE INDEX idx_users_created_at ON users(created_at DESC);

SELECT u.*, 
       (SELECT json_agg(p) FROM posts p WHERE p.author_id = u.id) as posts,
       c.name as category_name
FROM users u
LEFT JOIN categories c ON c.id = (
  SELECT category_id FROM posts 
  WHERE author_id = u.id 
  ORDER BY created_at DESC 
  LIMIT 1
)
WHERE u.created_at > '2024-01-01'
ORDER BY u.created_at DESC
LIMIT 20;

Implémentation NL2SQL

Exemple complet de conversion du langage naturel en SQL :

// Implémentation de la fonction NL2SQL
async function nl2sql(question: string, schema: DatabaseSchema): Promise<string> {
  const prompt = `Convertissez la question en SQL selon le schéma de la base de données :

Schema: ${JSON.stringify(schema)}
Question: ${question}

Ne retournez que le SQL, en utilisant des requêtes paramétrées.`;

  const sql = await callLLM(prompt);
  return validateAndSanitizeSQL(sql);
}

// Exemple d’utilisation
const sql = await nl2sql(
  "Interroger tous les articles créés au cours de la dernière semaine et leurs informations d’auteur",
  { tables: { users: [...], posts: [...] } }
);
// Retour : SELECT p.*, u.name as author_name 
//       FROM posts p 
//       JOIN users u ON p.author_id = u.id 
//       WHERE p.created_at > NOW() - INTERVAL '7 days'

Intégration de base de données vectorielle

Exemple de recherche vectorielle dans les scénarios RAG :

// Flux complet RAG
async function ragQuery(question: string) {
  // 1. Vectoriser la question
  const questionEmbedding = await getEmbedding(question);
  
  // 2. Recherche vectorielle (Pinecone)
  const results = await pineconeIndex.query({
    vector: questionEmbedding,
    topK: 5,
    includeMetadata: true
  });
  
  // 3. Construire le contexte
  const context = results.matches
    .map(m => m.metadata?.text)
    .join('\n\n');
  
  // 4. Le LLM génère une réponse
  const answer = await generateAnswer(question, context);
  
  return answer;
}

// Utilisation
const answer = await ragQuery("Qu’est-ce que Prisma ?");
// L’IA génère des réponses précises à partir des documents récupérés

Résultats d’apprentissage

À la fin de ce chapitre, vous pourrez :

  • 1Comprendre trois types de bases de données (relationnelles, non relationnelles, distribuées) et leurs cas d’usage
  • 2Maîtriser les méthodes de conception de bases de données assistée par l’IA (génération de schéma, conventions de nommage, choix des types de données)
  • 3Peut utiliser l'IA pour analyser et optimiser les requêtes lentes, en générant des recommandations d'index et des plans d'optimisation SQL
  • 4Comprendre les principes de mise en œuvre de NL2SQL et être capable de construire des systèmes de requête en langage naturel
  • 5Comprendre l’utilisation des bases de données vectorielles dans les scénarios RAG et être capable d’intégrer des fonctionnalités de recherche vectorielle
  • 6Peut être utilisé pour l’exploitation et la maintenance de bases de données assistées par l’IA (alertes de surveillance, prédiction des performances, diagnostic des pannes)
  • 7Maîtriser les méthodes de migration de données assistée par l’IA (générer des scripts de migration, vérifier les résultats de migration)