Friday, December 21, 2018

Introduction To Database

Databases and Database Users

Many daily activities involve the use of applications that interact with a database, for example making a bank operation or an hotel reservations, borrowing a book, purchasing tickets or anything else online.

A database application manages information that is to be stored in a database:

  • traditional applications use databases to store textual or numeric data
  • social-media web sites use big data storage systems or NOSQL systems to store text data and non conventional data such as images and video data

Tuesday, October 23, 2018

Floating-point Arithmetic

Floating-point numbers

A mathematical notation offers a way to represent a number with a string of digits of any length and a radix point. If the position of the radix point is not specified, the string indicates a integer and the position of the radix point would be next the least significative digit.

A mathematical notation can represent numbers as the product of two factors: a number of significant digits in a given base and a scale factor, where the scale factor is the base and an exponent. To obtain the value of the number, multiply the significand by the base raised to the exponent, which is equivalent to shifting the radix point by a number of places equal to the value of the exponent.

In scientific notation, numbers are scaled by a power of ten, the radix point appears immediately after the first digit and the scaling factor is a power of ten.

Floating-point representation is similar to scientific notation. A floating-point number consists of:

  • a signed digit string of a fixed length in a given base (or radix), called the significand, coefficient or mantissa.
    • the length of the significand determines the precision to which numbers can be represented
    • the base can be two, ten or sixteen
  • a signed integer exponent (also called scale or characteristic), which modifies the magnitude of the number.

The number exactly represented has the following form:

  significand * baseexponent (significand ∈ Z, base ∈ Z and base ≥ 2, exponent ∈ Z)

Example:

 +3.1415 = +31415 × 10-4

Floating point computation allows to represent very small and very large real numbers with finite precision.
In computing, floating-point arithmetic is used to represent approximated real numbers.

The term floating point indicates the fact that the radix point (decimal point or binary point in computers) can be floated to left or right, that is, it can be placed anywhere in the significant digits of the number.

The IEEE standard for floating numbers in computers and programming languages

Over the years, different floating-point representations have been used in computers. In 1985, IEEE 754, the Standard for Floating-Point Arithmetic, was established by the Institute of Electrical and Electronics Engineers (IEEE). The IEEE 754 standand is for binary floating point numbers representation.

The three IEEE standard number formats widely used in computers hardware and languages are:

  • single precision: the float type in C language. It is a binary format that occupies 32 bits (4 bytes), the significand has a precision of 24 bits, which implies about 7.2 decimal digits.
  • double precision: the double type in C language . It is a binary format that occupies 64 bits (8 bytes), the significand has a precision of 53 bits, which is equal to about 15.9 decimal digits.
  • double extended: also called exdended precision format. It is binary format that occupies 80 bits, the significand has a precision of 64 bits, which corresponds to about 19 decimal digits. If the processor handles 80 bits foating point, the "long double" C type can be used.

Thursday, September 20, 2018

Esercizio: sistema per la gestione delle gite di una agenzia viaggi

Si vuole progettare una base di dati per la gestione delle gite organizzate da un'agenzia di viaggi.

Per ogni gita si vogliono memorizzare:

  • la descrizione;
  • la data di partenza;
  • la durata;
  • il prezzo;
  • il responsabile della gita;
  • l'elenco dei partecipanti;
  • l'itinerario.

Di ogni partecipante si vogliono memorizzare:

  • nome;
  • cognome;
  • data di nascita.

Ogni gita è associata a un itinerario, costituito da una o più tappe.

Di ogni tappa si vogliono memorizzare:

  • la località;
  • la durata del soggiorno.

Analisi del problema

Si deve costruire uno schema relazionale che e' funzionale alle interrogazioni da fare sul database. Si suppone che l'agenzia di viaggio sia una sola e che non si voglia memorizzare informazioni relative alla agenzia di viaggi.

Le principali entità della base di dati sono:

  • Gita
  • Partecipante
  • Tappa
  • Comune
PARTECIPANTE GITA PRENOTA Nome Cognome Codice (1, 1) (1, N) (1, 1) IdGita Data Durata HA TAPPA (1, N) (1, N) IdTappa Durata Localita DataNascita SUPERVISIONA (1, 1) Prezzo Descrizione COMUNE SI TROVA Codice NomeComune (1, N) (1, 1)  

Associazione Gita-Partecipante

Tra Gita e Partecipante esiste una associazione molti-a-molti.
Infatti: una gita comprende molti partecipanti e un partecipante può prendere parte a più gite organizzate dall'agenzia. Nello traduzione verso lo schema relazionale, si ha una tabella di collegamento.

