02. Generazione e popolamento di un DB

In questa sezione verrà illustrato come creare il DB denominato order.db, che replica il database predisposto dal sito w3schools.com, già analizzato in precedenza, e come popolare le tabelle con un insieme predefinito di dati.

Per procedere è necessario scaricare la cartella compressa contenente le utility standard del prodotto e i file CSV già predisposti per il caricamento dei dati e seguire la procedura riportata in questa pagina.

Operazioni preliminari

Utenti Windows

  • Scaricare la cartella compressa SQLite.zip tramite il link

  • Estrarre la cartella SQLite e posizionarla C:\

  • Aprire un terminale (prompt dei comandi)

  • Posizionarsi nella cartella C:\SQLite

  • Avviare il tool sqlite3

  • Impostare la codifica del database a utf-8 tramite il comando riportato in grassetto

sqlite> PRAGMA encoding="UTF-8";

  • Creare il database orders.db tramite il comando riportato in grassetto

sqlite> .open 'db\orders\orders.db'

Nota: il singolo apice, utilizzato per delimitare il path del database, è interpretato da SQLite come una raw string, cioè una stringa in cui sono ignorati i caratteri speciali (come \ utilizzato per comporre stringhe speciali). Utilizzando il doppio apice, invece, il carattere \ verrebbe interpretato come l'inizio di una sequenza speciale.

Utenti macOS

  • Scaricare la cartella compressa SQLite.zip tramite il link

  • Aprire un terminale ed individuare la cartella home dell'utente corrente tramite il comando pwd

  • Estrarre la cartella SQLite e posizionarla nella cartella home precedentemente individuata

  • Utilizzando il terminale, posizionarsi nella cartella SQLite

  • Avviare il tool sqlite3

  • Impostare la codifica del database a utf-8 tramite il comando riportato in grassetto

sqlite> PRAGMA encoding="UTF-8";

  • Creare il database orders.db tramite il comando riportato in grassetto

sqlite> .open 'db/orders/orders.db'


Creazione delle tabelle

  • Creare le tabelle ricopiando ed eseguendo i seguenti comandi SQL:

CREATE TABLE Customers(

CustomerID INTEGER PRIMARY KEY,

CustomerName TEXT NOT NULL,

ContactName TEXT NOT NULL,

Address TEXT NOT NULL,

City TEXT NOT NULL,

PostalCode TEXT,

Country TEXT NOT NULL

);

CREATE TABLE Categories(

CategoryID INTEGER PRIMARY KEY,

CategoryName TEXT NOT NULL,

Description TEXT NOT NULL

);

CREATE TABLE Employees(

EmployeeID INTEGER PRIMARY KEY,

LastName TEXT NOT NULL,

FirstName TEXT NOT NULL,

BirthDate TEXT NOT NULL,

Photo TEXT NOT NULL,

Notes TEXT NOT NULL

);

CREATE TABLE Shippers(

ShipperID INTEGER PRIMARY KEY,

ShipperName TEXT NOT NULL,

Phone TEXT NOT NULL

);

CREATE TABLE Suppliers(

SupplierID INTEGER PRIMARY KEY,

SupplierName TEXT NOT NULL,

ContactName TEXT NOT NULL,

Address TEXT NOT NULL,

City TEXT NOT NULL,

PostalCode TEXT,

Country TEXT NOT NULL,

Phone TEXT

);

CREATE TABLE Orders(

OrderID INTEGER PRIMARY KEY,

CustomerID INTEGER NOT NULL,

EmployeeID INTEGER NOT NULL,

OrderDate TEXT NOT NULL,

ShipperID INTEGER NOT NULL,

FOREIGN KEY(CustomerID)

REFERENCES Customers(CustomerID),

FOREIGN KEY(EmployeeID)

REFERENCES Employees(EmployeeID),

FOREIGN KEY(ShipperID)

REFERENCES Shippers(ShipperID)

);

CREATE TABLE OrderDetails(

OrderDetailID INTEGER PRIMARY KEY,

OrderID INTEGER NOT NULL,

ProductID INTEGER NOT NULL,

Quantity INTEGER NOT NULL,

FOREIGN KEY(OrderID)

REFERENCES Orders(OrderID),

FOREIGN KEY(ProductID)

REFERENCES Products(ProductID)

);

CREATE TABLE Products(

ProductID INTEGER PRIMARY KEY,

ProductName TEXT NOT NULL,

SupplierID INTEGER NOT NULL,

CategoryID INTEGER NOT NULL,

Unit REAL NOT NULL,

Price REAL NOT NULL,

FOREIGN KEY(SupplierID)

REFERENCES Suppliers(SupplierID),

FOREIGN KEY(CategoryID)

REFERENCES Categories(CategoryID)

);

  • Verificare la correttezza di quanto creato richiamando il comando in grassetto:

sqlite> .schema


Popolamento del Database

Utenti Windows

    • Procedere per importare i dati nelle tabelle a partire dai file .csv già predisposti per lo scopo. Per prima cosa occorre istruire SQLite sul fatto che il separatore utilizzato nei file è il punto e virgola (";"), eseguendo il seguente comando riportato in grassetto:

sqlite> .separator ";"

    • Eseguire i seguenti comandi per caricare i dati in ciascuna tabella:

.import 'db\orders\customers.csv' Customers

.import 'db\orders\categories.csv' Categories

.import 'db\orders\employees.csv' Employees

.import 'db\orders\shippers.csv' Shippers

.import 'db\orders\suppliers.csv' Suppliers

.import 'db\orders\orders.csv' Orders

.import 'db\orders\orderdetails.csv' OrderDetails

.import 'db\orders\products.csv' Products

Utenti macOS

  • Procedere per importare i dati nelle tabelle a partire dai file .csv già predisposti per lo scopo. Per prima cosa occorre istruire SQLite sul fatto che il separatore utilizzato nei file è il punto e virgola (";"), eseguendo il seguente comando riportato in grassetto:

sqlite> .separator ";"

    • Eseguire i seguenti comandi per caricare i dati in ciascuna tabella:

.import 'db/orders/customers.csv' Customers

.import 'db/orders/categories.csv' Categories

.import 'db/orders/employees.csv' Employees

.import 'db/orders/shippers.csv' Shippers

.import 'db/orders/suppliers.csv' Suppliers

.import 'db/orders/orders.csv' Orders

.import 'db/orders/orderdetails.csv' OrderDetails

.import 'db/orders/products.csv' Products


Chiusura della shell

    • Uscire dal tool tramite il comando riportato in grassetto

sqlite> .exit