Che materia stai cercando?

Sistemi Informativi Aziendali - Appunti Appunti scolastici Premium

Appunti che contengono un file consta di 3 parti: Basi di informatica (hardware, software, compressione dei dati, etc.), un glossario, una panoramica sui sistemi informativi e i database (e sull'uso del linguaggio SQL), e infine una panoramica sulla programmazione C.

Esame di Sistemi informativi aziendali docente Prof. G. Pilato

Anteprima

ESTRATTO DOCUMENTO

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

I NN

FF

OO

RR

M

AA

TT

II

CC

AA

I M

N

F

O R M

A T I

C A

A r

i t

h m e t

i c -

L o

g i c U n

i t

A L U ( )

L’unità aritmetico-logica è una componente hardware del calcolatore che ha il compito di svolgere

le operazioni logico-matematiche. L’ALU è formato da tre parti principali: i registri, le

interconnessioni, e la circuiteria. I registri dell’ALU sono poco dissimili dalle celle della RAM. La

differenza è che sono adibiti ad uno scopo specifico, ossia contenere gli operandi, e che, essendo

generalmente pochi (16, 32 o 64 registri), vengono realizzati con i costosi circuiti ad alta velocità.

La circuiteria è la parte dell’ALU dove, attraverso percorsi di porte logiche, vengono effettuate le

operazioni matematiche. La filosofia di progettazione prevede che una volta ottenuti gli operandi,

l’ALU faccia svolgere ad ogni pezzo di circuiteria il suo compito, ed alla fine selezioni il risultato

dell’operazione desiderata.

L ’ u n

i t

à d i c o n

t r

o

l l o processore

Insieme all’ALU, l’unità di controllo costituisce quella parte di un computer chiamata .

programma memorizzato

Nell’introduzione si è accennato al concetto di . Quando si esegue un

programma (che non è altro che una sequenza di istruzioni di bit 0 e 1), questo viene caricato in

memoria per essere eseguito passo per passo. Spetta all’unità di controllo prelevare la prossima

istruzione, decodificarla, ed eseguirla, chiamando in gioco le componenti necessarie per

set di istruzioni

l’esecuzione (ALU, dispositivi I\O, etc.). Ogni unità di controllo possiede un che è

in grado di eseguire. Si tratta di serie di codici in linguaggio macchina che l’unità di controllo è in

grado di decodificare. Non esiste una convenzione universale per quanto riguarda i set di

istruzione. Al giorno d’oggi la progettazione dei processori segue una unione tra due opposte

Reduced Instructions Set Computers

filosofie di progettazione: i RISC ( ), che utilizzano set di

istruzioni ridotti, permettendo di utilizzare altro spazio per l’ottimizzazione della velocità dei circuiti,

Complex Instructions Set Computers

ed i CISC ( ), che utilizzano set di istruzioni più complessi.

Program Counter

Per svolgere la propria funzione l’unità di controllo si serve di due registri, il PC ( )

Instruction Register

e l’IR ( ), e di un circuito decodificatore, per capire quali istruzioni del set deve

eseguire. Il contatore di programma contiene sempre l’indirizzo di memoria della prossima

istruzione da eseguire. È dotato di un proprio circuito di incremento che gli permette di “puntare”

via alla istruzione successiva, svolgendo sequenzialmente il programma memorizzato. L’IR è il

registro che contiene volta per volta una copia dell’istruzione caricata dalla memoria.

R

R

A

P P R

E

S E

N T A

Z I

O N E B I

N A

R

I

A D I S U O N I E I

M

M

A

G I

N I

A

P P R

E

S E

N T A

Z I

O N E B I

N A

R

I

A D I S U O N I E I

M

M

A

G I

N I

Nel seguito illustriamo brevemente in che modo suoni e immagini vengono rappresentati all’interno

di un computer utilizzando il sistema binario.

Le onde sonore sono una grandezza di tipo analogico, ben diversa dalla rappresentazione digitale

che utilizza il computer. I suoni sono costituiti da onde sinusoidali che possiedono un periodo T,

ovvero il tempo necessario per completare un ciclo, un’ampiezza, che è l’intervallo compreso tra il

valore massimo ed il valore minimo che può assumere, una frequenza F, misurata in heartz, che

corrisponde al numero di cicli che l’onda compie in un secondo, etc. Per rappresentare

campionamento

digitalmente un’onda analogica si utilizza la tecnica del . Essa consiste nel

registrare ad intervalli di tempi regolari i valori assunti dall’onda, una volta fissato un sistema di

riferimento. La precisione con cui un computer riproduce un suono dipende da due fattori: la

risoluzione , ossia quanti bit vengono utilizzati per rappresentare ciascun valore registrato, e la

frequenza di campionamento

, ossia quante volte al secondo viene registrato un valore. Per

esempio uno dei formati di codifica audio più usati è l’MP-3, che esegue il campionamento dei

segnali audio ad una frequenza di 44.100 campioni al secondo usando 16 bit per campione.

Anche le immagini sono dati di tipo analogico e possono essere digitalizzate nei computer

scansione

attraverso un processo di campionamento, chiamato . L’immagine viene suddivisa in tanti

pixel

punti ad intervalli regolari, detti . La precisione della rappresentazione digitale dipende da

quanti pixel vengono utilizzati, e dai bit dedicati a ciascun pixel. Chiaramente più sono i bit per

ciascun pixel, più sono le sfumature di colore. Il formato più comune per la rappresentazione delle

immagini è lo schema di codifica RGB. Questa tecnica descrive uno specifico colore catturando il

singolo contributo di un pixel per ciascuno dei tre colori fondamentali: rosso, verde e blu.

R S – C S 3

II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

I NN

FF

OO

RR

M

AA

TT

II

CC

AA

I M

N

F

O R M

A T I

C A

L

L

A C

O M

P R

E

S S I

O N E D E

I D A

T I

A C

O M

P R

E

S S I

O N E D E

I D A

T I

Un campo importante della ricerca informatica è quello della compressione dei dati. Gli algoritmi

di compressione dei dati tentano di rappresentare le informazioni in modi che preservino la

precisione utilizzando nel contempo uno spazio significativamente inferiore. Ad esempio una

semplice tecnica di compressione che può essere utilizzata su quasi tutte le forme di dati è la

run-lenght

codifica . Questo metodo sostituisce una sequenza di valori uguali V , V , .., V con una

1 2 n

coppia di valori (V, ) che indica che il valore V si ripete volte. Questo è un esempio di schema

n n

di compressione senza perdita. Gli schemi di compressione con perdita invece comprimono

notevolmente i dati, senza però garantire la totale conservazione dei dati originali.

I

I

L S O F

T W

A

R

E

L S O F

T W

A

R

E

I l s o

f t

w a

r

e d i s i s

t

e m a

Le istruzioni in linguaggio macchina, come già più volte detto, sono sequenze lunghissime di bit 0

e 1. Risulta quindi davvero ostico manipolare le istruzioni, correggere un eventuale errore, o anche

solo eseguire delle semplici istruzioni. La necessità di accedere alle informazioni in maniera

semplificata ha portato alla nascita di una interfaccia virtuale. Essa ha il compito di nascondere i

dettagli interni dell’hardware, presenta informazioni su ciò che accade in una maniera che non

richieda la conoscenza approfondita del sistema, consente all’utente in modo facile a tutte le

risorse disponibili del computer, evita danni intenzionali o accidentali all’hardware, programmi e

dati. Tale interfaccia si chiama software di sistema. Il software di sistema è una raccolta di

programmi che creano una sorta di “macchina virtuale” tra l’utente e la macchina. Il software ha il

a b c

compito di rendere operazioni come una somma di due numeri e , per la quale si dovrebbe

b c

caricare i registri ALU dalle celle di memoria e , attivare l’ALU, attivare l’output del circuito di

a

addizione ed inviare il risultato alla cella di memoria , semplici e di facile utilizzo. Il

programmatore non dovrebbe sapere nulla di ALU, registri e celle di memoria, ma dovrebbe

semplicemente scrivere questa istruzione con una notazione più vicina al suo linguaggio, come ad

a=b+c

esempio “a=b+c”. Per concludere, il compito del software di sistema è “capire” la scrittura

e tradurla in tutte quelle operazioni descritte in precedenza.

T i p

i d i s

o

f t

w a r

e d i s

i s t

e m

a

Il software di sistema non è un pezzo unico, ma è una raccolta vasta di tanti programmi, ognuno

sistema operativo

con un suo compito specifico. Il software più importante è senza dubbio il , che

ha il compito di comunicare con l’utente e, quando è necessario, attivare altri software o

programmi di utilità per esaudire le sue richieste. I più importanti tra questi sono:

Interfaccia utente : Tutti i moderni sistemi operativi forniscono una potente interfaccia

utente grafica, che fornisce all’utente una visione intuitiva delle funzionalità disponibili.

Traduttori : Questi programmi consentono di programmare usando un linguaggio di alto

assemblatori compilatori interpreti

livello orientato all’utente ( , e ).

Gestori di memoria e di informazioni : Questi programmi si occupano della gestione dei

dati e delle informazioni in memoria. Ad esempio, spetta ai gestori di memoria di

leggere le istruzioni su un dispositivo di memoria e di caricarlo nella RAM per l’effettiva

esecuzione.

Sistemi di I\O : Software che consentono di utilizzare efficacemente i dispositivi di I\O.

Scheduler : Gli scheduler sono dei software che permettono l’uso di più programmi

“simultaneamente”. Operando secondo un principio logico di priorità, gli scheduler

inseriscono i programmi in un elenco di esecuzione e dedicano ad ognuno di essi un

tempo di esecuzione, terminato il quale passano al prossimo programma per poi

ritornare al primo in un secondo momento. Ciò porta alla credenza intuitiva che più

operazioni vengano svolte contemporaneamente.

Programmi di utilità : Programmi di vario genere talvolta raccolti in librerie di

programmi. R S – C S

4 II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

I NN

FF

OO

RR

M

AA

TT

II

CC

AA

I M

N

F

O R M

A T I

C A

I l l i n

g u a

g g i o a

s s

e m b

l a

t

i v o

La necessità di un linguaggio che faciliti l’accesso ai servizi del computer si presenta

immediatamente nella fase di progettazione di un software. I programmatori si accorsero subito di

linguaggio assembly

questa necessità e inventarono il cosiddetto (assemblativo). Oggi i linguaggi

assembly sono più comunemente denominati linguaggi di basso livello in quanto il rapporto di

conversione è di 1:1; ad ogni istruzione assembly corrisponde una in linguaggio macchina. Colui

assemblatore

che traduce una istruzione dal linguaggio assembly al linguaggio macchina si chiama .

A l l o

c a z i o n

e e f f i c i e n t

e e s

i c u r a d e l l e r

i s o

r s

e

Abbiamo già accennato alla grande differenza di velocità tra i sistemi di I\O ed il processore, ed

Personal Computer

alle funzioni dello scheduler per evitare che il PC ( ) rimanga inattivo. Per capire

come potrebbe funzionare uno scheduler, consideriamo tre stati in cui può venire a trovarsi un

Attesa

programma: , programmi che non possono essere eseguiti perché sono in attesa che si

Pronto

completi una “lenta” operazione di I\O o un altro evento lungo, , cioè caricato in memoria

Esecuzione

e pronto per essere eseguito, ed . Lo scheduler gestisce i programmi curandosi che ci

Esecuzione

sia sempre almeno un programma in . Ad esempio, se un programma A è in esecuzione

Attesa

ma necessita di una operazione di input/output lo scheduler sposta A in e mette in

Esecuzione Pronto

il programma scelto da con priorità maggiore.

Le risorse vanno usate non solo in modo efficiente, ma anche in maniera sicura. Va quindi

impedito a programmi e utenti, per quanto possibile, di eseguire operazioni che potrebbero

deadlock

causare il blocco del sistema, cioè di generare un (stallo). Un esempio di situazione di

stallo può essere quando ad esempio un programma A ed un programma B necessitano a vicenda

algoritmi di

di un file che è al momento in uso dall’altro. Per questo motivo sono stati ideati gli

risoluzione dello stallo

. Il metodo ad oggi usato per contrastare lo stallo generato dall’esempio

prevenzione del deadlock

precedente è l’algoritmo della , che prescrive: “Se un programma non è

in grado di ottenere tutto ciò che gli serve per essere eseguito, allora liberi tutte le risorse , e

invii una richiesta completamente nuova”.

P a

n o r

a m i c a s

t

o r

i c a s u

l l o s

v i l u

p

p o d e i s

i s

t

e m

i o

p

e r

a t

i v i

Durante la prima generazione i software di sistema disponevano unicamente di assemblatori e

loader (un gestore di memoria) e non disponevano neanche di un vero e proprio sistema

operativo. I programmatori dovevano prenotarsi un periodo di tempo per l’utilizzo della sala del

calcolatore e portare con sé i dati su dispositivi di memorizzazione, causando una grossa perdita

di tempo, poiché il computer rimaneva a lungo inattivo a causa delle organizzazioni logistiche

sistemi operativi a

dell’uomo. La seconda generazione di software di sistema vede la nascita dei

batch (“a lotti”). Questi sistemi erano dotati di più “lotti” dove più programmatori potevano inserire

ciascuno il proprio input. Questi venivano gestiti da un Computer di I\O, che li trasferiva uno ad

uno al computer principale, che dopo l’elaborazione restituiva singolarmente gli output, eliminando

quasi del tutto i periodi di inattività. A metà degli anni ’60 tuttavia la velocità di elaborazione

aumentò notevolmente, ed i progettisti cominciarono a studiare come sfruttare i millisecondi di

sistemi operativi multi-programma

inattività. Nacquero così i . Come accennato infatti, durante la

seconda generazione era possibile accogliere più richieste contemporaneamente, ma il computer le

svolgeva singolarmente, una dopo l’altra. Questa terza generazione di sistemi operativi consentiva

invece al computer di svolgere più programmi contemporaneamente, secondo lo stesso principio

adottato dagli scheduler. Negli stessi anni nacque un’altra variante dei sistemi multi-programma. Si

time-sharing

tratta del sistema . Questa variante permetteva ai programmatori seduti al loro

online

terminale di inserire i dati in tempo reale, anziché dover inviare tutto l’input insieme,

consentendo al calcolatore principale di cominciare subito ad elaborare i dati. L’idea di base in un

round-robin

sistema time-sharing è quella di servire molti utenti in un meccanismo circolare, detto ,

fornendo a ciascuno un piccolo intervallo di tempo e poi passando al successivo. All’inizio degli

anni ’80 apparvero i primi personal computer, anche se erano inizialmente collegati ad un macro-

sistema time-sharing. Quando questi però si fecero via via più potenti, divennero totalmente

sistemi operativi di

indipendenti. A partire dal 1985 ad oggi si sviluppò una quarta generazione, i

rete . Un sistema operativo gestisce non soltanto le risorse di un singolo computer, ma anche le

R S – C S 5

II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

I NN

FF

OO

RR

M

AA

TT

II

CC

AA

I M

N

F

O R M

A T I

C A

Local Area Network

funzionalità di un sistema di telecomunicazioni: la LAN ( ). Questa è una rete

localizzata in un’area geograficamente contigua (come un campus), che mette in comunicazione

attraverso dei cavi, i PC con un server principale che contiene tutte le risorse condivise. Negli anni

sistemi embedded annegati

’90 nacquero infine i (o ). Questi sono dei mini computer inseriti in altri

sistema operativo real-

oggetti, da aerei a forni a microonde, da automobili a orologi, forniti di un

time , che gestisce le specifiche risorse dei computer embedded in tempo reale ed in intervalli di

tempo fissati, assegnando ad ogni richiesta un priorità. Un sistema operativo real-time lascia che i

passeggeri di un aereo stiano al freddo per qualche secondo quando si presenta il problema di

evitare una collisione in volo.

I l i n g u a

g g i d i t

e r

z a g e n e r

a z i o n

e

I linguaggi di programmazione detti “ad alto livello” (o di terza generazione) sono stati creati per

avvicinarsi all’utente più di quanto non lo facesse il linguaggio assembly. Sono nati così i

compilatori , che, invece di tradurre direttamente in codice oggetto (linguaggio macchina),

traducono la scrittura ad alto livello (che ha un rapporto di uno a molti) in assembly, che

successivamente, un assemblatore interno tradurrà in codice oggetto. L’obiettivo è quello di poter

X

scrivere programmi contenenti la sola istruzione “Risolvi il problema ”. linguaggi procedurali

I primi linguaggi di programmazione ad alto livello sono i cosiddetti (detti

imperativi

anche ). Un programma scritto in linguaggio procedurale esegue le istruzioni in modo

sequenziale, in linea con il modello di Von Neumann; sta al programmatore inserire nell’ordine

giusto gli imperativi da eseguire. La filosofia adottata per stilare un codice in linguaggio

Divide et Impera

procedurale è chiamata “ ”, una metodologia di suddivisione del problema in sotto-

problemi. Dividendo il problema in porzioni più piccole è possibile governare la complessità che

altrimenti ci sovrasterebbe se si guardasse il problema nella sua interezza.

Ma questo non è l’unico approccio possibile nella programmazione: è nata infatti, e ad oggi è la

programmazione orientata agli oggetti

più usata, la . Si tratta di un paradigma di programmazione

che permette di definire oggetti software in grado di interagire gli uni con gli altri attraverso lo

scambio di messaggi. La programmazione ad oggetti prevede di raggruppare in una zona

circoscritta del codice sorgente (chiamata classe) la dichiarazione delle strutture dati e delle

procedure che operano su di esse. Le classi, quindi, costituiscono dei modelli astratti, che a

tempo di esecuzione vengono invocate per instanziare o creare oggetti software relativi alla classe

invocata. Questi ultimi sono dotati di attributi (dati) e metodi (procedure) secondo quanto

incapsulamento ereditarietà

definito/dichiarato dalle rispettive classi. Le proprietà principali sono , e

polimorfismo Il primo termine si riferisce al fatto che ogni classe ha i propri metodi per svolgere

delle sottoattività, e questi sono noti unicamente alla classe stessa, “incapsulati” in essa.

L'ereditarietà permette essenzialmente di definire delle classi a partire da altre già definite. In

pratica partendo da una classe A, si può creare una classe B che sappia svolgere tutti i compiti

di A senza dover riscrivere il codice, con la possibilità di inserire altre sottoattività svolgibili dalla

classe B. Passiamo ora all'ultimo concetto base dell'OOP, il cosiddetto polimorfismo che è

strettamente collegato alle dinamiche proprie dell'ereditarietà; con il polimorfismo è possibile

originare comportamenti e risultati diversi impiegando i medesimi metodi a carico di oggetti

differenti.

C o m p

i l a

t o

r i e t

r a

d u

z i o n

e d i l i n

g u

a g g i

I compilatori svolgono la loro funzione (tradurre il linguaggio ad alto livello) attraverso quattro fasi:

Analisi lessicale : Il compilatore esamina i singoli caratteri nel programma sorgente e li

1 ) raggruppa in unità sintattiche chiamate token, e per ciascuno ne individua il tipo (un simbolo,

un operatore, etc.). Questa operazione è analoga al raggruppamento di lettere in parole.

