Kapitel 9

Datenpersistenz

Lernen Sie, wie Sie KI einsetzen, um die Effizienz von Datenbankentwicklung und -verwaltung zu steigern, und machen Sie sich mit Best Practices wie KI-gestütztem Datenbankdesign, Query-Optimierung und Datenmigration vertraut.

Lerne KI-gesteuerte Datenpersistenz mit Sequential Thinking

Der Einsatz von KI in Datenbanken umfasst mehrere Ebenen, unter Verwendung vonMethoden des strukturierten DenkensKann Ihnen helfen, systematisch Folgendes zu beherrschen:

1
Überblick über die Datenbanktypen
Relationale, nicht relationale und verteilte Datenbanken schnell verstehen
2
KI-gestütztes Datenbankdesign
Datenmodellgenerierung, Schema-Design, Namenskonventionen
3
KI-gestützte Abfrageoptimierung
Analyse langsamer Abfragen, SQL-Optimierung, Indexempfehlungen
4
KI-gestütztes Datenmanagement
Generierung von Migrationsskripten, Datenvalidierung, Leistungsoptimierung
5
KI-gesteuerte Datenbankverwaltung
Überwachungswarnungen, automatische Optimierung, Fehlerdiagnose

Überblick über die Datenbanktypen

Verstehen Sie schnell drei Arten von Datenbanken und erwerben Sie Hintergrundwissen für die KI-Praxis.

Relationale Datenbank (SQL)

Vertreter:PostgreSQL、MySQL、SQLite

Eigenschaften:ACID-Transaktionen, strukturierte Daten, komplexe Abfragen

Anwendbar: Transaktionen erforderlich, feste Datenstruktur, komplexe Abfragen

Nichtrelationale Datenbanken (NoSQL)

Vertreter: MongoDB (Dokument), Redis (Schlüssel-Wert), Cassandra (spaltenorientiert), Neo4j (Graph)

Eigenschaften:Flexibler Modus, horizontale Skalierung, leistungsstarkes Lesen/Schreiben

Anwendbar: halbstrukturierte Daten, hochparalleles Lesen/Schreiben, flexibles Schema

Verteilte Datenbank

Vertreter:SelectDB(Apache Doris)、SAP HANA、ClickHouse、TiDB、Snowflake

Eigenschaften:Unterstützt verteilte Architektur, Big-Data-Analyse und Vektorsuche

Anwendbar: Big-Data-Analyse, Echtzeit-OLAP, KI/ML-Szenarien, Vektorsuche

Best Practices für KI in Datenbanken

KI einsetzen, um die Effizienz der Datenbankentwicklung und -verwaltung zu steigern, mit KI-gestützten Praktiken über den gesamten Prozess von Design bis Betrieb.

KI-gestütztes Datenbankdesign

Datenmodelle mit KI generieren

Beschreiben Sie der KI die geschäftlichen Anforderungen, und sie generiert ein Prisma Schema oder eine TypeORM Entity:

Prompt-Vorlage:

Ich muss ein Datenbankmodell für ein Blogsystem entwerfen, das die folgenden Anforderungen enthält:
1. Benutzertabelle: id, Benutzername, E-Mail, Passwort-Hash, Erstellungszeit
2. Beitragstabelle: id, Titel, Inhalt, Autoren-ID (Fremdschlüssel), Kategorien-ID (Fremdschlüssel), Erstellungszeit, Aktualisierungszeit
3. Kategorietabelle: id, Name, Beschreibung
4. Tag-Tabelle: id, Name
5. Beiträge und Tags stehen in einer Viele-zu-viele-Beziehung

Bitte ein Prisma-Schema generieren, das Folgendes enthält:
- Typen und Einschränkungen aller Felder
- Beziehungen zwischen den Tabellen
- Notwendige Indizes
- Best Practices von Prisma befolgen

Beispiel für ein von KI generiertes Prisma-Schema

// 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")
}

KI-gestützte Namenskonventionen

KI einsetzen, um Namenskonsistenz sicherzustellen:

Prompt:

Prüfen Sie, ob die Benennung des folgenden Prisma-Schemas den Best Practices entspricht:
- Tabellennamen verwenden die Pluralform
- Feldnamen verwenden camelCase
- Fremdschlüsselfelder verwenden das Format Tabellenname + Id
- Zeitfelder verwenden createdAt/updatedAt

[Schema-Code einfügen]

Bitte weisen Sie auf die Stellen hin, die den Konventionen nicht entsprechen, und geben Sie Änderungsvorschläge an.

Grundlagen des Datenmodelldesigns

Kernkonzepte beibehalten und eine Grundlage für die KI-Praxis schaffen. Mit KI lassen sich schnell Datenmodelle generieren, die Best Practices entsprechen.

Tabellenstruktur-Design

  • Standardisierung: Datenredundanz verringern und Konsistenz sicherstellen
  • Feldtyp: Geeigneten Datentyp auswählen
  • Namenskonventionen: Tabellen- und Feldnamen folgen den Konventionen

Relationsdesign

  • 1:1:Benutzer und Benutzerprofile
  • Eins-zu-viele: Nutzer und Bestellungen
  • Viele-zu-viele: Benutzer und Rollen (über eine Zwischentabelle)

