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
Sito: 7ecnologie
Sezione: 12. SQL
Capitolo: 06. SQLite
Paragrafo: 02. Generazione e popolamento di un DB
Indice dei capitoli: 00. Risorse - 01. Generalità - 02. Comandi di DML - 03. Comandi di DDL - 04. Comandi di DCL - 05. Comandi di TCL - 06. SQLite - 07. Tutorial - 98. Esercizi
Indice dei paragrafi: 01. Generalità - 02. Generazione e popolamento di un DB - 03. Comandi interattivi - 04. Transazioni