Analisi sintattica : La sequenza di token creata nella frase precedente viene controllata per

2 ) verificarne la correttezza sintattica secondo le regole del linguaggio di programmazione. In

altre parole il compilatore verifica che i token che si susseguono sono disposti in modo

corretto dal punto di vista grammaticale.

Analisi semantica e generazione del codice : Se l’istruzione del linguaggio è sintatticamente

3 ) corretta, il compilatore ne analizza il significato. Se una istruzione è sintatticamente corretta,

R S – C S

6 II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

I NN

FF

OO

RR

M

AA

TT

II

CC

AA

I M

N

F

O R M

A T I

C A

ma non ha significato, viene semanticamente scartata. Se invece il compilatore capisce il senso

delle istruzioni da eseguire, genera l’appropriata sequenza di istruzioni in linguaggio macchina.

Ad esempio la frase “la donna morse il cane” supererebbe la fase 2, ma certamente verrebbe

scartata nella fase di analisi semantica.

ttimizzazione del codice

O : Il compilatore a questo punto preleva il codice generato e verifica

4 ) se può essere reso più efficiente, rendendone l’esecuzione più veloce o facendo sì che occupi

meno memoria. R S – C S 7

II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

G LL

OO

SS

SS

AA

RR

II

OO

G L

O S