Le associazioni Cliente-Servizio sono di tipo molti a molti (ad esempio Cliente-AbbonamentoPalestra, Cliente-AnalisiMedica, Cliente-CorsoDiBallo, ecc.) perche' si suppone che il cliente si registra la prima volta quando usa quel servizio e, quando vuole usare quel servizio una seconda volta, il cliente risulta gia' registrato nel database. Anche l'associazione studente-scuola e' una associazione molti a molti, perche' uno studente puo' fare un anno presso un liceo e poi passare ad un istituto tecnico; per cui, se si vuole tener traccia dello storico, si deve modellare l'associazione come N:M. Allo stesso modo, se si vuole sapere a quante gite ha partecipato un cliente, si deve usare una associazione N:M.


Entita' Responsabile

Il responsabile e' un partecipante speciale alla gita, l'entita responsabile NON puo' essere visto una entita' specializzazione di partecipante. In modellazione E-R, una specializzazione (ISA) significa che il responsabile è un'entità con caratteristiche proprie, ma qui non ha nessun attributo aggiuntivo. È semplicemente un partecipante che, per una certa gita, svolge il ruolo di responsabile. Quindi basta una FK. Non serve introdurre il concetto di specializzazione.

Associazione Gita-Responsabile

L'associazione gita-responsabile e' di tipo uno ad uno. Ogni gita ha un responsabile. Il responsabile della gita e' un partecipante alla gita, in piu' e' anche il responsabile della gita. Il responsabile della gita cui ha tutti gli attributi di una partecipante e non è necessario duplicarne i dati anagrafici. È sufficiente memorizzare nella tabella Gite una chiave esterna che fa riferimento alla tabella Partecipanti. In questo modo il responsabile mantiene tutte le caratteristiche di un partecipante, evitando ridondanze.

Nota: L'associazione gita-responsabile e' come l'associazione ufficio-capoufficio di tipo uno ad uno, il capoufficio e' un impiegato che lavora in quell'ufficio ed e' anche il capo dell'ufficio. E' un errore aggiungere cognome e nome del responsabile alla gita; non sarebbe in 3FN, perche' nome e cognome non dipendono da idGita ma da idPartecipante.


Entita Gita

Gli attributi di Gita sono: descrizione, durata in giorni, prezzo, data di partenza. L'attributo descrizione vuole indicare, brevemente, la meta delle gita: ad esempio "Le Cinque Terre", "Arezzo-Cortona", "Isola del Giglio". La gita ha un itinerario, cioe' tutte le tappe della gita, ad esempio per le cinque terre le tappe sono: Monterosso al Mare, Vernazza, Corniglia, Manarola e Riomaggiore.

Associazione Gita-Tappe

Ogni gita è costituita da una o più tappe. Ogni tappa appartiene a una sola gita. La relazione tra Gita e Tappa è quindi uno-a-molti. Ogni tappa è inoltre associata a un comune.

Entita Tappa

Gli attributi di tappa sono durata e localita'. Siccome ci sono delle localita' che sono frazioni, non un comune, posso fare riferimento ad un comune. Un comune puo' essere associato a piu' tappe, una tappa si trova in solo un comune.

Schema relazionale

Gite(
    IDGita, 
    Descrizione, 
    Durata, 
    Prezzo, 
    Data, 
    IDResponsabile (FK))
Partecipanti(
    IDPart, 
    Cognome, 
    Nome, 
    DataNascita)
Gite_Partecipanti(
    IDGita (FK), 
    IDPart (FK))
Tappe(
    IDTappa, 
    Durata, 
    Localita, 
    IDComune (FK), 
    IdGita(FK))
Comuni(
    IDComune, 
    NomeComune)

Lo schema rispetta la terza forma normale. Ogni attributo descrive esclusivamente la propria entità, non sono presenti dipendenze parziali né dipendenze transitive e le relazioni sono collegate tramite chiavi esterne.

Oltre alla verifica della normalizzazione, bisogna controllare se lo schema relazionale e' valido. Si controlla che la base di dati soddisfa i requisiti funzionali richiesti dalla applicazione, cioe' si controlla se si possono eseguire le interrogazioni che servono al committente. Ad esempio, per trovare nome e cognome di tutti i partecipanti alla gita "Cinque Terre", si eseguono due join, in cui l'ordine in cui si incrociano le tabelle non conta:

Esempio 1 - Partecipanti alla gita "Cinque Terre"

Algebra relazionale

π Cognome, Nome
(
    σ Descrizione = 'Cinque Terre'
    (
        Gite
        ⋈ Gite_Partecipanti
        ⋈ Partecipanti
    )
)

SQL

SELECT p.Cognome,
       p.Nome
FROM Gite g
JOIN Gite_Partecipanti gp
     ON g.IDGita = gp.IDGita
JOIN Partecipanti p
     ON gp.IDPart = p.IDPart
