🔹 1.
Database, DBMS e architettura a 3 livelli
▶ Cos'è un database?
Un database è un insieme organizzato di dati, strutturati secondo uno schema preciso, con
lo scopo di essere facilmente accessibili, gestibili e aggiornabili. Viene utilizzato in moltissimi
ambiti: banche, e-commerce, scuole, ospedali ecc.
▶ Cos'è un DBMS?
Il DBMS (Database Management System) è il software che gestisce il database. Esso
fornisce strumenti per:
● creare, modificare e cancellare strutture di dati (tabelle, viste, ecc.);
● inserire, aggiornare, cancellare e interrogare i dati;
● garantire sicurezza, integrità, accesso simultaneo e recupero in caso di guasti.
Esempi di DBMS: MySQL, PostgreSQL, Oracle, Microsoft SQL Server.
▶ Caratteristiche principali di un DBMS:
● Indipendenza dei dati: i programmi non dipendono dalla struttura fisica dei dati.
● Controllo sulla concorrenza: più utenti possono accedere contemporaneamente.
● Backup e ripristino: sistemi automatici di salvataggio dei dati.
● Integrità dei dati: vincoli che assicurano la correttezza delle informazioni.
● Sicurezza: gestione degli accessi (permessi, utenti, ruoli).
▶ Architettura a 3 livelli:
1. Livello interno: come i dati sono fisicamente memorizzati (indici, file).
2. Livello concettuale: descrive la struttura logica dell’intero database (relazioni,
vincoli, domini).
3. Livello esterno: viste personalizzate per l’utente o l’applicazione, nasconde la
complessità.
🔹 2. Schema concettuale, schema ER e derivazione
dello schema logico
▶ Schema concettuale
È una rappresentazione ad alto livello dell’organizzazione dei dati. È indipendente dal tipo di
DBMS e descrive le entità, le relazioni e i vincoli.
▶ Schema ER (Entity-Relationship)
È il modello più usato per descrivere lo schema concettuale. Si disegna con un
diagramma ER, dove:
● Entità: oggetti o concetti del mondo reale (es. Studente, Corso).
● Attributi: caratteristiche dell'entità (es. nome, matricola).
● Relazioni: legami tra entità (es. Studente “frequenta” Corso).
Altri elementi:
● Entità deboli: dipendono da un’altra entità per la loro identificazione.
● Attributi composti: es. nome completo = nome + cognome.
● Cardinalità: 1:1, 1:N, N:M → definiscono quanti elementi possono partecipare alla
relazione.
▶ Derivazione dello schema logico (relazionale)
Dal diagramma ER si passa allo schema logico relazionale, dove ogni entità diventa una
tabella:
● Gli attributi diventano colonne
● La chiave primaria identifica univocamente una riga
● Le relazioni N:M diventano tabelle a parte con due chiavi esterne
● Le relazioni 1:N si risolvono con una chiave esterna sul lato N
🔹 3. Algebra relazionale e SSQL
▶ Algebra relazionale
È un linguaggio formale usato per esprimere operazioni sui dati nelle tabelle. Le principali
operazioni sono:
● Selezione (σ): restituisce le righe che soddisfano una condizione.
Esempio: σ(età > 18)(Studenti)
● Proiezione (π): restituisce solo alcune colonne.
Esempio: π(nome, cognome)(Studenti)
● Join: combina due tabelle sulla base di un attributo comune.
● Unione, intersezione, differenza: operazioni tra insiemi.
● Rinominazione (ρ): cambia nome a tabelle o attributi
▶ SSQL (Simple SQL)
È una forma semplificata di SQL che si concentra su SELECT, WHERE, ecc.
Esempio:
sql
CopiaModifica
SELECT nome FROM Studenti WHERE età > 18;
🔹 4. DDL, DML e QL con SQL
▶ DDL (Data Definition Language)
Serve per creare e modificare la struttura del database:
● CREATE TABLE, ALTER TABLE, DROP TABLE
Esempio:
sql
CopiaModifica
CREATE TABLE Studenti (
id INT PRIMARY KEY,
nome VARCHAR(50),
età INT
);
▶ DML (Data Manipulation Language)
Serve per gestire i dati:
● INSERT, UPDATE, DELETE
Esempio:
sql
CopiaModifica
INSERT INTO Studenti (id, nome, età) VALUES (1, 'Luca', 21);
▶ QL (Query Language, SELECT)
Serve per interrogare i dati con SELECT:
sql
CopiaModifica
SELECT nome FROM Studenti WHERE età >= 20 ORDER BY nome;
Si possono usare:
● GROUP BY, HAVING per aggregazioni
● JOIN per combinare più tabelle
🔹 5. Normalizzazione e integrità referenziale
▶ Normalizzazione
Processo che elimina ridondanze e anomalie nei dati.
● 1NF (prima forma normale): tutti gli attributi devono essere atomici (nessun elenco,
sottotabelle, ecc.)
● 2NF: ogni attributo non chiave deve dipendere dall’intera chiave primaria
● 3NF: nessun attributo deve dipendere indirettamente dalla chiave primaria
Benefici:
● Migliore efficienza
● Meno spazio sprecato
● Minori possibilità di errore
▶ Integrità referenziale
Garantisce che le relazioni tra tabelle siano corrette. Si usa la FOREIGN KEY per
collegare tabelle:
sql
CopiaModifica
CREATE TABLE Iscrizioni (
idStudente INT,
idCorso INT,
FOREIGN KEY (idStudente) REFERENCES Studenti(id),
FOREIGN KEY (idCorso) REFERENCES Corsi(id)
);
Esempio: non puoi iscrivere uno studente a un corso se non esistono entrambi.
🔹 6. PHP e accesso/manipolazione dati
▶ PHP
È un linguaggio di scripting lato server usato per creare pagine web dinamiche. È spesso
usato con database come MySQL.
▶ Connessione a MySQL con mysqli
php
CopiaModifica
$conn = new mysqli("localhost", "root", "", "miodatabase");
if ($conn->connect_error) {
die("Errore di connessione: " . $conn->connect_error);
}
▶ Esecuzione di query SQL in PHP
php
CopiaModifica
$sql = "SELECT nome FROM Studenti";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "Nome: " . $row["nome"] . "<br>";
}
}
▶ Prevenzione SQL Injection (con prepare)
php
CopiaModifica
$stmt = $conn->prepare("SELECT * FROM Studenti WHERE nome = ?");
$stmt->bind_param("s", $nome);
$stmt->execute();