S

A R I

O

G

l

o s s a

r

i

o Principi di Informatica

Informatica: Letteralmente “informazione automatica”. L’informatica è lo studio degli algoritmi.

Algoritmo: Sistema di regole e procedure di calcolo ordinate, ben definite ed effettivamente

computabili che portano alla soluzione di un problema con un numero finito di operazioni.

Pseudocodice : Costrutti in lingua naturale studiati per “avvicinarsi” al linguaggio di

programmazione. Rappresenta un compromesso tra linguaggio naturale e linguaggio di

programmazione.

Campionamento del suono: Per memorizzare una forma d’onda che rappresenta un suono, il

segnale analogico deve prima essere digitalizzato. Per fare ciò si utilizza il campionamento, ossia la

registrazione a intervalli fissi del valore che l’entità del segnale ha assunto rispetto al riferimento 0.

MP3: Formato audio di codifica livello audio 3. Esegue il campionamento ad una frequenza di

44100 campioni/sec, usando 16 bit per campione.

ASCII: Mappatura dei codici convenzionalmente più utilizzata per rappresentare informazioni

testuali. Utilizza 8 bit, ed è dunque in grado di rappresentare 256 caratteri.

Pixel: Il processo di campionamento delle immagini (scansione), consiste nella misurazione di valori

