Intelligenza artificiale e Data Modeling

La modellazione dati è una tecnica fondamentale per l’analisi dei sistemi. Ha le sue radici negli anni ’70 del Novecento, con il modello Entity-Relationship (Entità Relazioni) di Peter Chen e con il grande sviluppo nel settore dei data base, culminato con la implementazione pratica della teoria relazionale di Edgar Codd.

La tecnica del Data Modeling è ancora oggi essenziale per la progettazione di qualunque tipo di sistema, dalle app sui dispositivi mobili ai programmi per la regolazione di sistemi complessi.

L’intelligenza artificiale generativa può aiutare il data modeling, come si può vedere negli esempi che seguono, in cui ho usato ChatGPT di OpenAI, nella versione gratuita con accesso al modello GPT 3.5.


Un data base per la vendita online

Ho formulato il comando con un prompt molto semplice.

[Prompt utente]: “Progetta un database per un negozio di vendita online

[ChatGPT]:

Ecco un esempio di schema di database per un negozio di merchandise online:

### Tabelle:

1. **Clienti:**

  •    ClienteID (Chiave Primaria)
  •    Nome
  •    Cognome
  •    Email
  •    Password
  •    Indirizzo
  •    Telefono

2. **Prodotti:**

  •    ProdottoID (Chiave Primaria)
  •    Nome
  •    Descrizione
  •    Prezzo
  •    QuantitàInStock
  •    CategoriaID (Chiave Esterna che fa riferimento alla tabella Categorie)
  •    FornitoreID (Chiave Esterna che fa riferimento alla tabella Fornitori)

3. **Categorie:**

  •    CategoriaID (Chiave Primaria)
  •    NomeCategoria

4. **Fornitori:**

  •    FornitoreID (Chiave Primaria)
  •    NomeFornitore
  •    PersonaDiContatto
  •    Telefono
  •    Email

5. **Ordini:**

  •    OrdineID (Chiave Primaria)
  •    ClienteID (Chiave Esterna che fa riferimento alla tabella Clienti)
  •    DataOrdine
  •    ImportoTotale
  •    StatoOrdine (es. in elaborazione, spedito, consegnato)

6. **DettagliOrdine:**

  •    DettaglioOrdineID (Chiave Primaria)
  •    OrdineID (Chiave Esterna che fa riferimento alla tabella Ordini)
  •    ProdottoID (Chiave Esterna che fa riferimento alla tabella Prodotti)
  •    Quantità
  •    PrezzoPerUnità

### Relazioni:

  • **Clienti** e **Ordini**: Relazione Uno-a-Molti (Un cliente può effettuare molti ordini)
  • **Prodotti** e **Categorie**: Relazione Molti-a-Uno (Molti prodotti possono appartenere a una categoria)
  • **Prodotti** e **Fornitori**: Relazione Molti-a-Uno (Molti prodotti possono essere forniti da un fornitore)
  • **Ordini** e **DettagliOrdine**: Relazione Uno-a-Molti (Un ordine può avere molti dettagli d’ordine)

### Indicizzazione:

Possono essere creati indici su `ClienteID`, `ProdottoID`, `CategoriaID`, `FornitoreID` e `OrdineID` per migliorare le prestazioni delle query.

### Considerazioni:

  • 1. **Sicurezza:** Implementare adeguate misure di sicurezza, inclusa l’hashing delle password, per proteggere i dati dei clienti.
  • 2. **Normalizzazione:** Assicurarsi che il database sia normalizzato per ridurre la ridondanza e migliorare l’integrità dei dati.
  • 3. **Validazione dei Dati:** Implementare vincoli per garantire l’accuratezza dei dati, come assicurarsi che i prezzi siano non negativi e le quantità siano maggiori di zero.
  • 4. **Prestazioni:** Ottimizzare regolarmente le query e considerare meccanismi di caching per migliorare le prestazioni, specialmente durante periodi di traffico intenso.
  • 5. **Backup e Ripristino:** Implementare procedure regolari di backup per prevenire la perdita di dati e avere un piano di ripristino pronto all’uso.

Si prega di notare che questo è uno schema di base e, a seconda dei requisiti specifici del tuo negozio di merchandise online, potresti dover modificare o estendere ulteriormente lo schema.