WHERE g.Descrizione = 'Cinque Terre';

Esempio 2 - Tutte le gite di un partecipante

Algebra relazionale

π Descrizione, DataPartenza
(
    σ IDPart = 15
    (
        Gite
        ⋈ Gite_Partecipanti
    )
)

SQL

SELECT g.Descrizione,
       g.DataPartenza
FROM Gite g
JOIN Gite_Partecipanti gp
     ON g.IDGita = gp.IDGita
WHERE gp.IDPart = 15;

Esempio 3 - Elenco delle tappe di una gita

Algebra relazionale

π Localita, Durata
(
    σ Descrizione = 'Cinque Terre'
    (
        Gite
        ⋈ Tappe
    )
)

SQL

SELECT t.Localita,
       t.Durata
FROM Gite g
JOIN Tappe t
     ON g.IDGita = t.IDGita
WHERE g.Descrizione = 'Cinque Terre';

Esempio 4 - Nome del responsabile della gita

Algebra relazionale

π Nome, Cognome
(
    σ Descrizione = 'Cinque Terre'
    (
        Gite
        ⋈ Partecipanti
    )
)

con la condizione: Gite.IDResponsabile = Partecipanti.IDPart

SQL

SELECT p.Nome,
       p.Cognome
FROM Gite g
JOIN Partecipanti p
     ON g.IDResponsabile = p.IDPart
WHERE g.Descrizione = 'Cinque Terre';

Wednesday, September 19, 2018

Basi di Dati: La Normalizzazione delle Relazioni

Introduzione

Il procedimento di normalizzazione serve per eliminare gli errori di progettazione da uno schema relazionale. La normalizzazione trasforma uno schema relazionale non normalizzato in uno schema normalizzato, senza alterarne il contenuto informativo.

Normalizzare uno schema significa ridurre le ridondanze che possono provocare incongruenze, dette anche anomalie.

Le principali anomalie che si possono presentare sono:

  • anomalie di inserimento;
  • anomalie di aggiornamento;
  • anomalie di cancellazione.

Immaginiamo di inserire manualmente dei dati in una tabella di Excel. Supponiamo che la tabella contenga le informazioni di un prodotto, con i campi: (codiceProdotto, descrizione, prezzo). Se nella stessa tabella vengono aggiunte anche informazioni relative al fornitore, ad esempio: (codice fornitore, nome, indirizzo) la struttura dei dati può andare incontro ad anomalie.

Infatti, se devo inserire un nuovo prodotto, sono costretto a ripetere anche tutte le informazioni del relativo fornitore: questa è un'anomalia di inserimento. Se cambia l'indirizzo di un fornitore, devo modificarlo in tutte le righe dei prodotti associati a quel fornitore: questa è un'anomalia di aggiornamento. Infine, se elimino l'ultimo prodotto associato a un determinato fornitore, rischio di perdere anche tutte le informazioni relative al fornitore stesso: questa è un'anomalia di cancellazione.

Applicando il processo di normalizzazione a uno schema relazionale si ottengono relazioni che soddisfano diversi livelli di qualità, chiamati forme normali.

Uno schema che soddisfa la prima, la seconda e la terza forma normale (1NF, 2NF e 3NF) è generalmente ben progettato e riduce il rischio di ridondanze e anomalie durante l'inserimento, l'aggiornamento e la cancellazione dei dati.

Tuesday, September 11, 2018

Basi di Dati: L'algebra Relazionale

Le basi di dati contengono informazioni che possono essere interrogate, aggiornate e manipolate dalle applicazioni. Per questo motivo sono necessari linguaggi che consentano di selezionare, elaborare e combinare i dati memorizzati nelle tabelle.

L'algebra relazionale è un linguaggio procedurale utilizzato per descrivere interrogazioni sulle basi di dati relazionali. Viene definito procedurale perché, per ottenere un determinato risultato, è necessario specificare la sequenza di operazioni da eseguire.
L'algebra relazionale non è il linguaggio utilizzato direttamente dagli utenti per interrogare un database. Essa rappresenta invece il fondamento teorico su cui si basano molti linguaggi per basi di dati relazionali, tra cui SQL.
Ogni operazione dell'algebra relazionale prende in ingresso una o più relazioni (tabelle) e restituisce sempre una nuova relazione. Questa proprietà, detta chiusura, permette di concatenare più operatori per costruire interrogazioni anche molto complesse.

Gli operatori dell'algebra relazionale possono essere suddivisi in tre gruppi principali:

  • Operatori insiemistici
    • Unione
    • Intersezione
    • Differenza

  • Operatori che selezionano dati da una relazione
    • Selezione (righe)
    • Proiezione (colonne)
  • Operatori che combinano più relazioni
    • Prodotto cartesiano
    • Join