di intensità di punti distinti situati a intervalli regolari su tutta la superficie dell’immagine. Questi

sono chiamati pixel.

Compressione run-lenght: Tecnica di compressione senza perdita dei dati che riunifica una

sequenza di dati che si ripetono in una coppia (v,n) che ripete n volte il dato v.

Compressione variable-lenght: Tecnica di compressione senza perdita dei dati che utilizza set di

codici a lunghezza variabile. In particolare, utilizza codici più corti per i dati che vengono più

comunemente inseriti.

Transitor: Il componente fondamentale dei sistemi informatici, realizzato in silicio e arseniuro di

gallio. Possiede due stati energetici (ACCESO/SPENTO) che si conformano al sistema di

numerazione binaria. Ciascun transitor contiene tre connettori, due di ingresso e uno di uscita: il

controllo che determina l’apertura/chiusura dell’interruttore, il collettore, dal quale proviene la

tensione, e l’emettitore.

Chip: Dispositivi noti anche come circuiti integrati. Sono un insieme di transitor e percorsi

conduttivi elettrici che li collegano.

Logica Booleana: Logica matematica che si basa sui principi di vero e falso. Su questi si basano le

porte logiche dei circuiti integrati. Le principali operazioni booleane sono AND, OR e NOT.

Porte logiche: Una porta logica è un dispositivo elettronico che opera su un insieme di ingressi

binari per produrre un uscita binaria desiderata.

Porta logica NOT: Si realizza con un solo ingresso binario. Se nel transitor passa la corrente l’uscita

della porta visualizzerà il valore contrario, ossia 0. Altrimenti visualizzerà 1.

Porta logica AND: Si realizza collegando in serie due transitor e mettendo nell’uscita della porta,

una porta NOT.

Porta logica OR: Si realizza collegando due transitor in parallelo e mettendo nell’uscita della porta,

una porta NOT.

Circuito comparatore: Circuito che compara due numeri interi senza segno

Multiplexer: È un circuito di controllo che ha 2^n linee di ingresso ed una linea di uscita. La sua

funzione è quella di selezionare la sola linea di ingresso desiderata tramite le n linee di selezione e

copiarne il valore sulla linea di uscita.

Decodificatore: È un circuito di controllo che possiede n linee di ingresso e 2^n linee di uscita. È

compito del decodificatore determinare il valore rappresentato sulle n linee di ingresso , quindi

inviare un segnale alla linea di uscita, tra le 2^n uscite, a cui corrisponde quel valore. Hardware

Architettura di Von Neumann: Struttura di base dei computer moderni. È costituito da quattro

componenti principali: Memoria, Input/Output, ALU e unità di controllo. Il modello di Von

Neumann si basa sul concetto di programma memorizzato, in cui le istruzioni che il computer deve

eseguire sono rappresentate come valori binari e registrate in memoria, e sull’esecuzione di

programmi in ordine sequenziale.

R S – C S

1 II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

G LL

OO

SS

SS

AA

RR

II

OO

G L

O S

S

A R I

O

RAM(Random Access Memory): La memoria principale di un computer che gestisce i dati in

:memoria temporaneamente, mentre il computer è in funzione. È organizzato in celle, ciascuna delle

quali ha un indirizzo univoco. La cella standard è di 8 bit (1 byte).

ROM(Read-Only Memory): È una memoria ad accesso casuale che consente la sola lettura dei file,

in cui le informazioni sono state precaricate durante la produzione.

Read: Operazione di lettura dei file. Preleva una copia del contenuto della cella di memoria con

l’indirizzo indicato e restituisce tale contenuto come risultato dell’operazione.

Write: Operazione di scrittura dei file. Immagazzina il valore specificato nella cella indicata

dall’indirizzo. (il previo contenuto va perduto e sovrascritto).

MAR e MDR: Sono rispettivamente il registro degli indirizzi (Memory Address Register) e dei dati

letti/scritti (Memory Data Register).

Fetch/Store: Rispettivamente lettura/scrittura. Sono i segnali F e S di cui si serve il controllore di

lettura/scrittura per determinare quale operazione eseguire.

Memoria cache: Memoria ad altissima velocità, costruita secondo il principio di località che

afferma che quando un dato viene utilizzato, questo verrà probabilmente riutilizzato a breve, e così i

suoi “vicini”. In questa memoria vengono appunto salvati i file utilizzati più recentemente, rendendo

quasi superflua la realizzazione di una intera memoria RAM ad alta velocità. È ovvio che prima di

tutto un computer cerca un file sulla memoria cache, e solo dopo, nel caso in cui non viene trovato,

passa alla RAM.

Dispositivi I/O: Sono dispositivi che consentono al computer di interagire con il mondo esterno oltre

che di memorizzare informazioni.

Memoria di massa: Dispositivo di Input/Output che consente una memorizzazione non volatile

delle informazioni.

DASD(Direct Access Storage Device): Dispositivo di memoria di massa ad accesso diretto, dove

ogni unità di informazione ha sempre un indirizzo univoco, ma a causa dell’organizzazione in tracce

(ognuna delle quali contiene un numero fissato di settori), il tempo di accesso è differente.

SASD(Sequential Access Storage Device): Dispositivo di memoria di massa ad accesso sequenziale,

dove, per trovare un dato, vengono esaminati tutti in sequenza uno per volta. Questo dispositivo è

molto più lento del DASD, ma è utile quando occorre che vengano visualizzati tutti i dati in memoria

uno per volta, ad esempio nell’esecuzione di un backup.

Controllore I/O: Dispositivo che si occupa di gestire i dettagli delle operazioni di ingresso e uscita e

di compensare qualsiasi differenza di velocità tra dispositivi I/O e altre parti del PC. Dispone di una

piccola quantità di memoria per salvare temporaneamente i file (buffer I/O).

ALU(Arithmetic-Logic Unit): È il sottosistema che esegue operazioni matematiche e logiche come

addizione o confronto. Insieme all’unità di controllo costituisce il processore di un calcolatore. È

costituito da tre componenti: i registri, le interconnessioni tra le componenti e la circuiteria. I