Index-Grundlagen

  • Primärschlüsselindex: Automatisch erstellt, eindeutig und nicht leer
  • Normales Index: Abfragen beschleunigen
  • Kombinierter Index: Mehrfeld-Verbundindex

Beispiel für KI-gestütztes Design

Beschreiben Sie der KI Ihre Geschäftsanforderungen, und sie kann ein vollständiges Datenmodell generieren, einschließlich Tabellenstrukturen, Beziehungen, Indizes und Einschränkungen. Siehe den obigen Abschnitt „KI-gestütztes Datenbankdesign“ für ein detailliertes Beispiel.

Grundlagen der Datenmigration

Den zentralen Migrationsablauf beibehalten und sich darauf konzentrieren, zu zeigen, wie KI die Migration unterstützt. Mit KI lassen sich Migrationsskripte schnell generieren und die Ergebnisse überprüfen.

Migrationswerkzeuge

  • Prisma Migrate: Migrationsskripte automatisch generieren
  • TypeORM Migrations: Die Migration-Klasse manuell schreiben
  • Flyway/Liquibase: Migrationswerkzeug für das Java-Ökosystem

Migrationsstrategie

  • Feld hinzufügen: Standardwerte verwenden oder NULL zulassen
  • Feld löschen: zuerst als veraltet markieren, dann löschen
  • Feldtyp ändern:Möglicherweise ist eine Datentransformation erforderlich
  • Tabellen/Felder umbenennen:Verwenden Sie eine Zwei-Schritt-Methode

KI-gestützte Migration

KI kann Migrationsskripte generieren, Migrationsergebnisse überprüfen und die Migrationsleistung optimieren. Siehe den obigen Abschnitt „KI-gestützte Datenmigration“ für detaillierte Beispiele und Prompt-Vorlagen.

Praxisbeispiele

Anhand praktischer Codebeispiele lernen Sie, wie Sie KI einsetzen, um die Effizienz der Datenbankentwicklung zu steigern.

KI-generiertes Datenmodell

Vollständiges Beispiel zur Generierung eines Prisma Schema (Prompt + Ergebnis):

// 1. Anforderungen an die KI übermitteln
Prompt: "Entwerfen Sie eine Datenbank für ein E-Commerce-System mit Tabellen für Benutzer, Produkte, Bestellungen und Bestellpositionen..."

// 2. Von der KI generiertes Prisma-Schema
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])
}

KI-gestützte Abfrageoptimierung

Beispiel für Analyse und Optimierung langsamer Abfragen (Prompt + Vorher/Nachher-Vergleich):

Vor der Optimierung (2,3 Sekunden)
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;
Nach der KI-Optimierung (0,15 Sekunden)
-- KI-Vorschlag: Index hinzufügen und JOIN optimieren
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;

NL2SQL-Implementierung

Vollständiges Beispiel für die Umwandlung von natürlicher Sprache in SQL:

// NL2SQL-Funktionsimplementierung
async function nl2sql(question: string, schema: DatabaseSchema): Promise<string> {
  const prompt = `Konvertiere die Frage basierend auf dem Datenbankschema in SQL:

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

Gib nur SQL zurück und verwende parametrisierte Abfragen.`;

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

// Anwendungsbeispiel
const sql = await nl2sql(
  "Alle in der letzten Woche erstellten Artikel und ihre Autorinformationen abfragen",
  { tables: { users: [...], posts: [...] } }
);
// Rückgabe: 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'

Vektordatenbank-Integration

Beispiel für die Vektorsuche in RAG-Szenarien:

// Vollständiger RAG-Workflow
async function ragQuery(question: string) {
  // 1. Frage vektorisieren
  const questionEmbedding = await getEmbedding(question);
  
  // 2. Vektorsuche (Pinecone)
  const results = await pineconeIndex.query({
    vector: questionEmbedding,
    topK: 5,
    includeMetadata: true
  });
  
  // 3. Kontext aufbauen
  const context = results.matches
    .map(m => m.metadata?.text)
    .join('\n\n');
  
  // 4. LLM generiert eine Antwort
  const answer = await generateAnswer(question, context);
  
  return answer;
}

// Verwendung
const answer = await ragQuery("Was ist Prisma?");
// KI generiert präzise Antworten auf Basis der abgerufenen Dokumente

Lernergebnisse

Nach Abschluss dieses Kapitels werden Sie:

  • 1Verstehe drei Arten von Datenbanken (relationale, nicht-relationale, verteilte) und ihre geeigneten Einsatzszenarien
  • 2Die Methoden der KI-gestützten Datenbankgestaltung beherrschen (Schema-Generierung, Benennungskonventionen, Auswahl von Datentypen)
  • 3Kann KI verwenden, um langsame Abfragen zu analysieren und zu optimieren und dabei Indexempfehlungen sowie SQL-Optimierungspläne zu erstellen
  • 4Die Implementierungsprinzipien von NL2SQL verstehen und natürliche Sprachabfragesysteme aufbauen können
  • 5Die Anwendung von Vektordatenbanken in RAG-Szenarien verstehen und Vektorsuchfunktionen integrieren können
  • 6Kann für KI-gestützte Datenbankbetrieb und -wartung verwendet werden (Überwachungsalarme, Leistungsprognosen, Fehlerdiagnose)
  • 7Die Methoden der KI-gestützten Datenmigration beherrschen (Migrationsskripte generieren, Migrationsergebnisse überprüfen)