Per poter applicare gli operatori insiemistici, due relazioni devono essere compatibili. Due relazioni R e S sono compatibili quando:

  1. hanno lo stesso numero di attributi (lo stesso grado);
  2. gli attributi corrispondenti appartengono allo stesso dominio.

Friday, August 24, 2018

Basi di Dati: Il Modello Relazionale

Il modello relazionale, proposto dal matematico britannico Edgar F. Codd nel 1970, si basa sul concetto matematico di relazione.

È un modello teorico fondato sulla teoria degli insiemi e sulla logica del primo ordine, ed è corredato da una propria algebra, detta algebra relazionale, costituita da un insieme di operatori che consentono di interrogare e manipolare i dati. La maggior parte dei DBMS relazionali si basano sul modello relazionale.

1 Definizione di Relazione

Dal punto di vista matematico una relazione deriva dal prodotto cartesiano di più insiemi.

Si definisce prodotto cartesiano di due insiemi A e B, indicato con A×B, l'insieme di tutte le coppie ordinate (a, b), dove a appartiene ad A e b appartiene a B.

Una relazione binaria tra due insiemi A e B (detti domini della relazione) un qualsiasi sottoinsieme del loro prodotto cartesiano: R ⊆ A × B.

Esempio:

A = {7, 8}, B = {16, 49, 64}; A×B = { (7,16), (7,49), (7,64), (8,16), (8,49), (8,64) }
R = { (7,49), (8,64) } è una relazione su A e B che si può indicare con il nome RadiceQuadrataDi

Le definizioni di prodotto cartesiano tra due insiemi e di relazione binaria si estendono al caso di n insiemi.

Data una famiglia di domini D₁, D₂, ..., Dₙ, una relazione è un sottoinsieme del loro prodotto cartesiano: R ⊆ D₁ × D₂ × ... × Dₙ
Il grado (o arità) di una relazione è il numero dei domini che la compongono.
La cardinalità di una relazione è il numero di tuple contenute nella relazione.

Sunday, July 8, 2018

Esempio di Progettazione Concettuale: la concessionaria di automobili multimarca

Esempio di Progettazione Concettuale: la concessionaria di automobili multimarca

Il sistema per la concessionaria di automobili gestisce vendite di auto nuovo ed usato. Per l'usato si ha una gestione delle riparazioni, per il nuovo si ha una gestione degli optional venduti. Si suppone che l'utente possa acquistare piu' automobili. Si hanno i seguenti vincoli sulle auto usate: 1) non devono esistere riparazioni con spese inferiori ai 1000 eur, 2) non si devono vendere auto immatricolate prima del 2008, 3) non si possono vendere auto che abbiano percorso piu' di 100.000 Km.

 

Gli attributi dell'entità cliente sono i soliti: nome, cognome, indirizzo, tel., con attributo chiave il codice fiscale.
L'associazione Acquista, di tipo uno a molti, tra le entita' Cliente ed Automobile, contiene gli attributi data acquisto e sconto.
Sia l'automobile nuova che l'auto usata viene descritta dagli attributi: N.telaio, marca, modello, prezzo e anni di garanzia (di solito 1 anno per l'usato e 2 anni per il nuovo), per cui questi attributi li generalizzo e li porto sull'entità padre. Un'auto usata ha degli attributi in piu' rispetto a quella nuova, che sono km percorsi ed anno di immatricolazione; le auto nuove sono immatricolate dal concessionario al momento della vendita.
L'associazione opzionale Usato:Riparazione di tipo M:N, con codice, tipo (ad es. frizione, freni), descrizione (cosa ho fatto alla macchina) e il costo. In questo modo potro' fare delle ricerche su database del tipo: quante auto ho venduto che hanno richiesto una riparazione ai freni.
L'associazione opzionale Nuovo:Optional di tipo M:N, con codice, descrizione (ad es. cerchi in lega) e prezzo. L'auto nuova puo' avere 0...N optional, un optional puo' avere 1...N auto.
Se io voglio sapere le auto vendute che motorizzazione hanno, ad es. la cilindrata, se e' diesel o benzina, allora devo introdurre una nuova entità che chiamo motorizzazione. L'associazione Auto:Motorizzazione e' di tipo 1:N. Poiche' il prezzo dell'auto dipende dalla motorizzazione, sposto l'attributo prezzo dall'entità Automobile a quella Motorizzazione.
Il prezzo finale dell'auto e' dato da: P = (prezzo dell'auto) + (prezzo optional) + (costo riparazione) - (sconto).
In questo modello la parte della vendita non prende in considerazione la fatturazione, ovviamente questa e' una semplificazione della realta' di un concessionario auto.