registri sono simili alle celle di memoria ad accesso casuale, e hanno il compito di contenere gli

operandi ed i risultati. La circuiteria esegue le operazioni necessarie attraverso i circuiti e porte

logiche necessari.

Unità di Controllo: L’unita di controllo è quella componente del processore che si occupa

dell’intero funzionamento del calcolatore, gestendo le operazioni necessarie: prelevare (fetch) dalla

memoria la prossima istruzione da eseguire, decodificarla (decode) ed eseguirla (execute) inviando il

comando appropriato alla componente opportuna (ALU, Dispositivo I/O,…,RAM).

RISC(Reduced Instruction Set Computers): Filosofia di progettazione di un processore che predilige

la riduzione al minimo della complessità dei circuiti hardware e quindi alla riduzione del set di

istruzioni per impiegare maggior spazio nell’ottimizzazione della velocità di scambio dei dati.

CISC(Complex Instruction Set Computers): Filosofia di progettazione opposta al RISC che consiste

nell’inclusione di un numero elevato di istruzioni all’interno del set. I calcolatori moderni utilizzano

una commistione delle due filosofie.

PC(Program Counter): Componente dell’unità di controllo. Il contatore di programma contiene

l’indirizzo della successiva istruzione da eseguire. È come un puntatore che specifica a quale

indirizzo in memoria deve andare l’unità di controllo per ottenere la prossima istruzione. Con questo

scopo l’unità di controllo invia il contenuto del contatore di programma al registro MAR. dopo

ciascuna operazione il PC viene incrementato di 1, ed è questo il motivo per cui spesso è fornito di

un proprio circuito di incremento.

R S – C S 2

II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

G LL

OO

SS

SS

AA

RR

II

OO

G L

O S

S

A R I

O

Software

Software: Interfaccia tra utente e hardware che svolge attività come presentare informazioni su ciò

che accade nel calcolatore senza che l’utente necessiti una conoscenza approfondita del sistema, o

consentire un facile accesso a tutte le risorse disponibili. Tale interfaccia è il software di sistema.

Macchina virtuale: Il software è una raccolta di programmi (costituito quindi da set di istruzioni, e

non da componenti fisiche reali) che gestiscono le risorse di un computer e ne facilitano l’accesso.

L’insieme di tali servizi creati dal software si chiama macchina virtuale.

Sistema operativo: È il programma che controlla le attività complessive del computer. E il software

di sistema principale di un calcolatore, che gestisce tutti gli altri software.

Interfaccia utente: Interfaccia grafica che consente all’utente la visualizzazione semplificata di ciò

che accade nel calcolatore o di ciò che si sta eseguendo.

Traduttori: Questi software consentono di programmare utilizzando un linguaggio di livello

superiore orientato all’utente, invece del linguaggio macchina (sequenze di bit 0 e 1). I traduttori

esistenti sono gli assemblatori, i compilatori e gli interpreti.

Gestori di memoria: Questi programmi allocano spazio in memoria per programmi e dati e lo

recuperano quando non è più utilizzato. Un esempio importante è il loader, che ha il compito di

leggere le istruzioni di un programma eseguibile che risiede su un dispositivo di memoria di massa e

di caricarle nella memoria per l’effettiva esecuzione.

Gestori di informazioni: Programma che consente l’organizzazione gerarchica dei dati in cartelle e

directory.

Scheduler: Programma che gestisce l’ordine di esecuzione dei programmi secondo delle variabili

come indice di priorità, tempo massimo di esecuzione e altri fattori. Questo rende possibile

l’esecuzione di più programmi “contemporaneamente”. Ai nostri occhi vengono eseguiti nello stesso

istante, ma in realtà è lo scheduler che, ad esempio, una volta che sia scaduto il tempo massimo di

esecuzione, passa ad un programma successivo, per ritornarci in un secondo momento.

Linguaggio “Assembly”: Più comunemente noti come linguaggi di basso livello, i linguaggi

assemblativi fanno corrispondere un’istruzione ad una precisa sequenza binaria (rapporto 1:1)

Linguaggi di alto livello: Sono linguaggi di programmazione più orientati verso l’utente che verso

la macchina, che fanno corrispondere ad una istruzione, più istruzioni in linguaggio macchina.

Assemblatore: Software traduttore che traduce il programma sorgente (scritto in linguaggio

assembly) in programma oggetto (scritto in linguaggio macchina)

Deadlock: Situazione di stallo.

Sistema operativo multi-programma: Sistema operativo di terza generazione in cui molti

programmi sono caricati simultaneamente in memoria

Compilatore: Traduttore adibito alla traduzione dei linguaggi di alto livello. Solitamente anziché

tradurre direttamente in codice oggetto, traducono le istruzioni in un linguaggio più vicino a quella

macchina, e poi lasciano l’ultima parte ad un altro traduttore.

Linguaggio procedurale: Linguaggio basato su sequenze di istruzioni di carattere sequenziale del

tipo preleva-decodifica-esegui.

Incapsulamento: Proprietà dei linguaggi di programmazione orientati gli oggetti. Ogni classe ha i

propri metodi per svolgere ciascuna delle sue sottoattività. Ogni utente può chiedere a un oggetto

della stessa di richiamare il metodo appropriato per svolgere una determinata sottoattività, in modo

da svolgerla senza che necessiti di conoscere tale metodo, che rimane “incapsulato” nella classe.

Ereditarietà: Proprietà dei linguaggi di programmazione orientati gli oggetti. Gli oggetti possono

infatti ereditare alcune componenti scelte da quelle degli oggetti di un’altra classe, creando un

oggetto che appartiene alla stessa, ma a cui si possono aggiungere altre proprietà, col vantaggio che

non si è dovuto creare il programma da zero.

Polimorfismo: Proprietà dei linguaggi di programmazione orientati gli oggetti. Gli oggetti possono

fornire servizi che logicamente dovrebbero avere lo stesso nome ma differiscono nei dettagli.

Debugging: È il processo in cui si individuano e correggono gli errori di programma.

Benchmarking: Processo di collaudo di un software. Consiste nell’eseguirlo con dei dati che siano

funzionali per capire se le capacità del software rientrano nei limiti richiesti.

Token: Unità sintattiche di cui si serve un compilatore durante la fase di analisi lessicale. Sono

gruppi di singoli caratteri che insieme hanno un senso per il compilatore.

Programma sorgente: Insieme di dati e istruzioni espressi in linguaggio di alto livello.

Programma oggetto: Insieme di dati e istruzioni espressi in linguaggio macchina.

R S – C S

3 II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

D AA

TT

AA

BB

AA

SS

EE

D A T A B

A S

E

I S I

I S

T

E M

I N

F

O

R M

A

T

I V I

1°concetto: “Sistema Informativo”

Componente di una organizzazione che gestisce le informazioni di interesse. Le sue funzioni sono:

Acquisizione, conservazione, elaborazione e distribuzione/scambio delle informazioni.

N.B. : Informativo è diverso da Informatizzazione. Il sistema informativo è indipendente da qualsiasi