Lo schema riportato, prodotto da ChatGPT sulla base di un prompt (comando) che indicava solo l’ambito di interesse, non può che essere generico. Costituisce comunque una base di partenza da cui volendo si potrebbe iniziare per costruire, proseguendo nella conversazione con ChatGPT, uno schema adattato alle proprie esigenze specifiche.


Un data base per la formazione aziendale

In questo secondo esempio il prompt è un po’ più dettagliato. Non viene enunciato solo il tema, la formazione aziendale, ma sono anche dettagliate alcune caratteristiche richieste.

[Prompt utente]: “Crea uno schema database per l’area di formazione di un’azienda. Deve gestire dati sui dipendenti, sulle loro esigenze di formazione, sulle aziende che forniscono i corsi di formazione, sui corsi che si possono frequentare con i relativi costi, sulle iscrizioni, sui feedback espressi dai dipendenti che hanno partecipato ai corsi.”

[ChatGPT]:

Ecco uno schema di database per gestire l’area di formazione di un’azienda:

**Tabelle:**

1. **Dipendenti:**

  •    ID (Chiave Primaria)
  •    Nome
  •    Cognome
  •    Data di Nascita
  •    Ruolo
  •    Dipartimento
  •    Altro (Aggiungere altri dettagli sui dipendenti, se necessario)

2. **Esigenze di Formazione:**

  •    ID (Chiave Primaria)
  •    ID Dipendente (Chiave Esterna riferita alla tabella Dipendenti)
  •    Data di Creazione
  •    Descrizione dell’Esigenza
  •    Priorità
  •    Stato (In attesa, In corso, Completato, Annullato)

3. **Aziende di Formazione:**

  •    ID (Chiave Primaria)
  •    Nome Azienda
  •    Indirizzo
  •    Contatto
  •    Descrizione

4. **Corsi di Formazione:**

  •    ID (Chiave Primaria)
  •    Titolo del Corso
  •    Descrizione
  •    Durata
  •    Costo
  •    ID Azienda di Formazione (Chiave Esterna riferita alla tabella Aziende di Formazione)

5. **Iscrizioni ai Corsi:**

  •    ID (Chiave Primaria)
  •    ID Dipendente (Chiave Esterna riferita alla tabella Dipendenti)
  •    ID Corso di Formazione (Chiave Esterna riferita alla tabella Corsi di Formazione)
  •    Data di Iscrizione
  •    Stato dell’Iscrizione (Confermata, In Attesa, Annullata, Completata)

6. **Feedback dei Dipendenti:**

  •    ID (Chiave Primaria)
  •    ID Dipendente (Chiave Esterna riferita alla tabella Dipendenti)
  •    ID Corso di Formazione (Chiave Esterna riferita alla tabella Corsi di Formazione)
  •    Data del Feedback
  •    Valutazione (da 1 a 5)
  •    Commenti

**Relazioni:**

  • La tabella “Esigenze di Formazione” è collegata alla tabella “Dipendenti” tramite l’ID del Dipendente.
  • La tabella “Corsi di Formazione” è collegata alla tabella “Aziende di Formazione” tramite l’ID dell’Azienda di Formazione.
  • La tabella “Iscrizioni ai Corsi” è collegata alle tabelle “Dipendenti” e “Corsi di Formazione” tramite gli ID del Dipendente e del Corso di Formazione.
  • La tabella “Feedback dei Dipendenti” è collegata alle tabelle “Dipendenti” e “Corsi di Formazione” tramite gli ID del Dipendente e del Corso di Formazione.

Questo schema di database ti permetterà di gestire in modo efficace le informazioni relative alla formazione dei dipendenti, alle esigenze di formazione, ai corsi offerti dalle aziende di formazione, alle iscrizioni e ai feedback dei dipendenti. Puoi adattare ulteriormente il database in base alle specifiche esigenze della tua azienda.

Ottenuta questa risposta ho chiesto di indicare alcune funzionalità da sviluppare.

[Prompt utente]: Bene. Puoi anche definire le funzionalità da implementare per gestire i dati inclusi in questo schema?

[ChatGPT]:

Certamente! Ecco alcune delle funzionalità chiave da implementare per gestire i dati inclusi nello schema del database per l’area di formazione di un’azienda:

Dipendenti:

  • Aggiunta, modifica e eliminazione di informazioni sui dipendenti.
  • Visualizzazione dei dettagli dei dipendenti, inclusi dati personali e storico di formazione.
  • Ricerca e filtri per dipartimento, ruolo, ecc.

Esigenze di Formazione:

  • Creazione e registrazione delle esigenze di formazione per i dipendenti.
  • Monitoraggio dello stato delle esigenze di formazione (in attesa, in corso, completate, annullate).
  • Notifiche automatiche per le esigenze in attesa.

Aziende di Formazione:

  • Aggiunta, modifica e eliminazione delle informazioni sulle aziende di formazione.
  • Visualizzazione dei corsi offerti da ciascuna azienda di formazione.
  • Collegamento dei corsi alle aziende di formazione.

Corsi di Formazione:

  • Aggiunta, modifica ed eliminazione delle informazioni sui corsi.
  • Associazione dei corsi alle aziende di formazione.
  • Monitoraggio dei costi, della durata e della disponibilità dei corsi.

Iscrizioni ai Corsi:

  • Iscrizione dei dipendenti ai corsi di formazione disponibili.
  • Monitoraggio dello stato delle iscrizioni (confermate, in attesa, annullate, completate).
  • Generazione di elenchi di partecipanti per ciascun corso.

Feedback dei Dipendenti:

  • Registrazione dei feedback dei dipendenti sui corsi di formazione.
  • Calcolo delle valutazioni medie per i corsi.
  • Visualizzazione dei commenti e delle valutazioni dei dipendenti.

Rapporti e Analisi:

  • Generazione di rapporti sulla formazione dei dipendenti, inclusi dettagli sull’utilizzo del budget di formazione, valutazioni dei corsi e altro.
  • Analisi delle esigenze di formazione e delle tendenze.

Sicurezza e Accesso:

  • Implementazione di misure di sicurezza per garantire che solo utenti autorizzati possano accedere ai dati sensibili.
  • Gestione dei ruoli e dei permessi per definire chi ha accesso a quali funzionalità.

Notifiche e Avvisi:

  • Invio di notifiche e avvisi automatici per scadenze, aggiornamenti di corsi, cambiamenti di stato delle iscrizioni, ecc.

Backup e Recupero Dati:

  • Implementazione di procedure di backup regolari per garantire la sicurezza dei dati in caso di perdita o danneggiamento.

Interfaccia Utente Intuitiva:

  • Creazione di un’interfaccia utente intuitiva e user-friendly per semplificare la gestione dei dati da parte degli utenti.

Aggiornamenti e Manutenzione:

  • Pianificazione di aggiornamenti periodici per mantenere il sistema aggiornato con le esigenze in evoluzione dell’azienda e per risolvere eventuali bug o problemi di prestazioni.

Queste funzionalità dovrebbero consentire di gestire in modo efficace i dati inclusi nello schema del database e di offrire un sistema completo per la gestione della formazione dei dipendenti all’interno dell’azienda. La complessità dell’implementazione può variare in base alle dimensioni e alle esigenze specifiche dell’azienda.

In questo caso lo schema è stato prodotto sulla base di indicazioni che possono essere precisate con una serie di prompt successivi. A loro volta le funzionalità elencate dal sistema costituiscono solo una base di partenza. Per ogni funzionalità potrebbe essere richiesto al LLM di abbozzare una descrizione funzionale (caso d’uso).


La costruzione di uno schema in passi successivi

In questo terzo esempio ho dato indicazioni più dettagliate per definire uno schema in modo progressivo, scegliendo di usare una convenzione per esprimere le molteplicità nelle relazioni tra entità.

[Prompt utente]: Ti chiedo aiuto per definire uno schema database. D’ora in poi, quando uso una espressione come “Clienti ->[1..*] Ordini” significa una associazione tra le entità Clienti e Ordini nella quale a ogni occorrenza di Clienti corrisponde come minimo 1 istanza di Ordini e come massimo un numero indefinito di istanze di Ordini.

[ChatGPT]:

Certamente, posso aiutarti a definire uno schema di database basato sull’associazione tra le entità Clienti e Ordini, dove ogni Cliente può avere uno o più Ordini. Ecco uno schema di base per questa relazione:

**Entità:**

1. **Clienti:**

  •    ClienteID (chiave primaria)
  •    Nome
  •    Indirizzo
  •    Altri attributi del cliente

2. **Ordini:**

  •    OrdineID (chiave primaria)
  •    ClienteID (chiave esterna collegata a ClienteID nella tabella Clienti)
  •    DataOrdine
  •    Altri attributi dell’ordine

In questo schema, l’entità Clienti contiene le informazioni sui clienti, con ogni cliente identificato univocamente da un ClienteID. L’entità Ordini contiene le informazioni sugli ordini, con ogni ordine identificato da un OrdineID e collegato a un cliente tramite il campo ClienteID (chiave esterna).

L’associazione tra Clienti e Ordini è implementata attraverso il campo ClienteID nella tabella Ordini, che fa riferimento al ClienteID nella tabella Clienti. Questo permette di associare uno o più ordini a ciascun cliente. Nella tua notazione, questa relazione può essere rappresentata come “Clienti ->[1..*] Ordini”, indicando che ogni cliente (1) può avere uno o più (1..*) ordini.

Spero che questa spiegazione ti sia utile! Fammi sapere se hai bisogno di ulteriori dettagli o di assistenza su un aspetto specifico dello schema di database.

[Prompt utente]: Ottimo. Esiste un’altra associazione tra le entità Ordini e Prodotti, con queste molteplicità: “Ordini->[1..*] Prodotti” e l’inverso “Prodotti->[0..*] Ordini”.

[ChatGPT]:

Certamente, posso aiutarti a definire un’altra associazione tra le entità Ordini e Prodotti basata sulle molteplicità fornite.

**Modifica allo schema esistente:**

3. **Prodotti:**

  •    ProdottoID (chiave primaria)
  •    NomeProdotto
  •    Prezzo
  •    Altri attributi del prodotto

Ora, per rappresentare l’associazione tra Ordini e Prodotti e viceversa, è necessario aggiungere una tabella di collegamento (tabella associativa) che tenga traccia delle relazioni tra gli ordini e i prodotti. Questa tabella di collegamento può essere chiamata, ad esempio, “DettagliOrdine” e avrebbe i seguenti campi:

4. **DettagliOrdine:**

  •    DettaglioOrdineID (chiave primaria)
  •    OrdineID (chiave esterna collegata a OrdineID nella tabella Ordini)
  •    ProdottoID (chiave esterna collegata a ProdottoID nella tabella Prodotti)
  •    Quantità
  •    Altri attributi relativi ai dettagli dell’ordine

In questa tabella di collegamento, ogni riga rappresenta un collegamento tra un ordine specifico e un prodotto specifico, indicando anche la quantità di quel prodotto nell’ordine. Questo consente di gestire l’associazione “Ordini ->[1..*] Prodotti” (cioè, ogni ordine può contenere uno o più prodotti) e l’inverso “Prodotti ->[0..*] Ordini” (cioè, ogni prodotto può essere incluso in zero o più ordini).

Questa struttura consente di gestire efficacemente le relazioni tra le entità Ordini, Prodotti e Clienti. Fammi sapere se hai bisogno di ulteriori chiarimenti o se c’è qualcos’altro su cui posso aiutarti!


Considerazioni finali

L’intelligenza artificiale generativa può aiutare la modellazione dati, creando schemi database prototipali che possono costituire il punto di partenza per miglioramenti e adattamenti alle esigenze specifiche.

Può anche essere usata per sviluppare uno schema in modo progressivo, attraverso modifiche ed estensioni.

Se viene guidata da qualcuno che conosce bene le tecniche di Data Modeling il contributo dell’IA generativa può essere notevole.

Come per tutta l’intelligenza artificiale generativa, comunque, bisogna evitare di correre il rischio di accettare ciò che l’IA generativa produce senza un controllo umano. Anche quando prende cantonate, lo fa in modo da sembrare convincente a chi non è esperto.

Vedi anche: Intelligenza artificiale e Casi d’uso, Intelligenza artificiale e standard UML, SysML, BPMN

Riferimenti per la formazione:

Data Modeling

Data Modeling in auto-istruzione

Prompt Engineering – usare al meglio l’intelligenza artificiale generativa