Avete mai pensato di implementare una rubrica telefonica? Si possono usare molte tecnologie e linguaggi di programmazione. Una soluzione sicuramente elegante e professionale consiste nell'adozione di un database e lasciare al linguaggio di programmazione l'interazione fra utente e dati. Con MySQL possiamo realizzare in pochi passi il database per la nostra applicazione, se questa cosa vi interessa vi dico come procedere.
La rubrica che ho in mente è abbastanza semplice, deve contenere il nome e il cognome dei nostri contatti e l'eventuale numero di telefono. Un contatto può non avere necessariamente un numero di telefono. Una domanda che merita fin dall'inizio una risposta è la seguente: quanti numeri di telefono può avere un contatto? La risposta a questo quesito condiziona la progettazione del database. Se la cardinalità del numero di telefono di un contatto è fissata ad 1 non si hanno molti problemi, un unica tabella raccoglierà: nome, cognome e numero di telefono. Sappiamo bene che questa limitazione non ci rende felici. Ecco allora che modelleremo il database per contenere zero o più numeri telefonici (contenti?).
Nello schema che vi propongo ho individuato due entità:
La rubrica che ho in mente è abbastanza semplice, deve contenere il nome e il cognome dei nostri contatti e l'eventuale numero di telefono. Un contatto può non avere necessariamente un numero di telefono. Una domanda che merita fin dall'inizio una risposta è la seguente: quanti numeri di telefono può avere un contatto? La risposta a questo quesito condiziona la progettazione del database. Se la cardinalità del numero di telefono di un contatto è fissata ad 1 non si hanno molti problemi, un unica tabella raccoglierà: nome, cognome e numero di telefono. Sappiamo bene che questa limitazione non ci rende felici. Ecco allora che modelleremo il database per contenere zero o più numeri telefonici (contenti?).
Nello schema che vi propongo ho individuato due entità:
contatti
e rubrica
. Nell'entità contatti
ho messo gli attributi nome
e cognome
. In rubrica
, invece, ho il solo attributo telefono
. Un numero di telefono può essere assegnato ad uno o più contatti.Nell'entità
contatti
ho poi introdotto la chiave primaria id
, in rubrica
ho scelto come chiave primaria l'attributo telefono
. Queste sono le istruzioni SQL per la descrizione del database:CREATE DATABASE rubrica_telefonica;
USE rubrica_telefonica;
CREATE TABLE contatti (
id INT(3) NOT NULL AUTO_INCREMENT,
nome VARCHAR(30) NOT NULL,
cognome VARCHAR(30) NOT NULL,
UNIQUE (nome, cognome),
PRIMARY KEY (id)
);
CREATE TABLE rubrica (
telefono VARCHAR(30) NOT NULL,
contatto INT(3) NOT NULL REFERENCES contatti(id),
PRIMARY KEY (telefono,contatto)
);
Ho poi aggiunto i permessi per permettere a un utente l'interazione con il database e le tabelle appena create:
GRANT INSERT,SELECTOsservazione: grazie alla riga
ON rubrica_telefonica.*
TO php_user IDENTIFIED BY 'php_user';
UNIQUE (nome, cognome)
non potranno esistere occorrenze dell'entità contatti
che hanno lo stesso attributo nome
e cognome
. Potranno tuttavia esistere contatti con lo stesso nome o cognome. Il database per lo nostra applicazione è pronto per essere usato. Vi riporto, per comodità, qualche utile query per l'estrazione dei dati:Ricerca 1: per nome
SELECT telefono, cognomeRicerca 2: per cognome
FROM rubrica R JOIN contatti C ON R.contatto=C.id
WHERE C.nome='Luca'
SELECT telefono, nomeRicerca 3: per nome e cognome
FROM rubrica R JOIN contatti C ON R.contatto=C.id
WHERE C.cognome='Petrosino'
SELECT telefono, cognomeRicerca 4: per numero
FROM rubrica R JOIN contatti C ON R.contatto=C.id
WHERE C.nome='Luca' AND C.cognome='Petrosino'
SELECT nome, cognomeRicerca 5: il numero finisce per... 789
FROM rubrica R JOIN contatti C ON R.contatto=C.id
WHERE R.telefono='0123456789'
SELECT nome, cognome, telefonoRicerca 6: il numero inizia per... 012
FROM rubrica R JOIN contatti C ON R.contatto=C.id
WHERE R.telefono LIKE "%789"
SELECT nome, cognome, telefonoRicerca 7: contiene il numero... 345
FROM rubrica R JOIN contatti C ON R.contatto=C.id
WHERE R.telefono LIKE "012%"
SELECT nome, cognome, telefono
FROM rubrica R JOIN contatti C ON R.contatto=C.id
WHERE R.telefono LIKE "%012%"
Nessun commento:
Posta un commento