automatizzazione, anche se esiste la possibilità di coadiuvare la gestione dei dati con la potenza dei

calcolatori.

2°concetto :”Differenza tra Informazione e Dato”

- Informazione: Notizia, dato o elemento che consente di avere conoscenze più o meno esatte di fatti,

situazioni.

- Dato: Ciò che è immediatamente presente alla conoscenza. Ciò che si conosce prima di ogni elaborazione.

3°concetto : “Base di dati (Database)”

Insieme organizzato di dati utilizzati per il supporto allo svolgimento delle attività di una organizzazione.

Con riferimenti alla tecnologia, è un insieme organizzato di dati gestiti per mezzo di un DBMS (Data Base

Management System), un software che permette una gestione dei dati più affidabile ed efficiente. Questo è

un perfetto esempio di come l’Informatizzazione può coadiuvare un Sistema Informativo. Le basi di dati

hanno le seguenti caratteristiche: grandezza(1), persistenza(2) e condivisione(3).

1. Sono blocchi di dati generalmente più grandi della memoria principale, e per questo vanno allocati in

una memoria secondaria.

2. Le basi di dati possiedono un ciclo di vita.

3. Una base di dati è una risorsa condivisa e integrata tra le varie applicazioni.

4°concetto : “Schemi e istanze”

In ogni base di dati esistono:

• Schema: sostanzialmente invariante nel tempo che ne descrive la struttura (aspetto intensionale): sul

modello relazionale, per esempio, le intestazioni delle tabelle.

• Istanza: (aspetto estensionale) i valori attuali che possono cambiare anche molto rapidamente.

5°concetto : “Architettura di un DBMS”

Database Schema interno Schema logico Utente.

- Schema logico: Descrizione della base di dati secondo un modello logico.

- Schema fisico(interno): La rappresentazione dello schema logico per mezzo di strutture di

memorizzazione(file).

N.B. : Il livello logico è indipendente da quello fisico. In altre parole, una rappresentazione logica rimane

tale, qualunque sia la sua rappresentazione fisica, che potrebbe anche variare nel tempo.

6°concetto : “Modelli di dati”

Insieme di costrutti utilizzati per organizzare i dati di interesse e descrivere le operazioni su di essi.

Distinguiamo due tipi di modelli:

Modelli logici: Descrivono l’organizzazione dei dati nei DBMS “visibile all’utente”. Sono

o indipendenti dalle strutture fisiche (ex: Relazionale, Reticolare, Gerarchico, a Oggetti..)

Modelli concettuali: Rappresentano i dati della realtà di interesse, in termini di un modello formale

o ad alto livello. Sono indipendenti dal DBMS. Descrivono i concetti del mondo reale. Sono utilizzati

nella prima fase della progettazione. Il più usato è “Entity Realtionship”

7°concetto : ”Linguaggi per basi di dati”

DDL(Data Definition Language): Linguaggio che opera sullo schema.

DML(Data Manipulation Language): Linguaggio che opera sulle istanze (sui dati). 1

R S – C S

II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

D AA

TT

AA

BB

AA

SS

EE

D A T A B

A S

E

Il linguaggio SQL (linguaggio testuale interattivo) è un linguaggio di definizione e manipolazione dei dati, in

quanto permette di selezionare dati di interesse dalla base e di aggiornarne il contenuto.

8°concetto : “Progettazione concettuale”

Progettare concettualmente una base-dati significa individuare gli oggetti (o entità) che la costituiscono e le

relazioni (o operazioni o associazioni) tra un oggetto e l'altro. Si tratta del livello più alto della progettazione

di un data-base, quello più vicino all'uomo e più lontano dalla macchina (hardware). Deve quindi essere

realizzata con strumenti e linguaggi comprensibili a tutti, non solo agli specialisti, e indipendenti dal sistema

di data-base. Una volta realizzato un diagramma concettuale occorre tradurre questo in schemi relazionali. È

possibile quindi passare al modello logico; a questo livello si deve scegliere il modello logico del DB che

può essere uno dei modelli classici (gerarchico, reticolare o relazionale).

9°concetto : “Schemi e modelli relazionali”

I modelli logici relazionali utilizzano un solo ingrediente, la tabella. Si basano sul concetto matematico di

relazione tra insiemi; la teoria dei DB relazionali può esprimersi in modo rigoroso usando il linguaggio della

logica formale o in alternativa quello dell'insiemistica. Il modello relazionale usa come struttura dati

fondamentale la relazione (o tabella).

La struttura base del modello relazionale è composta da :

- Uno o più attributi;

- Un tipo di dato ed un dominio su quel tipo, definito come l'insieme dei valori che può assumere un

determinato attributo;

- Un valore per ciascun attributo all'interno del dominio o tipo di dato consentito;

- Una tupla (o ennupla) cioè l'insieme non ordinato di valori assunti dagli attributi.

(Ex: “t[A]” Denota il valore della ennupla t sull’attributo A)

Un’insieme di schemi di relazione costituisce uno schema di base di dati.

Una tabella rappresenta una “relazione”, nel senso inteso in questo contesto, se e solo se:

a) I valori di ciascuna colonna sono tra loro omogenei. Ciascuna colonna ha intestazione differente.

b) I valori delle righe sono tutti diversi tra loro.

c) L’ordinamento di righe e colonne non ha alcuna influenza.

Esempio di tabella

- “Orario” è il nome della relazione (l’Entità).

- Le voci “Insegnamento” , “Docente”, “Aula” e “Ora”

sono gli attributi della tabella.

- Ognuna di queste voci può assumere determinati

valori, ad esempio “Insegnamento” può assumere i

valori di “Analisi matem.I”, “Chimica”, etc.

- Una riga rappresenta una ennupla.

- Un insieme di ennuple rappresenta una istanza.

10°concetto : “Vincoli di integrità”

Si definisce vincolo di integrità la proprietà che deve essere soddisfatta dalle istanze di basi di dati

che rappresentano informazioni corrette per l’applicazione. Un vincolo è una funzione booleana che

associa ad ogni istanza il valore Vero o Falso.

Tipi di vincoli:

1. Vincoli Intra-relazionali (coinvolgono una o più ennuple di una singola relazione)

1.1 Vincoli su valori(o di dominio): Vincoli di ennuple che coinvolgono un solo attributo

1.2 Vincoli di ennupla: Esprimono condizioni sui valori di una ennupla.

2. Vincoli Inter-relazionali (coinvolgono ennuple appartanenti a relazioni diverse)

Perché i vincoli?

Contributo alla “qualità dei dati”.

Utili nella progettazione (si vedrà la “normalizzazione”).

Usati dal sistema nell’esecuzione delle interrogazioni.

11°concetto : “Chiave”

2 R S – C S

II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

D AA

TT

AA

BB

AA

SS

EE

D A T A B

A S

E

Si definisce Chiave un insieme di uno o più attributi che identificano univocamente una ennupla di una

relazione (= non si possono avere all’interno di una tabella n valori uguali negli n attributi di una chiave in

ennuple diverse). Superchiave è un insieme di attributi che garantisce l’univocità delle ennuple di una

relazione. Se la superchiave è minimale (contiene solo elementi fondamentali per garantire l’unicità) allora

essa è una chiave. Ora alcune osservazioni su chiavi e vincoli:

Una relazione non può contenere ennuple uguali.

Ogni relazione ha come superchiave l’insieme degli attributi su cui è definita e quindi contiene

almeno una chiave.

Ad ogni schema associamo dei vincoli, e consideriamo lecite unicamente le istanze che soddisfano

tutti i vincoli

12°concetto : “Informazione incompleta”

Quando l’informazione di una istanza è incompleta, sconosciuta, si deve adoperare il valore nullo. Questi

denota l’assenza di un valore del dominio, infatti non è un valore del dominio, bensì un valore aggiuntivo.

Tipi di valore nullo:

1. Valore sconosciuto

2. Valore inesistente

3. Valore senza informazione (contiene caso (1) o caso (2) ma non è noto quale sia)

N.B. = I DBMS non distinguono i tipi di valore nullo; in pratica per un DBMS il valore nullo è sempre del

terzo tipo.

In generale, la presenza di valori nulli nelle chiavi deve essere limitata. Infatti la presenza di questi rende

impossibile identificare una ennupla.

13°concetto : “Chiave primaria”

Nel modello relazionale delle basi di dati la chiave primaria è un insieme di attributi che permette di

individuare univocamente una ennupla in una tabella o relazione. L'esistenza della chiave primaria, che al più

è formata da tutti gli attributi della relazione, è garantita dall'unicità delle ennuple (o tuple) individuate da

una relazione tra insiemi. Non è possibile che una tabella abbia definita al suo interno più di una chiave

primaria. Nessuna istanza nella tabella può avere l’attributo identificato dalla chiave primaria identico a

quello di una qualsiasi altra della stessa (vincolo di unicità): il tentativo di inserimento di tale istanza genera

un errore di violazione della chiave primaria. Una tabella deve obbligatoriamente possedere una e una sola

La chiave primaria si denota con la

chiave primaria. In una chiave primaria non sono ammessi Valori Nulli.

sottolineatura.

14°concetto: “Vincoli di integrità referenziale”

Informazioni in relazioni (tabelle) diverse possono essere correlati attraverso valori comuni. In particolare

valori delle chiavi primarie. Un vincolo di integrità referenziale (foreign key) fra gli X attributi di una

relazione R1 ed un’altra relazione R2, impone ai valori di X in R1 di essere uguali in R2. Sono riportati in

seguito un esempio di vincolo di integrità rispettato (1), ed un esempio di violazione del vincolo di integrità

referenziale.

(1) (2)

15°concetto : “Operazioni di manipolazione nei linguaggi per database”

- Interrogazione (query)

- Aggiornamento 3

R S – C S

II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

D AA

TT

AA

BB

AA

SS

EE

D A T A B

A S

E

Nel linguaggio SQL, tramite le Interrogazioni, è possibile selezionare i dati. Esistono però diversi linguaggi

di Interrogazione; ad esempio quelli Dichiarativi, che specificano le proprietà del risultato (che cosa), ed i

Procedurali, che specificano le modalità di generazione del risultato (come).

Infatti distinguiamo:

I. Algebra Relazionale Procedurale

II. Calcolo Relazionale Dichiarativo

III. QBE (Query by Example) Dichiarativo

IV. SQL (Structured Quey Language) Dichiarativo (intermedio)

Il SQL (IV) permette di specificare cosa cercare. Quando una interrogazione (query) viene eseguita

dall’elaboratore di interrogazioni (query processor) essa viene tradotta in un linguaggio procedurale interno

al sistema, il quale permette di specificare come accedere ai dati.

N.B. = Una interrogazione SQL viene eseguita su una base di dati, quindi su insieme di tabelle collegate tra

loro mediante il meccanismo delle chiavi esterne.

Il risultato di una interrogazione è una tabella. Quest’ultima è diversa dalle tabelle del modello relazionale,

infatti possono esserci righe duplicate e colonne omonime.

16°concetto : “Algebra relazionale”

L’algebra relazionale è costituita da un insieme di operatori su relazioni che producono una relazione. Gli

operatori sono:

Unione(OR), Intersezione(AND) e Differenza. Le relazioni sono insiemi e i risultati debbono

essere relazioni. È possibile applicare i tre operatori insiemistici solo a relazioni definite sugli

stessi attributi.

Ridenominazione (Rinomina di attributi)

Selezione (decomposizione orizzontale)

Proiezione (decomposizione verticale)

JOIN (Natural Join, Prodotto Cartesiano, Theta-Join)

è un operatore monodico, cioè che si applica ad una sola relazione. Esso ne lascia

La Ridenominazione

inalterato il contenuto ma ne modifica lo schema, cambiando il nome di uno o più attributi. La

Ridenominazione permette di trasformare due relazioni che hanno informazioni tra loro coerenti ma schemi i

cui nomi differiscono in modo da poter poi applicare su tali relazioni le altre operazioni dell’algebra

relazionale. La sintassi è: RENyx(R) [nella tabella R, rinomina y l’attributo x].

La Selezione è un operatore monodico. Produce una relazione il cui schema è identico a quello della

relazione selezionata(operando). La relazione ottenuta tramite una Selezione contiene un sottoinsieme delle

ennuple dell’operando, in particolare tutte e sole quelle che soddisfano una condizione definita dalla

selezione. La sintassi è: SEL (R) [nella tabella R, seleziona le ennuple che soddisfano ].

condizione condizione

La Proiezione è anch’esso un operatore monodico. Produce una relazione il cui schema è un sottoinsieme di

quello della relazione di partenza(operando). La tabella ottenuta tramite una proiezione contiene al massimo

un numero di ennuple pari a quello delle ennuple dell’operando, ed ha solo una parte dei suoi attributi.

Contiene solo quelli selezionati dall’operazione.

La sintassi è: PROJ (R) [produce una tabella aventi gli attributi x, y e z dell’operando R]

x, y, z

Attenzione: la tabella risultato dell’operazione di proiezione può contenere meno ennuple dell’operando se la

lista degli attributi della proiezione non è una superchiave dell’operando.

La Selezione e la Proiezione possono essere visti come operatori ortogonali, in quanto il primo esclude righe,

il secondo colonne. Combinandoli, si possono estrarre da una tabella importanti informazioni mirate.

Ricordiamo che proiezione e selezione possono cooperare in una sola relazione.

4 R S – C S

II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

D AA

TT

AA

BB

AA

SS

EE

D A T A B

A S

E

Esempio: Si desidera estrarre dalla tabella “IMPIEGATI” le seguenti informazioni: Matricola e Cognome

degli impiegati che guadagnano più di 50$ .

PROJ Cognome(SEL (IMPIEGATI))

Matricola, Stipendio>50

Il JOIN è uno dei più interessanti operatori dell’algebra razionale

poiché permette di correlare dati tra relazioni diverse. Natural JOIN:

Tipo di operatore che permette di correlare due o più tabelle sulla

base di valori uguali in attributi contenenti lo stesso tipo di dati.

Inner JOIN (interno): Tipo di JOIN in cui le righe delle

tabelle vengono combinate solo se i campi collegati con

JOIN soddisfano una determinata condizione.

Outer JOIN (esterno): Con l’Outer JOIN è possibile

estrapolare anche quei dati appartenenti ad una delle

tabelle che non verrebbero estrapolati con i tipi di JOIN

visti fin ora. Il JOIN esterno completa con valori nulli le

ennuple che verrebbero tagliate fuori da un JOIN interno. Ne esistono tre tipi:

1. JOIN esterno sinistro: Mantiene tutte le ennuple del primo operando estendendole con valori

nulli, se necessario.

2. JOIN esterno destro: Mantiene tutte le ennuple del secondo operando estendendole con

valori nulli, se necessario.

3. JOIN esterno completo: Mantiene tutte le ennuple di entrambi gli operandi estendendole con

valori nulli, se necessario.

Prodotto Cartesiano (a fianco): Si tratta di un JOIN su

relazioni senza attributi in comune. Contiene sempre un

numero di ennuple pari al prodotto delle ennuple degli

operandi. In pratica il prodotto cartesiano ha senso solo se

seguito da un operazione di selezione:

SEL (R1JOINR2)

condizione

Questa operazione in sequenza viene denominata con

Theta-JOIN e indicata in breve con la seguente sintassi:

R1JOIN R2. Caso particolare è quello in cui in

condizione

viene adoperato unicamente un operatore di

condizione

uguaglianza; in tal caso si parla di Equi-JOIN.

Join esterno sinistro join esterno destro join esterno completo

17°concetto: “Selezione con valori nulli ”

La selezione - SEL (Impiegati) – produce una risultato solo per valori non nulli. Per riferirsi ai valori

età>40

nulli esistono forme apposite di condizione, quali “IS NULL” e “IS NOT NULL”. 5

R S – C S

II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A

S I A I G

II

SS

TT

EE

M II N FF

O RR

M

AA

TT

II

VV

II ZZ

II

EE

NN

DD

AA

LL

II PP

EE

RR NN

GG

EE

GG

NN

EE

RR

II

AA EE

SS

TT

II

OO

NN

AA

LL

EE

S I A I G

M N O M

I

S

T E M I N F

O R M

A T I

V

I Z I

E N D

A L

I P

E R N

G

E G

N

E R I

A E S

T I

O N

A L

E

S

Q L – I N

T E R R O G

A Z I

O N

E D

E II DD

AA

TT

AA

BB

AA

SS

EE

S

Q L – I N

T E R R O G

A Z I

O N

E D

E

I N

T E R R O G

A Z I

O N

E D

E I D

A T A B

A S

E

S Q L

(Structured query language)

Per operare su un database relazionale è stato progettato il linguaggio standard SQL. È, come già

accennato, un linguaggio di interrogazione e manipolazione del database e delle informazioni in esso

contenute. Non è un linguaggio procedurale, ma dichiarativo (intermedio). L’SQL è così diviso:

DDL: Per definire la struttura del database;

DCL(Data Control Language): Per gestire i criteri di protezione e di accesso ai dati;

DML: Per operare su informazioni e dati;

Definizione dei dati in SQL (DDL)

Nel SQL le istruzioni principali del DDL sono tre:

1. CREATE : Per la creazione di database, tabelle, indici.

2. ALTER : Per la modifica della struttura di una tabella o di altri oggetti interni ad una base di dati.

3. DROP : Per l’eliminazione di una tabella, di un intero database o di altri oggetti.

CREATE TABLE definisce uno schema di relazione e ne crea una

istanza vuota. Specifica attributi {Matricola, Nome, Cognome,

etc}, Domini {CHAR(6), NUMERIC(9), etc} e Vincoli {PRIMARY

KEY, NOT NULL}. L’espressione UNIQUE serve a definire una

ulteriore chiave nella relazione. Nel caso a fianco, con

“UNIQUE (Cognome,Nome)” il programmatore ha definito

l’insieme degli attributi Cognome e Nome come chiave,

garantendo che le coppie di valori presenti nelle due colonne

siano diverse.

Per definire una tabella è necessario definire gli attributi e il dominio degli stessi. I domini sono quelli

tipici di ogni linguaggio di programmazione, come numeri interi (int), numeri floating-point (float,

double, real), stringhe di caratteri(char), date (data, time). Ogni attributo può anche essere

caratterizzato da un valore di default ed una serie di vincoli (per esempio “NOT NULL” per i campi

obbligatori di una tabella). Tra i vincoli vi è la possibilità di

aggiungere un attributo alla PRIMARY KEY. Esiste la possibilità

di definire un dominio (semplice) utilizzabile nella definizione di

relazioni, anche con Vincoli e valori di Default.

Sintassi: “ CREATE DOMAIN Nome Dominio

AS [default][vincoli]

TIPO-DI-DOMINIO

CHECK ( ) “

condizioni-particolari

Vincoli

(NOT NULL, PRIMARY KEY, UNIQUE, CHECK)

Vincoli intrarelazionali

Vincoli relativi ad un singolo valore di ogni singola tupla (Vincoli di dominio e vincolo NOT

NULL).

Vincoli che coinvolgono più valori di una singola tupla (Ex: avendo gli attributi “Studente”,

“Materia”, “Voto” e “Lode”, un possibile vincolo di

questo tipo potrebbe essere che “Lode” può essere

assegnato se e solo se “Voto” ha il valore 30).

Vincoli che coinvolgono più tuple di una singola

tabella. (REFERENCES, FOREIGN KEY)

Vincoli inter-relazionali

Questi permettono di definire vincoli di integrità

referenziale. Distinguiamo una sintassi per singoli attributi

ed una per più attributi. ALTER DOMAIN, ALTER TABLE, DROP DOMAIN, DROP TABLE.

Altre operazioni su schemi R S – C S 1

II

CC

CC

AA

RR

DD

OO CC

II

M

EE

CC

AA LL

AA

UU

DD

II

OO CC

II

M

EE

CC

AA

R S – C S

M M

I

C C A R D

O C I

M

E C A L

A U D I

O C I M

E C A


PAGINE

35

PESO

1.86 MB

PUBBLICATO

+1 anno fa


DETTAGLI
Corso di laurea: Corso di laurea in ingegneria gestionale (AGRIGENTO, PALERMO)
SSD:
Università: Palermo - Unipa
A.A.: 2013-2014

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher RiccardoScimeca di informazioni apprese con la frequenza delle lezioni di Sistemi informativi aziendali e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Palermo - Unipa o del prof Pilato Giovanni.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Corso di laurea in ingegneria gestionale (agrigento, palermo)

Riassunto esame Statistica, prof. Lombardo, libro consigliato MatMix - Probabilità e Statistica per ingegneri, Alberto Lombardo
Appunto
Marketing management
Appunto
Economia applicata all'ingegneria - Appunti
Appunto
Economia Aziendale
Appunto