Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio...

103
Tesina di Basi di Dati AA 1999-2000 Gruppo 5: Govi, Mazzoni - 1 - PRESENTAZIONE TESTO INTEGRALE DELLE SPECIFICHE e corrispondente FILTRAGGIO DELLE AMBIGUITÀ Si riporta qui il testo con le specifiche richieste dal database, e si effettua un primo filtraggio delle ambiguità a partire dai requisiti espressi in linguaggio naturale riportando, dove occorre, la corrispondente ‘traduzione’ sintattica su cui costruire lo ‘schema scheletro’ che, opportunamente raffinato, costituirà la base dell’entity relationship definitivo. “Una nota agenzia giornalistica, con sede principale a Roma e sedi sussidiarie in molte capitali del mondo, intende ristrutturare i flussi di informazione e la gestione dell’ archivio delle notizie , in modo da permettere la creazione di una centrale informativa che, da un lato, sia alimentata in tempo reale dai vari redattori sparsi per il mondo e dall’altro sia disponibile on-line per la consultazione da parte dei potenziali acquirenti dei servizi giornalistici dell’agenzia. L’archivio è progettato come un insieme di pezzi di MATERIALE, di tre possibili tipi: NOTIZIA, ARTICOLO o FOTOGRAFIA, ove ARTICOLO e NOTIZIA rappresentano i due generi di servizi offerti dall’agenzia. Il potenziale acquirente di tali servizi, nel modello è identificato dall’entità CLIENTE. GIORNALISTI, FOTOGRAFI E REDATTORI Nel modello informativo piatto che l’agenzia giornalistica vuole implementare, ogni persona riconosciuta come giornalista accreditato può contribuire al popolamento della base di dati centrale. Quindi,indipendentemente dal ruolo (giornalista, fotografo, redattore, video-operatore, fonico,…), chiunque può contribuire sottoponendo notizie e materiale correlato, direttamente da ogni parte del mondo ove si trovi. Quello che nel testo viene definito ‘giornalista accreditato’, nel modello si traduce in una più generica classe FORNITORE accreditato, coerentemente con la specifica per cui qualunque elemento delle sottoclassi relative (GIORNALISTA, INVIATO, FOTOGRAFO, REDATTORE, CAPOREDATTORE, ALTRO) può proporre qualunque tipo di materiale indipendentemente dal ruolo. La ‘parte del mondo’ da cui il fornitore manda le notizie viene espressa dall’entità SEDE attraverso la relazione LAVORA. E’ compito della redazione centrale, ove operano capo redattori per ogni categoria di interesse (politica, società, sport, cultura), vagliare il materiale proposto (inserito nel sistema dai giornalisti), eventualmente apportare correzioni, e renderlo pubblicabile per gli acquirenti dei servizi giornalistici. I giornalisti, i fotografi e i redattori sono descritti dagli attributi:cognome, nome, recapito, ruolo, indirizzo e-mail, numero di telefono e cellulare, etc…

Transcript of Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio...

Page 1: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 1 -

PRESENTAZIONE

TESTO INTEGRALE DELLE SPECIFICHE e corrispondente FILTRAGGIO DELLEAMBIGUITÀ

Si riporta qui il testo con le specifiche richieste dal database, e si effettua un primo filtraggiodelle ambiguità a partire dai requisiti espressi in linguaggio naturale riportando, dove occorre,la corrispondente ‘traduzione’ sintattica su cui costruire lo ‘schema scheletro’ che,opportunamente raffinato, costituirà la base dell’entity relationship definitivo.

“Una nota agenzia giornalistica, con sede principale a Roma e sedi sussidiariein molte capitali del mondo, intende ristrutturare i flussi di informazione e lagestione dell’archivio delle notizie, in modo da permettere la creazione di unacentrale informativa che, da un lato, sia alimentata in tempo reale dai variredattori sparsi per il mondo e dall’altro sia disponibile on-line per laconsultazione da parte dei potenziali acquirenti dei servizi giornalisticidell’agenzia.

L’archivio è progettato come un insieme di pezzi di MATERIALE, di tre possibili tipi:NOTIZIA, ARTICOLO o FOTOGRAFIA, ove ARTICOLO e NOTIZIA rappresentano i duegeneri di servizi offerti dall’agenzia. Il potenziale acquirente di tali servizi, nel modello èidentificato dall’entità CLIENTE.

GIORNALISTI, FOTOGRAFI E REDATTORI

Nel modello informativo piatto che l’agenzia giornalistica vuole implementare,ogni persona riconosciuta come giornalista accreditato può contribuire alpopolamento della base di dati centrale. Quindi,indipendentemente dal ruolo(giornalista, fotografo, redattore, video-operatore, fonico,…), chiunque puòcontribuire sottoponendo notizie e materiale correlato, direttamente da ogniparte del mondo ove si trovi.

Quello che nel testo viene definito ‘giornalista accreditato’, nel modello si traduce in una piùgenerica classe FORNITORE accreditato, coerentemente con la specifica per cui qualunqueelemento delle sottoclassi relative (GIORNALISTA, INVIATO, FOTOGRAFO,REDATTORE, CAPOREDATTORE, ALTRO) può proporre qualunque tipo di materialeindipendentemente dal ruolo.

La ‘parte del mondo’ da cui il fornitore manda le notizie viene espressa dall’entità SEDEattraverso la relazione LAVORA.

E’ compito della redazione centrale, ove operano capo redattori per ognicategoria di interesse (politica, società, sport, cultura), vagliare il materialeproposto (inserito nel sistema dai giornalisti), eventualmente apportarecorrezioni, e renderlo pubblicabile per gli acquirenti dei servizi giornalistici. Igiornalisti, i fotografi e i redattori sono descritti dagli attributi:cognome, nome,recapito, ruolo, indirizzo e-mail, numero di telefono e cellulare, etc…

Page 2: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 2 -

Traduzione: il ‘giornalista’ del testo è rappresentato dall’entità FORNITORE accreditato,mentre il CAPOREDATTORE della categoria cui il pezzo di materiale si riferisce è l’entitàpreposta alla pubblicazione.

Le ‘correzioni’ (che nel modello vengono tradotte dall’omonimo attributo sulla relazionePROPONE) si effettuano solo sulle NOTIZIE, non sugli articoli, poiché l’ARTICOLO è intesocome una NOTIZIA già nella sua forma definitiva, ed è questa la caratteristica discriminante trai due tipi di materiale; su entrambe le entità invece, è necessario fornire un giudizio diaccettazione (omonimo attributo sulla relazione PROPONE).

Infatti il significato pratico di questa distinzione risiede nel fatto che un’agenzia può venderenon solo l’articolo già rifinito ed elaborato in una certa forma ad esempio ad un cliente privato,ma anche la notizia a cui l’articolo si riferisce, intesa come bozza, mera informazione che altreagenzie o mezzi di comunicazione potrebbero aver interesse ad acquistare e riproporre – è unasorta di acquisto del diritto di pubblicazione ed elaborazione della notizia in altra forma.

Dunque

- la NOTIZIA è l’informazione al primo stadio, quella a cui talvolta il testo si riferisce coltermine ‘dispaccio’.

- l’ARTICOLO è una notizia già elaborata e corretta, quella a cui il testo si riferisce col termine‘notizia’.

Con questo significato vanno interpretati i due seguenti paragrafi.

NOTIZIE DI AGENZIA

Le notizie di agenzia sono dispacci normalmente composti da un massimo diuna ventina di righe di testo. Vengono raccolte nel sistema centrale e sonoredatte da qualsiasi giornalista accreditato che le sottopone alla redazionecentrale. La redazione centrale, eventualmente apportando correzioni, accetta ildispaccio e lo pubblica, oppure lo elimina. Ogni notizia appartiene ad una certacategoria predefinita (politica, società, sport, cultura,…).

Ai fini di identificare gli inviati più produttivi, viene tenuto il conto del numerodi dispacci proposti e del numero di dispacci accettati di ciascun giornalistaaccreditato. Le notizie di agenzia hanno anche gli attributi (luogo e data,autore,…)

(Una nota sulla redazione in cui si effettuano le correzioni: è quella di volta in volta in cuilavora il CAPOREDATTORE che esegue la selezione sui servizi. E’ un modello di agenziagiornalistica ‘distribuita’.)

Di nuovo, il giornalista accreditato di cui parla il testo non è un GIORNALISTA in sensostretto bensì un FORNITORE, mentre dispaccio è sinonimo di NOTIZIA.

ARTICOLIGli articoli sono testi corredati da fotografie e didascalie .Vengono raccolti nelsistema centrale e sono redatti da qualsiasi giornalista accreditato che lisottopone alla redazione centrale. La redazione centrale, eventualmenteapportando correzioni, accetta l’articolo e lo pubblica, oppure lo conserva perutilizzi futuri.

Page 3: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 3 -

Ogni articolo appartiene ad una certa categoria predefinita (politica, società,sport, cultura,…).

Ai fini di identificare i giornalisti più produttivi, viene tenuto il conto delnumero di articoli proposti e del numero di articoli accettati di ciascungiornalista accreditato.

Un articolo può essere correlato, cioè può far riferimento ad altri articoli e puòavere associate una o più fotografie.

Ogni articolo è caratterizzato da una serie di parole chiave.

Completare gli attributi degli articoli (luogo e data, autore,…).

FOTOGRAFIELe fotografie sono immagini in formato digitale; i file contenenti le fotografienon vengono memorizzati nella base di dati, ma vengono memorizzati i loroURL.Possono essere associate a uno o più articoli, oppure essere parte di unprogetto fotografico, oppure ancora essere foto a sé. Ogni fotografia ècaratterizzata anche da una serie di parole chiave ed è corredata da unadidascalia.Le fotografie raccolte dalla redazione centrale vengono pubblicate, oppurevengono conservate per utilizzi futuri, a giudizio della redazione centrale.Ogni fotografia appartiene ad una certa categoria predefinita (politica, società ,sport, cultura, ...).Ai fini di identificare i fotografi più produttivi, viene tenuto il conto del numerodelle fotografie proposte e del numero di fotografie accettate come pubblicabilidi ciascun fotografo accreditato.Completare gli attributi delle fotografie (luogo e data della ripresa, autore, ...).

Come nel caso di ARTICOLO o NOTIZIA, il controllo sul pezzo FOTOGRAFIA è reso sullarelazione PROPONE nell’attributo ACCETTATO, che indica se ciascun pezzo di materiale èpubblicato nell’archivio dell’agenzia e quindi disponibile al cliente oppure conservato perutilizzi futuri. L’attributo ACCETTATO sulla relazione PROPONE è riferito a MATERIALEpiuttosto che ripetersi su ciascuno dei tre servizi, poiché il meccanismo di selezione (accettato oconservato) è lo stesso.

AREE GEOGRAFICHEEsiste una classificazione in aree geografiche dei luoghi. Ogni notizia, articolo,fotografia quindi è associata ad una determinata area geografica (es . NordAmerica, Sud America, Europa, Italia, Nord Africa, Africa Centrale, Sud Africa,Medio Oriente, Est, Estremo Oriente, Oceania, Regioni artiche, ...).

ACQUISTI DEI SERVIZI GIORNALISTICIL’acquisizione dei servizi (notizie o dispacci) giornalistici dell’Agenzia da partedi un qualsiasi utente, pubblico o privato, avviene tramite la sottoscrizione di unabbonamento. Alcuni tipi di abbonamento sono quelli PerCategoria eCumulativi.

Dal punto di vista della sottoscrizione di abbonamenti, quindi, sono disponibili due tipidi servizi: l’acquisto di NOTIZIE (come si è detto, indicate nel testo col terminedispacci) o ARTICOLI (le notizie del testo).

Page 4: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 4 -

Tramite un abbonamento PerCategoria è possibile ricevere, per l’intera duratadell’abbonamento, tutti i servizi accettati dall’agenzia appartenenti ad unacerta categoria. L’Agenzia mantiene traccia dei servizi inviati per un certoabbonamento; inoltre, nel caso in cui l’utente sia un mezzo di comunicazione, simemorizza anche se il servizio è successivamente pubblicato o meno.Tramite un abbonamento Cumulativo è possibile consultare tutti i titoli deiservizi pubblicati dall’agenzia appartenenti ad una certa categoria. e prelevaretra questi quelli di interesse; nell’abbonamento è specificato il numero totale diservizi che i possono prelevare. Con questo tipo di abbonamento si possonoprelevare giornalmente sino ad un massimo di 10 notizie e 20 dispacci.Uno stesso utente non può sottoscrivere due abbonamenti per la stessacategoria.

Questa parte non necessita di osservazioni particolari sull’interpretazione dei termini. Ciascunadelle specifiche è sviluppata nella implementazione dell’archivio – si veda il progettoconcettuale – ed i vincoli di sottoscrizione realizzati tramite trigger.

SICUREZZAIl prototipo effettua la verifica di autorizzazione degli utenti (giornalisti, clienti....).

OPERAZIONILe operazioni previste per il sistema sono:1. Visualizzare le ultime 10 notizie pubblicate.(Frequenza: 1’000 000 accessi giornalieri).2. Ricerca dei titoli degli ultimi 100 servizi (notizie o dispacci) giornalisticipubblicati dall’agenzia che riguardano una certa categoria di interesse per unadeterminata area geografica o di una determinata sede dell’agenzia.(Frequenza: 10 000 accessi giornalieri).3. Ricerca dei titoli delle notizie pubblicate dall’agenzia che fanno riferimentoad una determinata parola chiave. Il riferimento può essere diretto (cioèl’articolo è descritto dalla parola chiave oppure è associato ad una fotografiacon quella parola chiave) o indiretto (cioè l’articolo è correlato ricorsivamentead un altro articolo riferito a quella parola chiave).(Frequenza: 1 000 accessi giornalieri).4. Inserimento di notizie di agenzia (2’000 volte al giorno).5. Realizzazione di statistiche di vario genereIl progetto può prevedere l’utilizzo di Internet sia come architettura diacquisizione che di pubblicazione dei dati.

La seconda operazione è stata intesa come scelta da parte dell’utente tra una ricerca perCATEGORIA + AREA oppure CATEGORIA +SEDE in cui sono stati redatti le notizieo gli articoli oggetto di ricerca.

Nella terza operazione il termine ricorsivamente è stato inteso come ricerca di un livellodi profondità rispetto alla relazione di CORRELATO tra gli articoli.

Nella quarta operazione sono state realizzate procedure di immissione di ARTICOLI edi FOTOGRAFIE oltre a quella richiesta sulle NOTIZIE.

Page 5: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 5 -

Le statistiche di cui all’operazione numero cinque sono state intese comeparametrizzabili dall’utente in termini di numero di risultati nella classifica che sivogliono visualizzare, tipo di fornitori su cui stilare la classifica e parametri di qualità oproduttività (numero di accettati o semplicemente proposti).

La realizzazione delle query specificate nel testo è effettuata mediante StoredProcedures e le operazioni sono descritte in dettaglio al paragrafo omonimo.

VOLUME DEI DATIConsiderata la rapida crescita in volume dei dati operativi (notizie, articoli,etc), si ipotizza che periodicamente venga effettuato il passaggio a storico(rimozione dei dati dal sistema informativo in questione e loro travaso susupporti più capienti anche se di non immediata consultazione) dei dati non piùrilevanti, in modo da permettere la consultazione on-line del numero massimodi dati qui stimato.Nel seguito sono riportate alcune indicazioni che possono essere seguite per lascelta del volume dei dati; in alternativa, si possono fissare e considerare altrivalori. D’altra parte il volume dei dati riportato riguarda solo i concettiprincipali riportati nelle specifiche. In base allo schema E/R risultante dallainterpretazione della descrizione si possono fissare opportuni valori per ilvolume dei dati degli altri concetti. Lo stesso discorso vale per le operazioni eper la loro frequenza.

Volume dei dati delle principali entitàEntità VolumeSedi 55Categorie di Interesse 25Aree geografiche 20Giornalisti 1 000Fotografi 300Tecnici video 500Redattori 200Notizie 10 000 000Articoli 1 500 000Progetti fotografici 200Fotografie 4 000 000Parole chiave 300Abbonamenti PerCateg. 500Abbonamenti Cumulativi 400

Questi dati sono stati utilizzati per valutare l’opportunità di inserire certi dati derivati nelloschema. A tal scopo si è supposta una frequenza di immissione per un nuovo articolo di 1.000volte al giorno e per una fotografia di1.500 volte al giorno – il dato sulle notizie era già fornitodal testo, pari a 2000 volte al giorno.

Page 6: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

PERSONA

FORNITOREACCREDITATO

CLIENTE

FOTOGRAFO

REDATTORE

CAPOREDATTORE

MATERIALE

LUOGO

AREAGEOGRAFICA

CATEGORIA

ABBONAMENTO

PERCATEGORIA

CUMULATIVO

NOTIZIA ARTICOLOFOTOGRAFIA

PROGETTOFOTOGRAFICO

GIORNALISTA

ALTRO

INVIATO

SEDE

In

Parte Di

PrelevaN

PrelevaA

RiceveA

RiceveN

ConsultaN

Propone

Correlato

CorredatoParte

Riferitoa

FaLavora

Recapito

Di

Appartiene

ConsultaA

Via

Cap

Città

CFNome

Cognome

#AP

#AA

#DP

#DA

Ruolo

#FP

#FA

Tipo

Accettato

Correzioni (0,1)

CodM

Nome

Stato

URL

DidascaliaA_sè

Parola Chiave (1,N)

CodP

Argomento

Titolo

Testo

Parola Chiave (1,N)

Principale

(0,N)

Secondario

(0,N)

TitoloTesto

Giorno

Giorno

Pubblicato (0,1)

Pubblicato (0,1)

Data Fine#Totale Servizi

Data Inizio

Città

E-mailTel

Cell

MC (t,e)

(p,e)

(1,N)(1,N)(1,N)(1,N)(1,N)

(1,N)

(1,1)

(1,N)

(1,1) (0,N)

(0,N)

(1,N) (1,1)

(1,1)

(1,1)

(1,N)

(1,1)

(1,N)

Nome

(0,N)(0,N)

(0,N)

(1,N)

(0,N)

(0,N)

(0,N)

(0,N)

(0,N)

(0,N)

(0,N) (0,N)

(0,N)

(0,N)(0,N)

(0,N)

(t,e)

(1,N)

(1,N)

(t,e)

(0,N)

Area Geografica

DataGenere

Giorno

Giorno

Attivo

Page 7: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 7 -

PROGETTO CONCETTUALE

Chi accede al databaseL’utente dell’agenzia deve qualificarsi come appartenente ad una delle categorie CLIENTE oFORNITORE relative alla gerarchia PERSONA. Tali categorie sono mutuamente esclusive e lagerarchia è totale: la persona si qualifica al suo ingresso in modo diverso a seconda che intendacontribuire con immissione di MATERIALE o acquistare e usufruire dei servizi a disposizione.Oltre ad attributi identificativi tipici su PERSONA quali NOME, COGNOME e unRECAPITO, attributo multiplo composto da VIA, CAP, CITTA’, si ha una chiave univocadetta CF (codice fiscale) ove in generale visto il contributo di fornitori esteri, con CF si intendeuna sequenza univoca di numeri e lettere.

L’entità FORNITORE rappresenta tutte le categorie che possono inviare materiale all’agenzia.Oltre a tipici attributi descrittivi quali CELL (numero del cellulare), TEL (numero di telefono),E_MAIL e quelli che gli derivano dall’entità PERSONA, essa presenta l’attributo ATTIVO,che sta ad indicare l’attuale stato del fornitore nei confronti dell’agenzia, e viene posto a zeroquando si cerca di effettuare la cancellazione del fornitore dal database:poiché non si voglionoperdere le informazioni riguardanti coloro che hanno sottoposto e redatto i pezzi di materiale edè opportuno mantenerne i dati in modo da poterli eventualmente ricontattare in un secondotempo, si è decisa una politica di gestione delle cancellazioni (on delete) in cui il FORNITOREnon viene rimosso ma in caso si interrompa la sua collaborazione con l’agenzia esso vieneconsiderato temporaneamente non attivo (ATTIVO uguale a zero). In questo modo non si perdela ‘paternità’ degli articoli. Questo viene garantito dalla Stored Procedure cancella_fornitore.

In fase di aggiornamento d’archivio posso rimuovere NOTIZIE, ARTICOLI, FOTO edautomaticamente tramite un trigger essi verranno rimossi dal corrispettivo MATERIALE.

Ciascun fornitore lavora almeno in una SEDE posta in una determinata città (attributo di sede) epuò appartenere ad una delle seguenti categorie: GIORNALISTA, INVIATO, FOTOGRAFO,REDATTORE, CAPOREDATTORE, ALTRO organizzate in una gerarchia totale ed esclusivarispetto a FORNITORE.Ciascuna categoria può sottoporre ogni tipo di MATERIALE, ed è compito degli INVIATIredigere le NOTIZIE, e dei GIORNALISTI redigere gli ARTICOLI dove inviati e giornalistihanno il significato esposto nel primo paragrafo ottenuto dal filtraggio dal linguaggio naturale,mentre al CAPOREDATTORE della CATEGORIA relativa spetta il compito di accettare omeno il materiale decidendo se pubblicarlo (attributo ACCETTATO uguale ad uno suPROPONE, con l’aggiunta facoltativa di eventuali CORREZIONI – attributo opzionale suPROPONE- sulle NOTIZIE).Se il materiale non è ritenuto idoneo, ACCETTATO uguale a zero ne inibisce la pubblicazionee lo conserva in archivio per eventuali utilizzi futuri, o lo rende disponibile nelle forme diNOTIZIE o ARTICOLI ai vari acquirenti mediante le due possibili forme di abbonamento.Questo MATERIALE è caratterizzato da:

- un’unica CATEGORIA cui appartiene, intesa come il genere e l’argomento principale dicui tratta il servizio. Categorie tipiche sono Politica, Cultura, Sport, Cronaca …

- un LUOGO (individuato univocamente da un NOME di luogo in uno STATO)appartenente ad una ben determinata AREA GEOGRAFICA (che viene riportata anchesu MATERIALE come dato derivato – e la convenienza di questa scelta in termini divolume di dati ed accessi giornalieri è dimostrata nel paragrafo relativo ai dati derivato).

- altri attributi necessari per tutti i servizi come la DATA e naturalmente un COD -codiceunivoco- oltre che l’attributo GENERE (‘n’, ‘a’, ‘f’) che indica direttamente a quale tipodi materiale si fa riferimento: la gerarchia MATERIALE, infatti distribuita in NOTIZIE,

Page 8: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 8 -

ARTICOLI e FOTOGRAFIE è totale ed esclusiva. Come per le altre due grandigerarchie in cui si è strutturato il nostro modello (ABBONAMENTO e FORNITORE)l’opportunità di tale scelta ed il conseguente tipo di traduzione è discusso nel paragrafosulle gerarchie.

Il secondo tipo di qualifica con la quale accedere al database, ovvero il CLIENTE ècaratterizzata dalla sottoscrizione (attraverso la relazione FA) di almeno un ABBONAMENTO.Questa entità che partecipa (1,1) all’entità CATEGORIA tramite la relazione RIFERITO A èindividuata appunto da:

- una CATEGORIA a cui si riferisce- l’identità del cliente che lo sottoscrive tramite il suo codice COD ed un attributo MC

che indica se il cliente è un mezzo di comunicazione- una DATA di inizio (attributo dell’ABBONAMENTO che con le due caratteristiche

precedenti entra nella sua chiave primaria).

Un cliente non può così sottoscrivere due abbonamenti ad una categoria nella stessa data e,secondo le specifiche analizzate nel testo, è soggetto ad ulteriori restrizioni a seconda del tipo diabbonamento; due sono le scelte possibili che gli si presentano, quando effettua unsottoscrizione:

- PER CATEGORIA, attraverso il quale ricevere tutti i servizi pubblicati ( conACCETTATO uguale ad uno su PROPONE) dall’agenzia, relativi ad una certacategoria.

- CUMULATIVO, ed in tal caso il cliente può consultare tutti i titoli dei servizi relativialla categoria scelta e prelevare quelli di interesse fino ad un N_TOT SERVIZIspecificato al momento della sottoscrizione.

Una scelta del primo tipo viene realizzata nel modello mediante l’accesso ai servizirappresentati dalle entità ARTICOLO o NOTIZIA tramite le relazioni RICEVEN e RICEVEAin cui si memorizza anche se l’articolo o notizia è successivamente pubblicato- nel caso in cui ill’acquirente sia un mezzo di comunicazione- con l’attributo opzionale PUBBLICATO.

Nel caso in cui invece il cliente intenda effettuare un abbonamento del secondo tipo egli ha lapossibilità di

- consultare i servizi (ARTICOLO o NOTIZIA) tramite le relazioni CONSULTAA eCONSULTAN rispettivamente;- prelevare a propria discrezione quelli desiderati tramite PRELEVAA e PRELEVAN.

Il rispetto dei vincoli sottoscritti nell’acquisto di un abbonamento è implementato come segue:

Nel caso di abbonamento PER CATEGORIA il cliente non può eccedere la duratadell’abbonamento e questo viene realizzato con l’aggiunta dell’attributo GIORNO sullerelazioni attinenti a tale abbonamento RICEVEA e RICEVEN e si effettua un controllotramite un trigger ogni volta che si richiede un servizio (controllo che la data su RICEVEAsia precedente a quella specificata sull’abbonamento per categoria tramite l’attributoDATAFINE).

A proposito dell’abbonamento CUMULATIVO invece il vincolo è dato dal numero totaledi servizi prelevabili. Anche questo controllo è effettuato da un trigger e descritto neidettagli nel paragrafo relativo, così come i vincoli qui di seguito elencati:

Page 9: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 9 -

- Il vincolo giornaliero di dieci articoli e venti notizie è pure realizzato mediante untrigger che fa uso dell’attributo GIORNO sulle relazioni PRELEVAA e PRELEVAN.

- Uno stesso utente non può sottoscrivere due abbonamenti contemporanei per la stessacategoria: prima di rinnovarlo è necessario che sia scaduto l’abbonamento precedente.

- Controllo che i servizi richiesti siano proprio della categoria prescelta al momento dellasottoscrizione dell’abbonamento

Un articolo può far riferimento ad un altro articolo mediante la relazione CORRELATO e puòavere associata una o più fotografie mediante la relazione CORREDATO.Le FOTOGRAFIE d’altronde possono essere a sé stanti o far parte di un PROGETTOFOTOGRAFICO individuato da un codice COD e con un attributo ARGOMENTO che nedescrive l’argomento principale, mentre la foto presenta gli attributi URL (che indica l’indirizzoweb ove le foto sono archiviate), DIDASCALIA, dal significato ovvio e A _SE che indica se lafoto è a sé stante o meno.

Ciò conclude l’analisi del progetto dal punto di vista delle entità e delle relazioni.In generale ci si è attenuti alle specifiche del testo in maniera piuttosto stretta. Non sono stateeffettuate interpretazioni particolari, il modello dovrebbe rappresentare le richieste del testo inmaniera letterale e specifica , a meno della necessaria traduzione e filtraggio delle frasi dallinguaggio naturale.

CardinalitàIn questo paragrafo si giustifica la scelta delle cardinalità indicate nello schema E/R, cardinalitàche per la maggior parte si giustificano in maniera abbastanza naturale. Una menzione meritano

- le cardinalità opzionali dell’attributo PUBBLICATO di tipo (0,1) su RICEVEA eRICEVEN. L’attributo è presente solo se il cliente è un mezzo di comunicazione;

- la cardinalità opzionale dell’attributo CORREZIONI sulla relazione PROPONE siriferisce solo al MATERIALE composto da NOTIZIE: non si danno correzioni sufotografie o articoli;

Queste cardinalità sono rese con i trigger ‘inserisci_ricevea’ e ‘correzioni’ rispettivamente.

Associazione Fa:Un cliente fa almeno un abbonamento

min-card(CLIENTE, Fa) = 1Un cliente può fare più abbonamenti

max-card(CLIENTE, Fa) = N

Il vincolo che un cliente non possa fare due o più abbonamenti dello stesso tipo per una stessacategoria non è stato espresso nello schema E/R, ma verrà realizzato con un trigger.Si è deciso di includere nella chiave di ABBONAMENTO anche la data d’inizio, altrimenti nonsarebbe possibile rinnovarlo una volta scaduto. Il fatto che un cliente rinnovi l’abbonamentosolo dopo che è effettivamente scaduto sarà controllato con un altro trigger.

Un abbonamento è relativo ad uno ed un solo clientemin-card(ABBONAMENTO, Fa) = max-card(ABBONAMENTO, Fa) = 1

Associazione Riferito aUn abbonamento si riferisce ad una ed una sola categoria

min-card(ABBONAMENTO, Riferito a) = max-card(ABBONAMENTO, Riferito a) = 1Ci possono essere categorie a cui non si riferisce alcun abbonamento

Page 10: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 10 -

min-card(CATEGORIA, Riferito a) = 0Ad una stessa categoria possono fare riferimento più abbonamenti

max-card(CATEGORIA, Riferito a) = N

Associazione LavoraUn fornitore lavora almeno in una sede

min-card(FORNITORE, Lavora) = 1Un fornitore può lavorare in più di una sede

max-card(FORNITORE, Lavora) = NIn una sede lavora almeno un fornitore

min-card(SEDE, Lavora) = 1In una sede possono lavorare svariati fornitori

max-card(SEDE, Lavora) = N

Associazione DiUn caporedattore è titolare di almeno una categoria

min-card(CAPOREDATTORE, Di) = 1Un caporedattore può essere titolare di più categorie

max-card(CAPOREDATTORE, Di) = NUna categoria ha almeno un caporedattore

min-card(CATEGORIA, Di) = 1Una categoria può avere più caporedattori di riferimento

max-card(CATEGORIA, Di) = N

Associazione AppartieneAd una categoria appartiene almeno un pezzo di materiale

min-card(CATEGORIA, Appartiene) = 1Ad una categoria possono appartenere svariati pezzi di materiale

max-card(CATEGORIA, Appartiene) = NUn pezzo di materiale appartiene ad una ed una sola categoria

min-card(MATERIALE, Appartiene) = max-card(MATERIALE, Appartiene) = 1

Associazione ProponeUn caporedattore può non valutare nemmeno un pezzo di materiale

min-card(CAPOREDATTORE, Propone) = 0Un caporedattore valuta più pezzi di materiale

max-card(CAPOREDATTORE, Propone) = NUn fornitore può non fornire nemmeno un tipo di materiale

min-card(FORNITORE, Propone) = 0Un fornitore può proporre più pezzi

max-card(FORNITORE, Propone) = NUn pezzo di materiale viene proposto una ed una sola volta

min-card(MATERIALE, Propone) = max-card(MATERIALE, Propone) = 1

Associazione InUn pezzo di materiale si riferisce ad uno ed un solo luogo

min-card(MATERIALE, In) = max-card(MATERIALE, In) = 1Ad un luogo si riferisce almeno un pezzo di materiale

min-card(Luogo, In) = 1Ad un luogo si possono riferire più pezzi di materiale

max-card(Luogo, In) = N

Page 11: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 11 -

Associazione Parte diUn luogo fa parte di una ed una sola area geografica

min-card(LUOGO, Parte di) = max-card(LUOGO, Parte di) = 1Ad un’area geografica appartiene almeno un luogo

min-card(AREA-GEOGRAFICA, Parte di) = 1Ad un’area geografica possono appartenere più luoghi

max-card(AREA-GEOGRAFICA, Parte di) = N

Associazione CorrelatoPer Principale si intende l’articolo a cui gli altri fanno riferimento, per Secondario si intendel’articolo che fa riferimento ad uno principale.Un articolo può non riferirsi a nessun altro articolo

min-card(Secondario, Correlato) = 0Un articolo può riferirsi a molti altri articoli

max-card(Secondario, Correlato) = NAd un articolo possono non fare riferimento altri articoli

min-card(Principale, Correlato) = 0Ad un articolo possono fare riferimento molti altri articoli

max-card(Principale, Correlato) = N

Associazione CorredatoUn articolo può non essere corredato da fotografie

min-card(ARTICOLO, Corredato) = 0Un articolo può essere corredato da molte fotografie

max-card(ARTICOLO, Corredato) = NUna fotografia può non corredare nessun articolo

min-card(FOTOGRAFIA, Corredato) = 0Una fotografia può corredare più articoli

max-card(FOTOGRAFIA, Corredato) = N

Associazione ParteUna fotografia può non far parte di un progetto fotografico

min-card(FOTOGRAFIA, Parte) = 0Una fotografia può far parte di più progetti fotografici

max-card(FOTOGRAFIA, Parte) = NIn un progetto fotografico c’è almeno una fotografia

min-card(PROGETTO-FOTOGRAFICO, Parte) = 1In un progetto fotografico ci possono essere tante fotografie

max-card(PROGETTO-FOTOGRAFICO, Parte) = N

Associazione PrelevaAPer un abbonamento cumulativo possono non essere fatti prelievi di articoli

min-card(ABBCUM, PrelevaA) = 0Per un abbonamento cumulativo possono essere fatti più prelievi di articoli

max-card(ABBCUM, PrelevaA) = NUn articolo può non essere prelevato da nessun abbonamento cumulativo

min-card(ARTICOLO, PrelevaA) = 0Un articolo può essere prelevato da molti abbonamenti cumulativi

max-card(ARTICOLO, PrelevaA) = N

Page 12: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 12 -

Associazione PrelevaNPer un abbonamento cumulativo possono non essere fatti prelievi di notizie

min-card(ABBCUM, PrelevaN) = 0Per un abbonamento cumulativo possono essere fatti più prelievi di notizie

max-card(ABBCUM, PrelevaN) = NUna notizia può non essere prelevata da nessun abbonamento cumulativo

min-card(ARTICOLO, PrelevaN) = 0Una notizia può essere prelevata da molti abbonamenti cumulativi

max-card(ARTICOLO, PrelevaN) = N

Associazione ConsultaAPer un abbonamento cumulativo possono non essere consultati articoli

min-card(ABBCUM, ConsultaA) = 0Per un abbonamento cumulativo possono essere consultati più articoli

max-card(ABBCUM, ConsultaA) = NUn articolo può non essere consultato da nessun abbonamento cumulativo

min-card(ARTICOLO, ConsultaA) = 0Un articolo può essere consultato da molti abbonamenti cumulativi

max-card(ARTICOLO, ConsultaA) = N

Associazione ConsultaNPer un abbonamento cumulativo possono non essere consultate notizie

min-card(ABBCUM, ConsultaN) = 0Per un abbonamento cumulativo possono essere consultate più notizie

max-card(ABBCUM, ConsultaN) = NUna notizia può non essere consultata da nessun abbonamento cumulativo

min-card(ARTICOLO, ConsultaN) = 0Una notizia può essere consultata da molti abbonamenti cumulativi

max-card(ARTICOLO, ConsultaN) = N

Associazione RiceveAPer un abbonamento per categoria possono non essere ricevuti articoli

min-card(ABBCAT, RiceveA) = 0Per un abbonamento per categoria possono essere ricevuti più articoli

max-card(ABBCAT, RiceveA) = NUn articolo può non essere ricevuto da nessun abbonamento per categoria

min-card(ARTICOLO, RiceveA) = 0Un articolo può essere ricevuto da molti abbonamenti per categoria

max-card(ARTICOLO, RiceveA) = N

Associazione RiceveNPer un abbonamento per categoria possono non essere ricevute notizie

min-card(ABBCAT, RiceveN) = 0Per un abbonamento per categoria possono essere ricevute più notizie

max-card(ABBCAT, RiceveN) = NUna notizia può non essere ricevuta da nessun abbonamento per categoria

min-card(ARTICOLO, RiceveN) = 0Una notizia può essere ricevuta da molti abbonamenti per categoria

max-card(ARTICOLO, RiceveN) = N

Page 13: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 13 -

PROGETTO LOGICO

Eliminazione delle Gerarchie

ViaCapCittà

CLIENTECF

MC

CF FORNITOREACCREDITATO

E-mailTel

Cell

CFCF ViaCapCittà

PERSONA

FORNITOREACCREDITATO

CLIENTE

RecapitoViaCapCittà

CF

E-mail

MC (t,e)

L’entità di generalizzazione PERSONA è stata collassata verso il basso, perché totale edesclusiva. Inoltre le sottoentità presentavano attributi di specializzazione.L’attributo composto Recapito è stato tradotto nei tre attributi semplici: Via, CAP, Città. Il fattoche la gerarchia sia esclusiva non introduce ridondanza.

ABBONAMENTO

PERCATEGORIA

CUMULATIVO

Data Fine#Totale Servizi

Data Inizio

(p,e)

ABBONAMENTO

PERCATEGORIA

CUMULATIVO

Data Fine

Data Inizio

#Totale Servizi(1,1) (1,1)

(0,1) (0,1)

L’entità di generalizzazione ABBONAMENTO è stata tradotta con il metodo standard dimantenimento delle entità con associazioni. La gerarchia sarebbe, nel nostro caso, totale edesclusiva, ma poiché nelle specifiche si dice: “Alcuni tipi di abbonamento sono quelli percategoria e cumulativi”, è stata comunque intesa come parziale, per eventuali sviluppi futuri(inserimento di un nuovo tipo d’abbonamento).La scelta della traduzione standard rispetto ad un possibile collasso verso l’alto è stata preferita,allo scopo di minimizzare il numero di campi che potessero assumere valore NULL.

Page 14: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 14 -

FORNITOREACCREDITATO

FOTOGRAFO

REDATTORE

CAPOREDATTORE

GIORNALISTA

ALTRO

INVIATO#AP

#AA

#DP#DA

Ruolo

#FA

E-mailTel

Cell

(t,e)

FORNITOREACCREDITATO FOTOGRAFO

REDATTORE

CAPOREDATTORE

GIORNALISTA

ALTRO

INVIATO#AP

#AA

#DP#DA

Ruolo

#FA

E-mailTel

Cell

(t,e)

(1,1)(0,1)

(1,1)(0,1)

(1,1)(0,1)

(1,1)(0,1)

L’entità di generalizzazione FORNITORE-ACCREDITATO è stata tradotta con il metodostandard di mantenimento delle entità con associazioni.Poiché la gerarchia è totale ed esclusiva e presenta attributi di specializzazione, si sarebbepotuto optare per un collasso verso il basso. Tale scelta è stata tuttavia ritenuta inopportuna,poiché sarebbe stato necessario introdurre un grande numero di relazioni, visto che un fornitorepuò proporre qualunque tipo di materiale, indipendentemente dal suo ruolo. La relazionePropone si sarebbe dovuta ripetere per ognuna delle sottoentità.

Page 15: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 15 -

MATERIALE

NOTIZIA ARTICOLO FOTOGRAFIA

CodM

URLA_sè

Parola Chiave (1,N)

TitoloTesto

Parola Chiave (1,N)(1,1)

(0,1)

(1,1)

(0,1)

(1,1) (1,1)

TitoloTesto

(0,1)(0,1)

MATERIALE

NOTIZIAARTICOLO

FOTOGRAFIA

CodM

URL

A_sè

Parola Chiave (1,N)

Titolo

Didascalia

Testo

Parola Chiave (1,N)

Titolo

Data

Testo

(t,e)

Area Geografica

Genere

Data

Area Geografica

Genere

Didascalia

L’entità di generalizzazione MATERIALE è stata tradotta con il metodo standard dimantenimento delle entità con associazioni.Poiché la gerarchia è totale ed esclusiva e presenta attributi di specializzazione, si sarebbepotuto optare per un collasso verso il basso. Tale scelta è stata tuttavia ritenuta inopportuna,poiché sarebbe stato necessario introdurre un grande numero di relazioni, visto che un fornitorepuò proporre qualunque tipo di materiale, indipendentemente dal suo ruolo. La relazionePropone si sarebbe dovuta ripetere per ognuna delle sottoentità.

Page 16: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 16 -

TRADUZIONE DELLO SCHEMA E/R IN SCHEMA RELAZIONALE

SEDE(CITTA)

Si è deciso di collassare verso il basso l’entità di generalizzazione PERSONA

FORNITORE(CF, NOME, COGNOME, VIA, CITTA, CAP, TEL, CEL, E_MAIL)CF = CODICE FISCALECAP = CODICE D’AVVIAMENTO POSTALETEL = TELEFONOCEL = CELLULARESi è deciso di abbreviare FORNITORE-ACCREDITATO con FORNITORE

REDATTORE(CF)FK: CF REFERENCES FORNITORE

CAPOREDATTORE(CF)FK: CF REFERENCES REDATTORE

FOTOGRAFO(CF, #FP, #FA)FK: CF REFERENCES FORNITORE

#FP = NUMERO FOTOGRAFIE PROPOSTE#FA = NUMERO FOTOGRAFIE ACCETTATE

GIORNALISTA(CF, #AP, #AA)FK: CF REFERENCES FORNITORE

#AP = NUMERO ARTICOLI PROPOSTI#AA = NUMERO ARTICOLI ACCETTATI

INVIATO(CF, #DP, #DA)FK: CF REFERENCES GIORNALISTA

#DP = NUMERO DISPACCI PROPOSTI#DA = NUMERO DISPACCI ACCETTATI

ALTRO(CF, RUOLO)FK: CF REFERENCES GIORNALISTA

LAVORA(CF, CITTA)FK: CF REFERENCES FORNITOREFK: CITTA REFERENCES SEDE

LAVORA è una relazione che indica che il fornitore di codice fiscale CF lavora nella sede concodice CITTA

CLIENTE(CF, NOME, COGNOME, VIA, CITTA, CAP, MC)FK: CF REFERENCES PERSONA

MC = MEZZO DI COMUNICAZIONE (è un attributo che indica se il cliente è o meno unmezzo di comunicazione)Nel caso il cliente sia un mezzo di comunicazione, i dati si riferiscono al responsabile degliacquisti.

CATEGORIA(TIPO)

Page 17: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 17 -

DI(CFCAP, TIPO)FK: CFCAP REFERENCES CAPOREDATTOREFK: TIPO REFERENCES CATEGORIA

DI è una relazione che indica che il caporedattore di codice fiscale CFCAP si occupa dellacategoria di codice TIPO

AREA(NOMEAG)Si è deciso di abbreviare AREA-GEOGRAFICA con AREA

LUOGO(NOME, STATO, NOMEAG)FK: NOMEAG REFERENCES AREA

In LUOGO è stata tradotta anche l’associazione uno a uno PARTE-DI

PROGETTO(CODP, ARGOMENTO)Si è deciso di abbreviare PROGETTO-FOTOGRAFICO con PROGETTO

MATERIALE(CODM, DATA, NOMEAG, TIPO, GENERE, NOME, STATO, CFPRO,CFCAP, ACCETTATO, CORREZIONI)

FK: NOMEAG REFERENCES AREAFK: TIPO REFERENCES CATEGORIAFK: NOME, STATO REFERENCES LUOGOFK: CFPRO REFERENCES FORNITOREFK: CFCAP REFERENCES CAPOREDATTORE

CFPRO = CODICE FISCALE DEL PROPONENTE IL MATERIALECFCAP = CODICE FISCALE DEL CAPOREDATTORE CHE LO VALUTAACCETTATO indica se il materiale è stato o meno accettatoCORREZIONI è un attributo opzionale che indica, nel caso una notizia sia stata accettata, seha subito o meno correzioniIn MATERIALE sono state tradotte anche le associazioni uno a uno PROPONE, APPARTIENEe IN

FOTO(CODF, URL, DIDASCALIA, A_SE)FK: CODF REFERENCES MATERIALE

A-SE indica se la fotografia è o meno una fotografia a séSi è deciso di abbreviare FOTOGRAFIA con FOTO

L’attributo multiplo parola chiave è stato tradotto con la seguente relazione:PCF(CODF, PC)

FK: CODF REFERENCES FOTOPC = PAROLA CHIAVEPCF è una relazione che indica le varie parole chiave della fotografia di codice CODF

PARTE(CODF, CODP)FK: CODF REFERENCES FOTOFK: CODP REFERENCES PROGETTO

PARTE è una relazione che indica che la fotografia di codice CODF fa parte del progettofotografico di codice CODP

ARTICOLO(CODA, TESTO, TITOLO)FK: CODA REFERENCES MATERIALE

Page 18: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 18 -

CORRELATO(CODA1, CODA2)FK: CODA1 REFERENCES ARTICOLOFK: CODA2 REFERENCES ARTICOLO

CORRELATO è una relazione che indica che l’articolo di codice CODA1 è correlatoall’articolo di codice CODA2

CORREDATO(CODA, CODF)FK: CODA REFERENCES ARTICOLOFK: CODF REFERENCES FOTO

CORREDATO è una relazione che indica che l’articolo di codice CODA è corredato dallafotografia di codice CODF

L’attributo multiplo parola chiave è stato tradotto con la seguente relazione:PCA(CODA, PC)

FK: CODA REFERENCES ARTICOLOPC = PAROLA CHIAVEPCA è una relazione che indica le varie parole chiave dell’articolo di codice CODA

NOTIZIA(CODN, TESTO, TITOLO)FK: CODN REFERENCES MATERIALE

Si è deciso di abbreviare NOTIZIA-DI-AGENZIA con NOTIZIA

ABBONAMENTO(CFCLI, TIPO, DIN)FK: CFCLI REFERENCES CLIENTEFK: TIPO REFERENCES CATEGORIA

CFCLI = CODICE FISCALE DEL CLIENTEDIN = DATA D’INIZIO DELL’ABBONAMENTOIn ABBONAMENTO sono state tradotte anche le associazioni uno a uno FA e RIFERITO-ASi è deciso di includere nella chiave di ABBONAMENTO anche la data d’inizio, altrimenti nonsarebbe possibile rinnovarlo una volta scaduto.

ABBCAT(CFCLI, TIPO, DIN, DFIN)FK: CFCLI, TIPO, DIN REFERENCES ABBONAMENTO

CFCLI = CODICE FISCALE DEL CLIENTEDIN = DATA D’INIZIO DELL’ABBONAMENTODFIN = DATA DI FINE DELL’ABBONAMENTOSi è deciso di abbreviare ABBONAMENTO-PER-CATEGORIA con ABBCAT

ABBCUM(CFCLI, TIPO, DIN, #TOTSER)FK: CFCLI, TIPO, DIN REFERENCES ABBONAMENTO

CFCLI = CODICE FISCALE DEL CLIENTEDIN = DATA D’INIZIO DELL’ABBONAMENTO#TOTSER = NUMERO TOTALE DEI SERVIZI ACQUISTATISi è deciso di abbreviare ABBONAMENTO-CUMULATIVO con ABBCUM

PRELEVAN(CFCLI, TIPO, DIN, CODN, GIORNO)FK: CFCLI, TIPO, DIN REFERENCES ABBCUMFK: CODN REFERENCES NOTIZIA

PRELEVAN è una relazione che indica che nel giorno GIORNO è stato effettuato il prelievodella notizia di codice CODN per l’abbonamento cumulativo di codice CFCLI, TIPO, DIN

Page 19: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 19 -

PRELEVAA(CFCLI, TIPO, DIN, CODA, GIORNO)FK: CFCLI, TIPO, DIN REFERENCES ABBCUMFK: CODA REFERENCES ARTICOLO

PRELEVAA è una relazione che indica che nel giorno GIORNO è stato effettuato il prelievodell’articolo di codice CODA per l’abbonamento cumulativo di codice CFCLI, TIPO, DIN

CONSULTAN(CFCLI, TIPO, DIN, CODN)FK: CFCLI, TIPO, DIN REFERENCES ABBCUMFK: CODN REFERENCES NOTIZIA

CONSULTAN è una relazione che indica che è stato consultato il titolo della notizia di codiceCODN per l’abbonamento cumulativo di codice CFCLI, TIPO, DIN

CONSULTAA(CFCLI, TIPO, DIN, CODA)FK: CFCLI, TIPO, DIN REFERENCES ABBCUMFK: CODA REFERENCES ARTICOLO

CONSULTAA è una relazione che indica che è stato consultato il titolo dell’articolo di codiceCODA per l’abbonamento cumulativo di codice CFCLI, TIPO, DIN

RICEVEN(CFCLI, TIPO, DIN, CODN, PUBBLICATO)FK: CFCLI, TIPO, DIN REFERENCES ABBCATFK: CODN REFERENCES NOTIZIA

PUBBLICATO è un attributo opzionale che indica, nel caso il cliente sia un mezzo dicomunicazione, se la notizia è stata o meno pubblicataRICEVEN è una relazione che indica che è stata ricevuta la notizia di codice CODN perl’abbonamento per categoria di codice CFCLI, TIPO, DIN

RICEVEA(CFCLI, TIPO, DIN, CODA, PUBBLICATO)FK: CFCLI, TIPO, DIN REFERENCES ABBCATFK: CODA REFERENCES ARTICOLO

PUBBLICATO è un attributo opzionale che indica, nel caso il cliente sia un mezzo dicomunicazione, se l’articolo è stata o meno pubblicataRICEVEA è una relazione che indica che è stato ricevuto l’articolo di codice CODA perl’abbonamento per categoria di codice CFCLI, TIPO, DIN

Page 20: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 20 -

DATI DERIVATI

1) Area Geografica nell'entità MATERIALE

In figura sono stati indicati solo gli attributi di interesse.

Operazione 1) Lettura di tutti i dati di un MaterialeOperazione 2) Immissione di un nuovo Materiale

Tenendo conto che ci sono 10.000.000 di notizie, 1.500.000 di articoli e 4.000.000 difotografie, ne risulta che vi sono 15.500.000 di materiali.Poiché la frequenza di immissione per un nuovo articolo è 1.000 volte al giorno, peruna notizia 2.000 volte al giorno e per una fotografia 1.500 volte al giorno, il numerototale di immissioni giornaliere di materiale è pari alla loro somma, cioè 4.500 volte algiorno

Tavola dei volumiCONCETTO TIPO VOLUMEMATERIALE E 15.500.000LUOGO E 40.000.000AREA GEOGRAFICA E 20

Tavola delle operazioniOPER. TIPO FREQUENZAOper . 1 I 10.000/GiornoOper . 2 I 4.500/Giorno

Tavola degli Accessi con il dato derivatoOP CONCETTO ACCESSI TIPO TOTALE1 MATERIALE 1 L 1*10.000 =

10.000 ACC/DIE2 MATERIALE

IN11

SS

4*4.500 =18.000 ACC/DIE

Totale accessi col dato derivato: 28.000 ACC/DIE

Tavola degli Accessi senza il dato derivatoOP CONCETTO ACCESSI TIPO TOTALE1 MATERIALE

INLUOGO

PARTE-DIAREA-GEOGRAFICA

11111

LLLLL

5*10.000 =50.000 ACC/DIE

2 MATERIALEIN

11

SS

4*4.500 =18.000 ACC/DIE

Totale accessi senza dato derivato: 68.000 ACC/DIEConclusione: conviene tenere il dato derivato

MATERIALE LUOGO AREA

GEOGRA-FICA

PAR-TE DI

IN (1,1) (0,N) (1,N) (1,1)

Area Geografica Nome CodM Nome Stato

Page 21: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 21 -

2) Numero-articoli-proposti e Numero-articoli-accettati nell'entitàGIORNALISTA

In figura sono stati indicati solo gli attributi di interesse.Operazione 1) Lettura di tutti i dati di un GIORNALISTAOperazione 2) Immissione di un nuovo ARTICOLO

Tavola dei volumiCONCETTO TIPO VOLUMEARTICOLO E 1.500.000GIORNALISTA E 1.000

Tavola delle operazioniOPER. TIPO FREQUENZAOper . 1 I x/GiornoOper . 2 I 1.000/Giorno

Tavola degli Accessi con il dato derivatoOP CONCETTO ACCESSI TIPO TOTALE1 GIORNALISTA 1 L 1*x =

x ACC/DIE2 ARTICOLO

PROPONEGIORNALISTAGIORNALISTA

1111

SSLS

7*1.000 =7.000 ACC/DIE

Totale accessi col dato derivato: x + 7.000 ACC/DIE

Tavola degli Accessi senza il dato derivatoOP CONCETTO ACCESSI TIPO TOTALE1 GIORNALISTA

PROPONE1

7.500LL

7.501*x =7.501x ACC/DIE

2 ARTICOLOPROPONE

11

SS

4*1.000 =4.000 ACC/DIE

Totale accessi col dato derivato: 7.501x + 4.000 ACC/DIE

Conclusione: La convenienza nel tenere o meno il dato derivato dipende dallafrequenza x con cui viene eseguita l'operazione 1)x + 7.000 = 7.501x + 4.000 ⇒ x = 0,4 volte al giornoPer una frequenza x = 0,4 volte al giorno, cioè 12 volte al mese, è indifferente tenere oeliminare il dato derivato, se la frequenza è maggiore è conveniente tenerlo, mentre seè minore conviene eliminarlo. Supponendo che l'agenzia voglia fare delle statistichegiornaliere, si è deciso di tenere il dato derivato.

GIORNALISTA MATERIALE (ARTICOLO)

PROPONE

(1,N) (1,1)

#Articoli-Proposti #Articoli-Accettati CF Accettato CodM

Page 22: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 22 -

3) Numero-foto-proposte e Numero-foto-accettate nell'entità FOTOGRAFO

In figura sono stati indicati solo gli attributi di interesse.Operazione 1) Lettura di tutti i dati di un FOTOGRAFOOperazione 2) Immissione di una nuova FOTOGRAFIA

Tavola dei volumiCONCETTO TIPO VOLUMEFOTOGRAFIA E 4.000.000FOTOGRAFO E 300

Tavola delle operazioniOPER. TIPO FREQUENZAOper . 1 I x/GiornoOper . 2 I 1.500/Giorno

Tavola degli Accessi con il dato derivatoOP CONCETTO ACCESSI TIPO TOTALE1 FOTOGRAFO 1 L 1*x =

x ACC/DIE2 FOTOGRAFIA

PROPONEFOTOGRAFOFOTOGRAFO

1111

SSLS

7*1.500 =10.500 ACC/DIE

Totale accessi col dato derivato: x + 10.500 ACC/DIE

Tavola degli Accessi senza il dato derivatoOP CONCETTO ACCESSI TIPO TOTALE1 FOTOGRAFO

PROPONE1

13.333LL

13.334*x =13.334x ACC/DIE

2 FOTOGRAFIAPROPONE

11

SS

4*1.500 =6.000 ACC/DIE

Totale accessi col dato derivato: 13.334x + 6000 ACC/DIE

Conclusione: La convenienza nel tenere o meno il dato derivato dipende dallafrequenza x con cui viene eseguita l'operazione 1)x + 10.500 = 13.334x + 6.000 ⇒ x = 0,34 volte al giornoPer una frequenza x = 0,34 volte al giorno, cioè 10.2 volte al mese, è indifferentetenere o eliminare il dato derivato, se la frequenza è maggiore è conveniente tenerlo,mentre se è minore conviene eliminarlo. Supponendo che l'agenzia voglia fare dellestatistiche giornaliere, si è deciso di tenere il dato derivato.

FOTOGRAFO MATERIALE (FOTOGRA-

FIA)

PRO-PONE

(1,N) (1,1)

Accettato

#Foto-Proposti #Foto-Accettati CF

CodM

Page 23: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 23 -

4) Numero-dispacci-proposti e Numero-dispacci-accettati nell'entità INVIATO

In figura sono stati indicati solo gli attributi di interesse.Operazione 1) Lettura di tutti i dati di un INVIATOOperazione 2) Immissione di una nuova NOTIZIA

Tavola dei volumiCONCETTO TIPO VOLUMENOTIZIA DIAGENZIA

E 10.000.000

INVIATO E 300

Tavola delle operazioniOPER. TIPO FREQUENZAOper . 1 I x/GiornoOper . 2 I 2.000/Giorno

Tavola degli Accessi con il dato derivatoOP CONCETTO ACCESSI TIPO TOTALE1 INVIATO 1 L 1*x =

x ACC/DIE2 NOTIZIA

PROPONEINVIATOINVIATO

1111

SSLS

7*2.000 =14.000 ACC/DIE

Totale accessi col dato derivato: x + 14.000 ACC/DIE

Tavola degli Accessi senza il dato derivatoOP CONCETTO ACCESSI TIPO TOTALE1 INVIATO

PROPONE1

33.333LL

33.334*x =33.334x ACC/DIE

2 NOTIZIAPROPONE

11

SS

4*2.000 =8.000 ACC/DIE

Totale accessi col dato derivato: 33.334x + 8.000 ACC/DIE

Conclusione: La convenienza nel tenere o meno il dato derivato dipende dalla frequenza xcon cui viene eseguita l'operazione 1)x + 14.000 = 33.334x + 8.000 ⇒ x = 0,18 volte al giornoPer una frequenza x = 0,18 volte al giorno, cioè 5,4 volte al mese, è indifferente tenere oeliminare il dato derivato, se la frequenza è maggiore è conveniente tenerlo, mentre se èminore conviene eliminarlo. Supponendo che l'agenzia voglia fare delle statistichegiornaliere, si è deciso di tenere il dato derivato.

INVIATO MATERIALE (NOTIZIA DI AGENZIA)

PRO-PONE

(1,N) (1,1)

#Dispacci-Proposti #Dispacci-Accettati CF Accettato CodM

Page 24: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 24 -

IMPLEMENTAZIONE DEL DATABASE

CREATE TABLE [dbo].[FORNITORE] ([CF] [char] (16) NOT NULL ,[NOME] [varchar] (30) NOT NULL ,[COGNOME] [varchar] (30) NOT NULL ,[VIA] [varchar] (30) NOT NULL ,[CITTA] [varchar] (30) NOT NULL ,[CAP] [char] (5) NOT NULL ,[TEL] [varchar] (12) NOT NULL ,[CEL] [varchar] (15) NULL ,[E_MAIL] [varchar] (50) NULL ,[ATTIVO] [bit] NOT NULL,CONSTRAINT [PK_FORNITORE] PRIMARY KEY CLUSTERED([CF]) ON [PRIMARY]

)

CREATE TABLE [dbo].[ABBCAT] ([CFCLI] [char] (16) NOT NULL ,[TIPO] [varchar] (20) NOT NULL ,[DIN] [datetime] NOT NULL ,[DFIN] [datetime] NOT NULL ,CONSTRAINT [PK_ABBCAT] PRIMARY KEY CLUSTERED([CFCLI], [TIPO], [DIN]) ON [PRIMARY]

)

CREATE TABLE [dbo].[ABBCUM] ([CFCLI] [char] (16) NOT NULL ,[TIPO] [varchar] (20) NOT NULL ,[DIN] [datetime] NOT NULL ,[TOTSER] [int] NOT NULL ,CONSTRAINT [PK_ABBCUM] PRIMARY KEY CLUSTERED( [CFCLI], [TIPO], [DIN] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[ABBONAMENTO] ([CFCLI] [char] (16) NOT NULL ,[TIPO] [varchar] (20) NOT NULL ,[DIN] [datetime] NOT NULL ,CONSTRAINT [PK_ABBONAMENTO] PRIMARY KEY CLUSTERED( [CFCLI], [TIPO], [DIN] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[ALTRO] ([CF] [char] (16) NOT NULL ,[RUOLO] [varchar] (20) NULL ,CONSTRAINT [PK_ALTRO] PRIMARY KEY CLUSTERED( [CF] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[AREA] (

Page 25: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 25 -

[NOMEAG] [varchar] (30) NOT NULL ,CONSTRAINT [PK_AREA] PRIMARY KEY CLUSTERED( [NOMEAG] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[ARTICOLO] ([CODA] [int] NOT NULL ,[TESTO] [varchar] (7500) NOT NULL ,[TITOLO] [varchar] (30) NOT NULL ,CONSTRAINT [PK_ARTICOLO] PRIMARY KEY CLUSTERED( [CODA] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[CAPOREDATTORE] ([CF] [char] (16) NOT NULL ,CONSTRAINT [PK_CAPOREDATTORE] PRIMARY KEY CLUSTERED( [CF] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[CATEGORIA] ([TIPO] [varchar] (20) NOT NULL ,CONSTRAINT [PK_CATEGORIA] PRIMARY KEY CLUSTERED( [TIPO] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[CLIENTE] ([CF] [char] (16) NOT NULL ,[NOME] [varchar] (30) NOT NULL ,[COGNOME] [varchar] (30) NOT NULL ,[VIA] [varchar] (30) NOT NULL ,[CITTA] [varchar] (30) NOT NULL ,[CAP] [char] (5) NOT NULL ,[MC] [bit] NOT NULL ,CONSTRAINT [PK_CLIENTE] PRIMARY KEY CLUSTERED( [CF] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[CONSULTAA] ([CFCLI] [char] (16) NOT NULL ,[TIPO] [varchar] (20) NOT NULL ,[DIN] [datetime] NOT NULL ,[CODA] [int] NOT NULL ,CONSTRAINT [PK_CONSULTAA] PRIMARY KEY CLUSTERED( [CFCLI], [TIPO], [DIN], [CODA] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[CONSULTAN] ([CFCLI] [char] (16) NOT NULL ,[TIPO] [varchar] (20) NOT NULL ,[DIN] [datetime] NOT NULL ,[CODN] [int] NOT NULL ,

Page 26: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 26 -

CONSTRAINT [PK_CONSULTAN] PRIMARY KEY CLUSTERED( [CFCLI], [TIPO], [DIN], [CODN] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[CORREDATO] ([CODF] [int] NOT NULL ,[CODA] [int] NOT NULL ,CONSTRAINT [PK_CORREDATO] PRIMARY KEY CLUSTERED( [CODF], [CODA] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[CORRELATO] ([CODA1] [int] NOT NULL ,[CODA2] [int] NOT NULL ,CONSTRAINT [PK_CORRELATO] PRIMARY KEY CLUSTERED( [CODA1], [CODA2] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[DI] ([CFCAP] [char] (16) NOT NULL ,[TIPO] [varchar] (20) NOT NULL ,CONSTRAINT [PK_DI] PRIMARY KEY CLUSTERED( [CFCAP], [TIPO] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[FOTO] ([CODF] [int] NOT NULL ,[URL] [varchar] (100) NOT NULL ,[DIDASCALIA] [varchar] (200) NOT NULL ,[A_SE] [bit] NOT NULL ,CONSTRAINT [PK_FOTO] PRIMARY KEY CLUSTERED( [CODF] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[FOTOGRAFO] ([CF] [char] (16) NOT NULL ,[N_FP] [int] NULL CONSTRAINT [DF_FOTOGRAFO_N_FP] DEFAULT (0),[N_FA] [int] NULL CONSTRAINT [DF_FOTOGRAFO_N_FA] DEFAULT (0),CONSTRAINT [PK_FOTOGRAFO] PRIMARY KEY CLUSTERED( [CF] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[GIORNALISTA] ([CF] [char] (16) NOT NULL ,[N_AP] [int] NULL CONSTRAINT [DF_GIORNALISTA_N_AP] DEFAULT (0),[N_AA] [int] NULL CONSTRAINT [DF_GIORNALISTA_N_AA] DEFAULT (0),CONSTRAINT [PK_GIORNALISTA] PRIMARY KEY CLUSTERED( [CF] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[INVIATO] (

Page 27: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 27 -

[CF] [char] (16) NOT NULL ,[N_NP] [int] NULL CONSTRAINT [DF_INVIATO_N_NP] DEFAULT (0),[N_NA] [int] NULL CONSTRAINT [DF_INVIATO_N_NA] DEFAULT (0),CONSTRAINT [PK_INVIATO] PRIMARY KEY CLUSTERED( [CF] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[LAVORA] ([CF] [char] (16) NOT NULL ,[CITTA] [varchar] (30) NOT NULL ,CONSTRAINT [PK_LAVORA] PRIMARY KEY CLUSTERED( [CF], [CITTA] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[LUOGO] ([NOME] [varchar] (30) NOT NULL ,[STATO] [varchar] (30) NOT NULL ,[NOMEAG] [varchar] (30) NOT NULL ,CONSTRAINT [PK_LUOGO] PRIMARY KEY CLUSTERED( [NOME], [STATO] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[MATERIALE] ([CODM] [int] IDENTITY (1, 1) NOT NULL ,[NOMEAG] [varchar] (30) NOT NULL ,[TIPO] [varchar] (20) NOT NULL ,[NOME] [varchar] (30) NOT NULL ,[STATO] [varchar] (30) NOT NULL ,[CFPRO] [char] (16) NOT NULL ,[CFCAP] [char] (16) NOT NULL ,[ACCETTATO] [bit] NOT NULL ,[CORREZIONI] [bit] NULL ,[DATA] [datetime] NULL ,[GENERE] [char] (1) NOT NULL ,CONSTRAINT [PK_MATERIALE] PRIMARY KEY CLUSTERED( [CODM] ) ON [PRIMARY],CHECK ([GENERE] = 'F' or [GENERE] = 'N' or [GENERE] = 'A')

)

CREATE TABLE [dbo].[NOTIZIA] ([CODN] [int] NOT NULL ,[TESTO] [varchar] (1600) NOT NULL ,[TITOLO] [varchar] (30) NOT NULL ,CONSTRAINT [PK_NOTIZIA] PRIMARY KEY CLUSTERED( [CODN] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[PARTE] ([CODP] [int] NOT NULL ,[CODF] [int] NOT NULL ,CONSTRAINT [PK_PARTE] PRIMARY KEY CLUSTERED

Page 28: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 28 -

( [CODP], [CODF] ) ON [PRIMARY])

CREATE TABLE [dbo].[PCA] ([CODA] [int] NOT NULL ,[PC] [varchar] (30) NOT NULL ,CONSTRAINT [PK_PCA] PRIMARY KEY CLUSTERED( [CODA], [PC] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[PCF] ([CODF] [int] NOT NULL ,[PC] [varchar] (30) NOT NULL ,CONSTRAINT [PK_PCF] PRIMARY KEY CLUSTERED( [CODF], [PC] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[PRELEVAA] ([CFCLI] [char] (16) NOT NULL ,[TIPO] [varchar] (20) NOT NULL ,[DIN] [datetime] NOT NULL ,[CODA] [int] NOT NULL ,[GIORNO] [datetime] NOT NULL ,CONSTRAINT [PK_PRELEVAA] PRIMARY KEY CLUSTERED( [CFCLI], [TIPO], [DIN], [CODA] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[PRELEVAN] ([CFCLI] [char] (16) NOT NULL ,[TIPO] [varchar] (20) NOT NULL ,[DIN] [datetime] NOT NULL ,[CODN] [int] NOT NULL ,[GIORNO] [datetime] NOT NULL ,CONSTRAINT [PK_PRELEVAN] PRIMARY KEY CLUSTERED( [CFCLI], [TIPO], [DIN], [CODN] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[PROGETTO] ([CODP] [int] IDENTITY (1, 1) NOT NULL ,[ARGOMENTO] [varchar] (200) NOT NULL ,CONSTRAINT [PK_PROGETTO] PRIMARY KEY CLUSTERED( [CODP] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[REDATTORE] ([CF] [char] (16) NOT NULL ,CONSTRAINT [PK_REDATTORE] PRIMARY KEY CLUSTERED( [CF] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[RICEVEA] (

Page 29: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 29 -

[CFCLI] [char] (16) NOT NULL ,[TIPO] [varchar] (20) NOT NULL ,[DIN] [datetime] NOT NULL ,[CODA] [int] NOT NULL ,[PUBBLICATO] [bit] NULL ,[GIORNO] [datetime] NOT NULL ,CONSTRAINT [PK_RICEVEA] PRIMARY KEY CLUSTERED( [CFCLI], [TIPO], [DIN], [CODA] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[RICEVEN] ([CFCLI] [char] (16) NOT NULL ,[TIPO] [varchar] (20) NOT NULL ,[DIN] [datetime] NOT NULL ,[CODN] [int] NOT NULL ,[PUBBLICATO] [bit] NULL ,[GIORNO] [datetime] NOT NULL ,CONSTRAINT [PK_RICEVEN] PRIMARY KEY CLUSTERED( [CFCLI], [TIPO], [DIN], [CODN] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[SEDE] ([CITTA] [varchar] (30) NOT NULL ,CONSTRAINT [PK_SEDE] PRIMARY KEY CLUSTERED( [CITTA] ) ON [PRIMARY]

)

CREATE TABLE [dbo].[UTENTI] ([USERNAME] [char] (30) NOT NULL ,[TIPO] [char] (1) NOT NULL

) ON [PRIMARY]

ALTER TABLE ABBCAT ADDCONSTRAINT [FK_ABBCAT_ABBONAMENTO] FOREIGN KEY( [CFCLI], [TIPO], [DIN] ) REFERENCES [dbo].[ABBONAMENTO] ( [CFCLI], [TIPO],

[DIN] )

ALTER TABLE ABBCUM ADDCONSTRAINT [FK_ABBCUM_ABBONAMENTO] FOREIGN KEY( [CFCLI], [TIPO], [DIN] ) REFERENCES [dbo].[ABBONAMENTO] ( [CFCLI], [TIPO],

[DIN] )

ALTER TABLE ABBONAMENTO ADDCONSTRAINT [FK_ABBONAMENTO_CATEGORIA] FOREIGN KEY( [TIPO] ) REFERENCES [dbo].[CATEGORIA] ( [TIPO] )

ALTER TABLE ALTRO ADDCONSTRAINT [FK_ALTRO_FORNITORE] FOREIGN KEY( [CF] ) REFERENCES [dbo].[FORNITORE] ( [CF] )

ALTER TABLE ARTICOLO ADD

Page 30: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 30 -

CONSTRAINT [FK_ARTICOLO_MATERIALE] FOREIGN KEY( [CODA] ) REFERENCES [dbo].[MATERIALE] ( [CODM] )

ALTER TABLE CAPOREDATTORE ADDCONSTRAINT [FK_CAPOREDATTORE_REDATTORE] FOREIGN KEY( [CF] ) REFERENCES [dbo].[REDATTORE] ( [CF] )

ALTER TABLE CONSULTAA ADDCONSTRAINT [FK_CONSULTAA_ABBCUM] FOREIGN KEY( [CFCLI], [TIPO], [DIN] ) REFERENCES [dbo].[ABBCUM] ( [CFCLI], [TIPO], [DIN] )

ALTER TABLE CONSULTAA ADDCONSTRAINT [FK_CONSULTAA_ARTICOLO] FOREIGN KEY( [CODA] ) REFERENCES [dbo].[ARTICOLO] ( [CODA] )

ALTER TABLE CONSULTAN ADDCONSTRAINT [FK_CONSULTAN_ABBCUM] FOREIGN KEY( [CFCLI], [TIPO], [DIN] ) REFERENCES [dbo].[ABBCUM] ( [CFCLI], [TIPO], [DIN] )

ALTER TABLE CONSULTAN ADDCONSTRAINT [FK_CONSULTAN_NOTIZIA] FOREIGN KEY( [CODN] ) REFERENCES [dbo].[NOTIZIA] ( [CODN] )

ALTER TABLE CORREDATO ADDCONSTRAINT [FK_CORREDATO_ARTICOLO] FOREIGN KEY( [CODA] ) REFERENCES [dbo].[ARTICOLO] ( [CODA] )

ALTER TABLE CORREDATO ADDCONSTRAINT [FK_CORREDATO_FOTO] FOREIGN KEY( [CODF] ) REFERENCES [dbo].[FOTO] ( [CODF] )

ALTER TABLE CORRELATO ADDCONSTRAINT [FK_CORRELATO_1_ARTICOLO] FOREIGN KEY( [CODA1] ) REFERENCES [dbo].[ARTICOLO] ( [CODA] )

ALTER TABLE CORRELATO ADDCONSTRAINT [FK_CORRELATO_2_ARTICOLO] FOREIGN KEY( [CODA2] ) REFERENCES [dbo].[ARTICOLO] ( [CODA] )

ALTER TABLE DI ADDCONSTRAINT [FK_DI_CAPOREDATTORE] FOREIGN KEY( [CFCAP] ) REFERENCES [dbo].[CAPOREDATTORE] ( [CF] )

ALTER TABLE DI ADDCONSTRAINT [FK_DI_CATEGORIA] FOREIGN KEY( [TIPO] ) REFERENCES [dbo].[CATEGORIA] ( [TIPO] )

ALTER TABLE FOTO ADDCONSTRAINT [FK_FOTO_MATERIALE] FOREIGN KEY( [CODF] ) REFERENCES [dbo].[MATERIALE] ( [CODM] )

Page 31: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 31 -

ALTER TABLE FOTOGRAFO ADDCONSTRAINT [FK_FOTOGRAFO_FORNITORE] FOREIGN KEY( [CF] ) REFERENCES [dbo].[FORNITORE] ( [CF] )

ALTER TABLE GIORNALISTA ADDCONSTRAINT [FK_GIORNALISTA_FORNITORE] FOREIGN KEY( [CF] ) REFERENCES [dbo].[FORNITORE] ( [CF] )

ALTER TABLE INVIATO ADDCONSTRAINT [FK_INVIATO_GIORNALISTA] FOREIGN KEY( [CF] ) REFERENCES [dbo].[GIORNALISTA] ( [CF] )

ALTER TABLE LAVORA ADDCONSTRAINT [FK_LAVORA_FORNITORE] FOREIGN KEY( [CF] ) REFERENCES [dbo].[FORNITORE] ( [CF] )

ALTER TABLE LAVORA ADDCONSTRAINT [FK_LAVORA_SEDE] FOREIGN KEY( [CITTA] ) REFERENCES [dbo].[SEDE] ( [CITTA] )

ALTER TABLE LUOGO ADDCONSTRAINT [FK_LUOGO_AREA] FOREIGN KEY( [NOMEAG] ) REFERENCES [dbo].[AREA] ( [NOMEAG] )

ALTER TABLE MATERIALE ADDCONSTRAINT [FK_MATERIALE_AREA] FOREIGN KEY( [NOMEAG] ) REFERENCES [dbo].[AREA] ( [NOMEAG] )

ALTER TABLE MATERIALE ADDCONSTRAINT [FK_MATERIALE_CAPOREDATTORE] FOREIGN KEY( [CFCAP] ) REFERENCES [dbo].[CAPOREDATTORE] ( [CF] )

ALTER TABLE MATERIALE ADDCONSTRAINT [FK_MATERIALE_CATEGORIA] FOREIGN KEY( [TIPO] ) REFERENCES [dbo].[CATEGORIA] ( [TIPO] )

ALTER TABLE MATERIALE ADDCONSTRAINT [FK_MATERIALE_FORNITORE] FOREIGN KEY( [CFPRO] ) REFERENCES [dbo].[FORNITORE] ( [CF] )

ALTER TABLE MATERIALE ADDCONSTRAINT [FK_MATERIALE_LUOGO] FOREIGN KEY( [NOME], [STATO] ) REFERENCES [dbo].[LUOGO] ( [NOME], [STATO] )

ALTER TABLE NOTIZIA ADDCONSTRAINT [FK_NOTIZIA_MATERIALE] FOREIGN KEY( [CODN] ) REFERENCES [dbo].[MATERIALE] ( [CODM] )

ALTER TABLE PARTE ADDCONSTRAINT [FK_PARTE_FOTO] FOREIGN KEY( [CODF] ) REFERENCES [dbo].[FOTO] ( [CODF] )

Page 32: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 32 -

ALTER TABLE PARTE ADDCONSTRAINT [FK_PARTE_PROGETTO] FOREIGN KEY( [CODP] ) REFERENCES [dbo].[PROGETTO] ( [CODP] )

ALTER TABLE PCA ADDCONSTRAINT [FK_PCA_ARTICOLO] FOREIGN KEY( [CODA] ) REFERENCES [dbo].[ARTICOLO] ( [CODA] )

ALTER TABLE PCF ADDCONSTRAINT [FK_PCF_FOTO] FOREIGN KEY( [CODF] ) REFERENCES [dbo].[FOTO] ( [CODF] )

ALTER TABLE PRELEVAA ADDCONSTRAINT [FK_PRELEVAA_ABBCUM] FOREIGN KEY( [CFCLI], [TIPO], [DIN] ) REFERENCES [dbo].[ABBCUM] ( [CFCLI], [TIPO], [DIN] )

ALTER TABLE PRELEVAA ADDCONSTRAINT [FK_PRELEVAA_ARTICOLO] FOREIGN KEY( [CODA] ) REFERENCES [dbo].[ARTICOLO] ( [CODA] )

ALTER TABLE PRELEVAN ADDCONSTRAINT [FK_PRELEVAN_ABBCUM] FOREIGN KEY( [CFCLI], [TIPO], [DIN] ) REFERENCES [dbo].[ABBCUM] ( [CFCLI], [TIPO], [DIN] )

ALTER TABLE PRELEVAN ADDCONSTRAINT [FK_PRELEVAN_NOTIZIA] FOREIGN KEY( [CODN] ) REFERENCES [dbo].[NOTIZIA] ( [CODN] )

ALTER TABLE REDATTORE ADDCONSTRAINT [FK_REDATTORE_FORNITORE] FOREIGN KEY( [CF] ) REFERENCES [dbo].[FORNITORE] ( [CF] )

ALTER TABLE RICEVEA ADDCONSTRAINT [FK_RICEVEA_ABBCAT] FOREIGN KEY( [CFCLI], [TIPO], [DIN] ) REFERENCES [dbo].[ABBCAT] ( [CFCLI], [TIPO], [DIN] )

ALTER TABLE RICEVEA ADDCONSTRAINT [FK_RICEVEA_ARTICOLO] FOREIGN KEY( [CODA] ) REFERENCES [dbo].[ARTICOLO] ( [CODA] )

ALTER TABLE RICEVEN ADDCONSTRAINT [FK_RICEVEN_ABBCAT] FOREIGN KEY( [CFCLI], [TIPO], [DIN] ) REFERENCES [dbo].[ABBCAT] ( [CFCLI], [TIPO], [DIN] )

ALTER TABLE RICEVEN ADDCONSTRAINT [FK_RICEVEN_NOTIZIA] FOREIGN KEY( [CODN] ) REFERENCES [dbo].[NOTIZIA] ( [CODN] )

Page 33: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 33 -

DESCRIZIONE DELLE STORED PROCEDURE

(IMPLEMENTAZIONE DELLE INTERROGAZIONI indicate dalle specifiche, ed altro ancora)

Stored Procedure prime_10_notizie

1. Visualizzare le ultime 10 notizie pubblicate.Questo viene effettuato mediante la procedura memorizzata Prime_10_Notizie, che non richiedeparametro alcuno e riporta gli ultimi dieci pezzi di materiale di tipo NOTIZIA, dopo averle ordinateper data.

CREATE PROCEDURE prime_10_notizie ASselect n.*, datafrom notizia n, materialewhere codn = codmand codm in (

select top 10 codmfrom materialewhere genere = 'n'and accettato = 1order by data desc)

Stored Procedure ultimi_100_servizi

2.Ricerca dei titoli degli ultimi 100 servizi (notizie o dispacci) giornalistici pubblicatidall’agenzia che riguardano una certa categoria di interesse per una determinata areageografica o di una determinata sede dell’agenzia.

Prendendo in ingresso come parametri- la categoria di interessee- o l’area geografica che rappresenta il luogo in cui si svolge la notizia- o una particolare sede dell’agenzia

riporta i titoli degli ultimi 100 servizi (articoli o notizie) che soddisfano i requisiti richiesti.

CREATE PROCEDURE ultimi_100_servizi/* parametri della procedura */@sede varchar(30),@nomeag varchar(30),@tipo varchar(20)/* procedura effettiva */ASselect data, codn, titolofrom notizia, materialewhere codn = codmand codn in

Page 34: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 34 -

(select codmfrom materiale m1 , lavorawhere (genere = 'n' or genere = 'a')and tipo = @tipoand cf = cfproand (citta = @sede or nomeag = @nomeag)and accettato = 1and 2>(select count (*)

from materiale m2, lavorawhere (genere = 'n' or genere = 'a')and tipo = @tipoand cf = cfproand (citta = @sede or nomeag = @nomeag)and accettato = 1and (m2.data > m1.data ) )

)unionselect data, coda, titolofrom articolo, materialewhere coda = codmand coda in

(select codmfrom materiale m1 , lavorawhere (genere = 'n' or genere = 'a')and tipo = @tipoand cf = cfproand (citta = @sede or nomeag = @nomeag)and accettato = 1and 2>(select count (*)

from materiale m2, lavorawhere (genere = 'n' or genere = 'a')and tipo = @tipoand cf = cfproand (citta = @sede or nomeag = @nomeag)and accettato = 1and (m2.data > m1.data))

)

Stored Procedure parole_chiave

3.Ricerca dei titoli delle notizie pubblicate dall’agenzia che fanno riferimento ad unadeterminata parola chiave. Il riferimento può essere diretto (cioè l’articolo è descrittodalla parola chiave oppure è associato ad una fotografia con quella parola chiave) oindiretto (cioè l’articolo è correlato ricorsivamente ad un altro articolo riferito a quellaparola chiave).

Data la specifica keyword che si vuole ricercare la Stored Procedure Parole_chiave ritorna

Page 35: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 35 -

- i titoli degli articoli che si riferiscono direttamente ad essa (ovvero che hanno taleparola chiave come attributo);

- i titoli degli articoli che hanno a corredo una foto che presenta come attributo quellaspecifica parola chiave;

- i titoli degli articoli che hanno correlato (al livello immediatamente sottostante) unaltro articolo su cui figura proprio la parola chiave specificata. (Il termine del testoricorsivamente è inteso quindi come ricorsione ad un unico livello, non si riportanoarticoli più ‘distanti’,anche perché probabilmente ci si allontanerebbe dal contenutodell’argomento dell’articolo di cui la parola chiave è indicativa.

CREATE PROCEDURE parole_chiave/* parametri della stored procedure */@parola varchar(30) ASselect a.coda, titolofrom articolo a, corredato c, pcf pwhere a.coda = c.codaand p.codf = c.codfand pc = @parolaunionselect p.coda, titolofrom pca p, articolo awhere pc = @parolaand p.coda = a.codaunionselect coda1, titolofrom correlato c, articolo awhere coda2 in (

select codafrom pcawhere pc = @parola)

and coda1 = a.coda

Stored Procedure inserisci_notizia

4.Inserimento di notizie di agenzia

Questa Stored Procedure richiede l’inserimento di svariate informazioni:-il tipo di categoria a cui la notizia si riferisce;-il nome del luogo ed il corrispondente stato dell’area geografica a cui la notizia fa riferimento;-il CFPRO, ovvero il codice del fornitore che ha inserito la notizia;-il CFCAP codice del caporedattore che ha effettuato il controllo della notizia immessa;-un valore per l’attributo ACCETTATO, che varrà uno o zero a seconda che la notizia sia dapubblicare o meno;-correzioni eventuali, indicate nell’attributo omonimo;nonché-data, testo e titolo dell’articolo.

Page 36: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 36 -

In questo inserimento ci sono alcuni vincoli di consistenza (coerenza) sui dati da rispettare, adesempio il fatto che il luogo di inserimento debba essere composto da un nome e dallo statoeffettivo in cui tale luogo si trova, o il fatto che il caporedattore di cui si richiede il codice non puòessere uno qualunque, ma deve essere uno dei caporedattori che si occupano della categoriaspecifica cui appartiene l’argomento della notizia.Questi due problemi vengono risolti a livello di immissione dei dati, attraverso maschere in cui-un combo box (ovvero il menu a tendina sotteso alla casella in cui va immesso il CFCAP) unavolta immessa la categoria propone come valori di codici fiscali di caporedattori solo quelli dellacategoria cui ci si riferisce nella notizia;-un altro menu a tendina propone accanto al nome della città il nome dello stato in cui si collocaeffettivamente- e poi a livello di maschera implementata in C++ si provvede nuovamente ascomporre il due termini nome e stato per passarli tra i parametri richiesti dalla seguente StoredProcedure.(Operazione descritta più in dettaglio nel codice di implementazione delle maschere).

CREATE PROCEDURE inserisci_notizia/* parametri della procedura */@tipo varchar(20),@nome varchar (30),@stato varchar(30),@cfpro char(16),@cfcap char(16),@accettato bit,@correzioni bit,@data datetime,@testo varchar(1600),@titolo varchar(30)/* procedura vera e propria */ASinsert into materiale(nomeag, tipo, nome, stato, cfpro, cfcap, accettato, correzioni, data, genere)select nomeag, @tipo, @nome, @stato, @cfpro, @cfcap, @accettato, @correzioni, @data, 'n'from luogowhere nome = @nomeand stato = @statoinsert into notizia values(@@identity, @testo, @titolo)update inviatoset N_NP=N_NP+1where cf = @cfproif (@accettato = 1)begin

update inviatoset N_NA = N_NA +1where cf = @cfpro

end

Page 37: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 37 -

Stored Procedure statistiche

5. Realizzazione di statistiche di vario genere

Nel nostro progetto è possibile effettuare statistiche parametrizzabili in termini di-tipo di fornitori su cui effettuare la statistica, ovvero giornalisti, inviati, fotografi.-numero dei fornitori ;-tipo di contributo su cui stilare la classifica: si può scegliere tra una valutazione intermini di qualità (numero di articoli, foto o notizie accettati) o semplice produttività(numero di articoli, foto o notizie proposti).

CREATE PROCEDURE statistiche/* parametri della procedura */@numero int,@tipofornitore char(1),@tipodato char(1)/* procedura vera e propria */ASif ((@tipofornitore = 'f') and (@tipodato = 'p'))begin

select N_FP, N_FA ,f.*from fornitore f, fotografo fo1where f.cf = fo1.cfand attivo = 1and @numero >(select count (*)from fotografo fo2where fo2.N_FP > fo1.N_FP)

endelse if ((@tipofornitore = 'f') and (@tipodato = 'a'))begin

select N_FP, N_FA, f.*from fornitore f, fotografo fo1where f.cf = fo1.cfand attivo = 1and @numero >(select count (*)from fotografo fo2where fo2.N_FA > fo1.N_FA)

endelse if ((@tipofornitore = 'g') and (@tipodato = 'p'))begin

select N_AP, N_AA, f.*from fornitore f, giornalista g1where f.cf = g1.cfand attivo = 1and @numero >(select count (*)from giornalista g2where g2.N_AP > g1.N_AP)

Page 38: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 38 -

endelse if ((@tipofornitore = 'g') and (@tipodato = 'a'))begin

select N_AP, N_AA, f.*from fornitore f, giornalista g1where f.cf = g1.cfand attivo = 1and @numero >(select count (*)from giornalista g2where g2.N_AA > g1.N_AA)

endelse if ((@tipofornitore = 'i') and (@tipodato = 'p'))begin

select N_NP, N_NA, f.*from fornitore f, inviato i1where f.cf = i1.cfand attivo = 1and @numero >(select count (*)from inviato i2where i2.N_NP > i1.N_NP)

endelse if ((@tipofornitore = 'i') and (@tipodato = 'a'))begin

select N_NP, N_NA, f.*from fornitore f, inviato i1where f.cf = i1.cfand attivo = 1and @numero >(select count (*)from inviato i2where i2.N_NA > i1.N_NA)

end

6. Altre operazioni implementate in Stored Procedure, non strettamente richieste dal testo

Stored Procedure inserisci_articolo-Inserimento di Articoli

CREATE PROCEDURE inserisci_articolo/* parametri della procedura */@tipo varchar(20),@nome varchar (30),@stato varchar(30),@cfpro char(16),@cfcap char(16),@accettato bit,@data datetime,

Page 39: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 39 -

@testo varchar(1600),@titolo varchar(30)/* procedura vera e propria */ASinsert into materiale(nomeag, tipo, nome, stato, cfpro, cfcap, accettato, correzioni, data, genere)select nomeag, @tipo, @nome, @stato, @cfpro, @cfcap, @accettato, null, @data, 'a'from luogowhere nome = @nomeand stato = @statoinsert into articolo values(@@identity, @testo, @titolo)update giornalistaset N_AP=N_AP+1where cf = @cfproif (@accettato = 1)begin

update giornalistaset N_AA = N_AA +1where cf = @cfpro

end

Stored Procedure del_articolo-Cancellazione di un articolo

CREATE PROCEDURE del_articolo@cod intASdelete from correlato where coda1 = @coddelete from correlato where coda2 = @coddelete from corredato where coda = @coddelete from pca where coda = @coddelete from articolo where coda = @coddelete from materiale where codm = @cod

Stored Procedure inserisci_foto-Inserimento di Fotografie

CREATE PROCEDURE inserisci_foto/* parametri della procedura */@tipo varchar(20),@nome varchar (30),@stato varchar(30),@cfpro char(16),@cfcap char(16),@accettato bit,@data datetime,@url varchar(100),@didascalia varchar(200),

Page 40: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 40 -

@a_se bit/* procedura vera e propria */ASinsert into materiale(nomeag, tipo, nome, stato, cfpro, cfcap, accettato, correzioni, data, genere)select nomeag, @tipo, @nome, @stato, @cfpro, @cfcap, @accettato, null, @data, 'f'from luogowhere nome = @nomeand stato = @statoinsert into foto values(@@identity, @url, @didascalia, @a_se)update fotografoset N_FP=N_FP+1where cf = @cfproif (@accettato = 1)begin update fotografo set N_FA = N_FA +1 where cf = @cfproend

Stored Procedure del_foto-Cancellazione di una foto

CREATE PROCEDURE del_foto@cod intASdelete from pcf where codf = @coddelete from corredato where codf = @coddelete from parte where codf = @coddelete from foto where codf = @coddelete from materiale where codm = @cod

Stored Procedure del_fornitore-Cancellazione di un Fornitore

CREATE PROCEDURE del_fornitore@cf char(16)ASupdate fornitoreset attivo = 0where cf = @cf

Stored Procedure ins_abbcat-Inserimento di un abbonamento per categoria

CREATE PROCEDURE ins_abbcat@cf char(16),

Page 41: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 41 -

@tipo varchar(20),@din datetime,@dfin datetimeASinsert into abbonamento values( @cf, @tipo, @din)insert into abbcat values(@cf, @tipo, @din, @dfin)

Stored Procedure del_abbcat-Cancellazione di un abbonamento per categoria

CREATE PROCEDURE del_abbcat@cf char(16),@tipo varchar(20),@data datetimeASdelete from ricevenwhere cfcli = @cfand tipo = @tipoand din = @datadelete from riceveawhere cfcli = @cfand tipo = @tipoand din = @datadelete from abbcatwhere cfcli = @cfand tipo = @tipoand din = @datadelete from abbonamentowhere cfcli = @cfand tipo = @tipoand din = @data

Page 42: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 42 -

DESCRIZIONE DEI TRIGGERS

In questo modo si sono resi i vincoli non esprimibili nello schema E/R

Trigger inserisci_abbcat

Questo trigger vincola il rinnovo di un abbonamento alla scadenza di quello precedente, in modoche uno stesso utente non possa avere contemporaneamente due abbonamenti dello stesso tipo perla stessa categoria

CREATE TRIGGER inserisci_abbcat ON ABBCATFOR INSERTAS/* dichiarazione di variabili locali */declare @cf char(16)declare @tipo varchar(20)declare @datain datetimedeclare @datafin datetimeselect @cf = cfcli, @tipo = tipo, @datain = din, @datafin = dfinfrom insertedif 1<= (select count(*) from abbcat a where a.cfcli = @cf and a.tipo = @tipo and @datain <= a.dfin and @datain <>a.din)begin print = 'L''abbonamento per categoria non e'' ancora scaduto, quindi non e'' possibile rinnovarlo' delete from abbcat where cfcli = @cf and @tipo = tipo and @datain = din and @datafin = dfin delete from abbonamento where cfcli = @cf and @tipo = tipo and @datain = dinendif exists (select * from abbcum where cfcli = @cf and tipo = @tipo and din = @datain)begin print 'Il cliente ha già fatto un abbonamento cumulativo per la stessa categoria' rollback transactionend

Page 43: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 43 -

Trigger cancella_notizia

Rimuovendo una notizia è necessario rimuovere le tuple corrispondenti nella relazioneMATERIALE.

CREATE TRIGGER cancella_notizia ON NOTIZIAFOR DELETEAS/* dichiarazione di variabili locali */declare @cod intselect @cod = deleted.codnfrom deleteddelete from materiale where codm = @cod

Trigger inserisci_cliente

Poiché la gerarchia Persona è esclusiva, prima di inserire un nuovo cliente, controllo che non sia giàpresente come fornitore.

CREATE TRIGGER inserisci_cliente ON clienteFOR INSERTAS/* dichiarazione di variabili locali */declare @cf char(16)select @cf = inserted.cffrom insertedif exists

(select *from fornitore fwhere f.cf = @cf)

beginprint 'La persona in questione e''gia'' presente come fornitore'rollback transaction

end

Trigger inserisci_fornitore

Poiché la gerarchia Persona è esclusiva, prima di inserire un nuovo fornitore, controllo che non siagià presente come cliente.

CREATE TRIGGER inserisci_fornitore ON FORNITOREFOR INSERTAS/* dichiarazione variabili locali */declare @cf char(16)select @cf = inserted.cffrom insertedif exists

Page 44: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 44 -

(select *from cliente cwhere c.cf = @cf)

beginprint 'La persona in questione e'' gia'' presente come cliente'rollback transaction

end

Trigger inserisci_ricevea

Questo trigger rende possibile l’inserimento finché l’abbonamento non è scaduto. Esso controllainoltre che non vengano ricevuti articoli relativi ad una categoria diversa da quelladell’abbonamento stipulato. Si controlla inoltre che l’attributo “pubblicato” non possa assumerevalore diverso da NULL se il cliente non è un mezzo di comunicazione.

CREATE TRIGGER inserisci_parte ON PARTEFOR INSERTASif exists (select * from foto f, inserted i where f.codf = i.codf and a_se = 1)begin print 'La foto è a sè, quindi non può far parte di un progetto fotografico' rollback transactionendGOCREATE TRIGGER inserisci_ricevea ON RICEVEAFOR INSERTAS/* dichiarazione di variabili locali */declare @cf char(16)declare @tipo varchar(20)declare @giorno datetimedeclare @data datetimedeclare @pubblicato bitdeclare @dfin datetimedeclare @mc bitdeclare @cod intdeclare @msg varchar(256)declare @rb bitselect @cf = cfcli, @tipo = tipo, @data = din, @giorno = giorno, @cod = coda, @pubblicato =pubblicatofrom insertedselect @mc = mcfrom clientewhere cf = @cfselect @dfin = dfinfrom abbcat

Page 45: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 45 -

where cfcli = @cfand din = @dataand tipo = @tiposelect @rb = 0if @giorno > @dfin begin select @msg = 'L''abbonamento e'' scaduto, quindi non si possono ricevere ulteriori articoli' select @rb = 1 endif @mc = 0 and @pubblicato is not null begin select @msg = 'Il cliente non e'' un mezzo di comunicazione, quindi l''attributo pubblicato deveassumere valore null' select @rb = 1 endif exists (select * from materiale m where codm = @cod and @tipo <> m.tipo)begin select @msg = 'Non si possono ricevere articoli relativi ad una categoria diversa da quelladell''abbonamento' select @rb = 1endif @rb = 1begin print @msg rollback transactionend

Trigger inserisci_riceven

Questo trigger rende possibile l’inserimento finché l’abbonamento non è scaduto. Esso controllainoltre che non vengano ricevute notizie relative ad una categoria diversa da quelladell’abbonamento stipulato. Si controlla inoltre che l’attributo “pubblicato” non possa assumerevalore diverso da NULL se il cliente non è un mezzo di comunicazione.

CREATE TRIGGER inserisci_riceven ON RICEVENFOR INSERTAS/* dichiarazione di variabili locali */declare @cf char(16)declare @tipo varchar(20)declare @giorno datetimedeclare @data datetimedeclare @pubblicato bitdeclare @dfin datetimedeclare @mc bitdeclare @cod int

Page 46: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 46 -

declare @msg varchar(200)declare @rb bitselect @rb = 0select @cf = cfcli, @cod = codn, @tipo = tipo, @data = din, @giorno = giorno, @pubblicato =pubblicatofrom insertedselect @mc = mcfrom clientewhere cf = @cfselect @dfin = dfinfrom abbcatwhere cfcli = @cfand din = @dataand tipo = @tipoif @giorno > @dfin begin select @msg = 'L''abbonamento e'' scaduto, quindi non si possono ricevere ulteriori notizie' select @rb = 1 endif @mc = 0 and @pubblicato is not null begin select @msg = 'Il cliente non e'' un mezzo di comunicazione, quindi l''attributo pubblicato deveassumere valore null' select @rb = 1 endif exists (select * from materiale m where codm = @cod and @tipo <> m.tipo)begin select @msg ='Non si possono ricevere notizie relative ad una categoria diversa da quelladell''abbonamento' select @rb = 1endif @rb = 1begin print @msg rollback transactionend

Trigger inserisci_corredato

Questo trigger controlla che se una fotografia è a sé non possa corredare un articolo.

CREATE TRIGGER inserisci_corredato ON CORREDATOFOR INSERTASif exists (select *

Page 47: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 47 -

from foto f, inserted i where f.codf = i.codf and a_se = 1)begin print 'La foto è a sè, quindi non può essere messa a corredo di un articolo' rollback transactionend

Trigger correzioni

Questo trigger verifica che l’attributo “correzioni” si riferisca soltanto alle notizie. In realtà questotrigger è ridondante, poiché esistono delle Stored Procedures (inserisci_articolo, inserisci_foto,inserisci_notizia) per l’inserimento del materiale che si preoccupano di settare in modo correttol’attributo “correzioni”.

CREATE TRIGGER correzioni ON MATERIALEFOR INSERT, UPDATEAS/* dichiarazione di variabili locali */declare @correzioni bitdeclare @genere char(1)select @correzioni = correzioni, @genere = generefrom insertedif @correzioni = 1 and @genere <> 'n'begin print 'Le correzioni si riferiscono esclusivamente alle notizie d''agenzia' rollback transactionend

Trigger inserisci_parte

Questo trigger controlla che se una fotografia è a sé non possa far parte di un progetto fotografico.

CREATE TRIGGER inserisci_parte ON PARTEFOR INSERTASif exists

(select *from foto f, inserted iwhere f.codf = i.codfand a_se = 1)

beginprint 'La foto è a sè, quindi non può far parte di un progetto fotografico'rollback transaction

end

Page 48: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 48 -

SICUREZZA: UTENTI E RUOLI

La sicurezza del database è stata realizzata tramite l’utilizzo di login, controllati da SQL Server.Al database possono accedere i seguenti utenti:framazz (dbo)clientefornitorecon le relative password (“cliente” per cliente e “fornitore” per fornitore)

L’utente framazz, essendo il database owner ha potere infinito su tutti gli oggetti del database.L’utente fornitore è stato aggiunto al gruppo fornit, che ha permesso di select sulle tabelle AREA,CATEGORIA, SEDE, UTENTI, DI, LUOGO, FORNITORE e ha permesso di execute su tutte leStored Procedures.L’utente cliente è stato aggiunto al gruppo cli, che ha permesso di select sulle tabelle AREA,CATEGORIA, SEDE, UTENTI e ha permesso di execute sulle Stored Procedures: parole_chiave,statistiche, prime_10_notizie e ultimi_100_servizi.A ciascun gruppo di utenti è stato assegnato il minor numero di privilegi possibile per effettuare icompiti richiesti. In ogni caso non si sono concessi privilegi di update, delete e insert, quindi si devefare uso delle Stored Procedures apposite. Questo è un ulteriore meccanismo di protezione per ildatabase.

Si è deciso di creare una tabella UTENTI che contiene accanto ad ogni username il tipo di accessopossibile. Il programma dopo aver richiesto all’utente username e password per potersi collegare, vaa vedere a che gruppo appartiene l’utente proprio per mezzo di questa tabella.

User cliente:if not exists (select * from sysusers where name = N'cliente' and uid < 16382)

EXEC sp_grantdbaccess N'cliente', N'cliente'

User fornitore:if not exists (select * from sysusers where name = N'fornitore' and uid < 16382)

EXEC sp_grantdbaccess N'fornitore', N'fornitore'

DatabaseRole fornit:if not exists (select * from sysusers where name = N'fornit' and uid > 16399)

EXEC sp_addrole N'fornit'

DatabaseRole cli:if not exists (select * from sysusers where name = N'cli' and uid > 16399)

EXEC sp_addrole N'cli'

User cliente:exec sp_addrolemember N'cli', N'cliente'

User fornitore:exec sp_addrolemember N'fornit', N'fornitore'

GRANT EXECUTE ON [dbo].[cancella_fornitore] TO [fornit]GRANT EXECUTE ON [dbo].[inserisci_articolo] TO [fornit]GRANT EXECUTE ON [dbo].[inserisci_foto] TO [fornit]GRANT EXECUTE ON [dbo].[inserisci_notizia] TO [fornit]

Page 49: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 49 -

GRANT EXECUTE ON [dbo].[prime_10_notizie] TO [fornit]GRANT EXECUTE ON [dbo].[ultimi_100_servizi] TO [fornit]GRANT EXECUTE ON [dbo].[statistiche] TO [fornit]GRANT EXECUTE ON [dbo].[parole_chiave] TO [fornit]GRANT SELECT ON [dbo].[AREA] TO [fornit]GRANT SELECT ON [dbo].[CATEGORIA] TO [fornit]GRANT SELECT ON [dbo].[SEDE] TO [fornit]GRANT SELECT ON [dbo].[UTENTI] TO [fornit]GRANT SELECT ON [dbo].[DI] TO [fornit]GRANT SELECT ON [dbo].[LUOGO] TO [fornit]GRANT SELECT ON [dbo].[FORNITORE] TO [fornit]

GRANT EXECUTE ON [dbo].[parole_chiave] TO [cli]GRANT EXECUTE ON [dbo].[prime_10_notizie] TO [cli]GRANT EXECUTE ON [dbo].[ultimi_100_servizi] TO [cli]GRANT EXECUTE ON [dbo].[statistiche] TO [cli]GRANT SELECT ON [dbo].[CATEGORIA] TO [cli]GRANT SELECT ON [dbo].[AREA] TO [cli]GRANT SELECT ON [dbo].[SEDE] TO [cli]GRANT SELECT ON [dbo].[UTENTI] TO [cli]

Page 50: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 50 -

IMPLEMENTAZIONE DEL FRONT END: MASCHERE

Lo scopo dell’interfaccia a maschere è quello di rendere possibile in maniera piuttosto immediata lacomunicazione tra l’utente dell’archivio ed i contenuti del database.La scelta di realizzare un’interfaccia grafica è resa poi opportuna come via alternativa per lapopolazione del database e per l’uso delle Stored Procedures che permetta all’utilizzatore una sceltadiversa rispetto al tool ‘standard’ fornito con MS SQL SERVER , ovvero il Query Analyzer.

IMPLEMENTAZIONE DEL FRONT END: C++ Builder

La crescente complessità dei programmi in termini di quantità di software e di necessità diprotezione delle singole parti ha reso necessaria la nascita di linguaggi che andassero oltre laprogrammazione strutturata:il C++ nacque come risposta alla necessità di trattare una maggiorecomplessità informativa, mantenendo tuttavia lo spirito originale del C, caratterizzatodall’efficienza e la flessibilità della sua filosofia di base, ma che, dove l’approccio strutturato nonfosse più sufficiente , potesse permettere la programmazione ad oggetti (Object OrientedProgramming, OOP).Per utilizzare le parole del suo creatore, le funzionalità ad oggetti del C++ permettono lastrutturazione dei programmi a vantaggio della chiarezza, dell’estendibilità, e della facilità dimanutenzione di questi ultimi, senza alcuna perdita di efficienza.Sebbene il C++ sia stato originariamente programmato per lo sviluppo di programmi molto grandiesso non è limitato a questo impiego.

Le virtù della programmazione ad oggetti lo rendono quindi adatto ad implementare l’interfacciadel nostro database:

incapsulamento che riunisce il codice ed i dati da esso manipolati difendendoli dascorrettezze esterne e da un utilizzo improprio. Il codice e i dati collegati in modo da creareuna scatola nera indipendente costituiscono un oggetto, ossia il meccanismo che consentel’incapsulamento. Tipicamente le parti pubbliche di un oggetto costituiscono un’interfacciacontrollata per accedere alle parti private dell’oggetto.Una politica di questo tipo a livellopiù macroscopico è stata realizzata nelle maschere rendendo visibili all’utente solo le sceltepossibili e non contraddittorie con l’economia della base di dati: si sarebbero potutesviluppare anche tramite trigger;

polimorfismo ossia una pluralità di forme che permette di utilizzare un’unica interfaccia perun’intera classe di azioni (“un’interfaccia, molti metodi”) : ciò significa che è possibilecreare un’interfaccia generica per un gruppo di attività collegate contribuendo in tal modoad una riduzione della complessità; i primi linguaggi di programmazione ad oggetti eranointerpretati, quindi il polimorfismo era consentito ovviamente in fase di esecuzione. Ma ilC++ è un linguaggio compilato pertanto permette sia il polimorfismo in esecuzione siaquello in compilazione;

Ereditarietà ovvero l’oggetto acquisisce le proprietà di un altro oggetto in base al concettodi classificazione gerarchica, proprietà che mi permette di definire solo quelle caratteristicheche lo rendono unico all’interno della sua classe, e rappresenta un esempio specifico di unaclasse più generale di cui eredita gli attributi. Come per il suo predecessore, il C, uno deimaggiori vantaggi di questo linguaggio è l’essere marcatamente flessibile: mediantel’applicazione di questi concetti è possibile sviluppare un programma che goda delleproprietà di riusabilità, estendibilità, leggibilità.

Page 51: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 51 -

Il modulo rappresenta un ambiente di visibilità mentre alla procedura è delegato il compito distabilirne il tempo di vita. Il C++ Builder sfrutta tutte questa potenzialità e permette alprogrammatore una gestione piuttosto efficiente di questi principi di programmazione modulareattraverso l’utilizzo degli oggetti C++ componenti, eventi e gestori di eventi (handler).

IL BORLAND DATABASE ENGINE

Per poter accedere ai database locali e a quelli client/server il C++ Builder fornisce il BorlandDatabase Engine (BDE).Il BDE è una raccolta di DLL e programmi di servizio che consentono di accedere ad un’ampiavarietà di classi.Per comunicare con il database lo schema è il seguente.

- il BDE viene fornito con una serie di driver checonsentono all’applicazione di comunicare con qualunquetipo di database: questi driver traducono i comandi ad altolivello in comandi specifici per un determinato tipo didatabase.- Alias BDE: gruppo di parametri che descrive laconnessione al database. Inoltre sono forniti di:- SQL links raccolta di driver per DBE e una copia diLocal Interbase operante su database locali.- componenti per database forniti dalla libreria VCL incui rientrano sia componenti non visuali di accesso ai dati(che forniscono il meccanismo che consente di richiamare talidati) sia i componenti visuali di manipolazione checonsentono di visualizzarli e manipolarli. I componenti diaccesso ai dati derivano dalla classe definita TDataset; fraessi vi sono TTable, TQuery, TStoredProc. I componenti di

manipolazione includono TDBEdit, TDBListbox, TDBGrid e molti altri :essi funzionano comecomponenti di editing, caselle di riepilogo o componenti a griglia ma in più sono legati a unaparticolare tabella o campo di tabella e se ne è fatto ampio uso nell’implementazione delle maschere

Applicazione

Database

BDE

Page 52: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 52 -

MASCHERE

Form Accesso al database Agenzia Giornalistica

All’avvio dell’applicazione si presenta la maschera ‘Accesso al database Agenzia Giornalistica’ incui ci si può classificare come cliente o fornitore e da cui si ha l’accesso alle diverse possibilitàfornite dalle due categorie.

Form Accesso per i clienti e Accesso per i fornitori

A seconda della propria qualifica si accede ad uno dei due form sottostanti analoghi riguardo allapossibilità di effettuare le principali Stored Procedures di cui è richiesta l’implementazione neltesto. Per quanto riguarda la maschera “Accesso per i clienti” il pulsante “10 Notizie” permette divisualizzare le ultime 10 notizie d’agenzia pubblicate. Il pulsante “Statistiche” dà accesso allepossibili statistiche riguardo ai fornitori più produttivi. Il pulsante “Parole Chiave” dà la possibilitàdi reperire tutti i servizi collegati in qualche modo alla parola chiave scelta. Infine, il pulsante “100Servizi” mostra gli ultimi 100 servizi (notizie e articoli) pubblicati riguardanti una certa categoria euna data sede o area geografica

Page 53: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 53 -

La differenza sostanziale tra il modulo di immissione per clienti e quello per fornitori consiste nelfatto che il cliente non può effettuare inserimenti di notizie, articoli o foto, attività che rimane dipertinenza di un fornitore accreditato. I pulsanti “Inserisci Notizia”, “Inserisci Articolo” e “InserisciFotografia” sono di chiaro significato

Form Ricerca degli ultimi 100 servizi per categoria, area geografica o sede

Attraverso un pannello di radiobutton ‘a scomparsa’ si è nuovamente sfruttata la politica diprogrammazione ad oggetti limitando la visibilità degli utenti sugli oggetti legali del database.

Page 54: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 54 -

Form Inserimento di una notizia d’agenzia

Attraverso il componente Tquery essa richiama la Stored Procedure omonima e permette ilpopolamento del database con notizie, nel rispetto dei vincoli di immissione e coerenza dei datirichiesti dal nostro archivio. Parte di questi controlli viene effettuata mediante trigger, parte deivincoli invece è forzata dalla maschera stessa nel senso che si è deciso di far visualizzare nelcomponente ‘combo box’ solamente - i codici dei caporedattori relativi all’opportuna categoria di immissione;

- categorie e codici di fornitori attivi al momento nell’agenzia;- luoghi e stati coerenti nella loro collocazione geografica ;

ovvero in osservanza al principio di programmazione ad oggetti si è cercato di proteggere lacoerenza dei dati rendendo visibili solo quelli che fossero possibili da scegliere. All’atto praticoquesto si è tradotto in un collegamento al database tramite

- componenti a tendina, di tipo Combo Box dal punto di vista del C++ Builder, collegati adaltri componenti Tquery in cui si sono incapsulate istruzioni in SQL, ovvero le query cheselezionassero dal database solo i campi che si volevano rendere visibili.

Page 55: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 55 -

Form Inserimento di un articolo e Inserimento di una fotografiaLa maschera per gli articoli è praticamente identica a quella per l’inserimento di notizie, a menodell’attributo ‘correzioni’ che non deve essere presente.

Anche la maschera per le fotografie è analoga alle precedenti, con l’aggiunta dei campi “url” e“didascalia”.

.

Page 56: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 56 -

Form Statistiche

Si è scelto di permettere la parametrizzazione della statistica in termini di numero di elementi, ditipo di fornitore e di qualità o produttività.

Form Ricerca per parole chiave

Questo form dà la possibilità di ricercare i titoli degli articoli inerenti ad una data parola chiave, ititoli degli articoli collegati ad altri articoli che siano inerenti a quella parola chiave ed infine i titolidegli articoli che hanno a corredo fotografie caratterizzate dallo stesso termine

Page 57: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 57 -

Form Ultime 10 notizie d'agenzia

Permette la visualizzazione delle ultime 10 notizie pubblicate .

Page 58: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 58 -

CODICE DEL PROGRAMMA

File Accesso.cpp

#include <vcl.h>#pragma hdrstop

#include "Accesso.h"#include "Cliente.h"#include "Fornitore.h"#include "Inserisci_notizia.h"#include "Parole_chiave.h"#include "Statistiche.h"#include "Ultime_10_notizie.h"#include "Ultimi_100_servizi.h"

#pragma package(smart_init)#pragma resource "*.dfm"TFrmAccesso *FrmAccesso;

__fastcall TFrmAccesso::TFrmAccesso(TComponent* Owner) : TForm(Owner){}

// gestore dell'evento generato dal click sul pulsante OKvoid __fastcall TFrmAccesso::BitBtn1Click(TObject *Sender){Database1->Close();// eseguo il login al database con nome utente e password immessi dall'utenteDatabase1->Params->Values["user name"] = Edit1->Text;Database1->Params->Values["password"] = Edit2->Text;Database1->Open();/* eseguo la query che mi indica se l'utente è un cliente o un fornitorein base ai parametri di login, in questo modo si fa partire il relativo form */Query1->Close();Query1->Prepare();Query1->ParamByName("username")->AsString = Edit1->Text;Query1->Open();if (Query1->Fields[0]->AsString == "c") FrmCliente->Show();else FrmFornitore->Show();}

File Agenzia_Giornalistica.cpp

/* è il codice di avvio del programma */

#include <vcl.h>#pragma hdrstop

Page 59: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 59 -

USERES("Agenzia_Giornalistica.res");USEFORM("Accesso.cpp", FrmAccesso);USEFORM("Ultimi_100_servizi.cpp", FrmUltimi100Servizi);USEFORM("Fornitore.cpp", FrmFornitore);USEFORM("Inserisci_articolo.cpp", FrmInserisciArticolo);USEFORM("Inserisci_notizia.cpp", FrmInserisciNotizia);USEFORM("Parole_chiave.cpp", FrmParoleChiave);USEFORM("Statistiche.cpp", FrmStatistiche);USEFORM("Ultime_10_notizie.cpp", FrmUltime10Notizie);USEFORM("Cliente.cpp", FrmCliente);USEFORM("Inserisci_foto.cpp", FrmInserisciFoto);USEFORM("About.cpp", AboutBox);

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){ try { Application->Initialize(); Application->CreateForm(__classid(TFrmAccesso), &FrmAccesso); Application->CreateForm(__classid(TFrmUltimi100Servizi), &FrmUltimi100Servizi); Application->CreateForm(__classid(TFrmFornitore), &FrmFornitore); Application->CreateForm(__classid(TFrmInserisciArticolo), &FrmInserisciArticolo); Application->CreateForm(__classid(TFrmInserisciNotizia), &FrmInserisciNotizia); Application->CreateForm(__classid(TFrmParoleChiave), &FrmParoleChiave); Application->CreateForm(__classid(TFrmStatistiche), &FrmStatistiche); Application->CreateForm(__classid(TFrmUltime10Notizie), &FrmUltime10Notizie); Application->CreateForm(__classid(TFrmCliente), &FrmCliente); Application->CreateForm(__classid(TFrmInserisciFoto), &FrmInserisciFoto); Application->CreateForm(__classid(TAboutBox), &AboutBox); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0;}

File Cliente.cpp

#include <vcl.h>#pragma hdrstop

#include "cliente.h"#include "ultime_10_notizie.h"#include "statistiche.h"#include "parole_chiave.h"#include "ultimi_100_servizi.h"#include "inserisci_notizia.h"#include "About.h"

Page 60: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 60 -

#pragma package(smart_init)#pragma resource "*.dfm"TFrmCliente *FrmCliente;

__fastcall TFrmCliente::TFrmCliente(TComponent* Owner) : TForm(Owner){}

// gestore dell'evento generato dal click sul pulsante 10 Notizievoid __fastcall TFrmCliente::BtnPrime10NotizieClick(TObject *Sender){FrmUltime10Notizie->Show();}

// gestore dell'evento generato dal click sul pulsante statistichevoid __fastcall TFrmCliente::BtnStatisticheClick(TObject *Sender){FrmStatistiche->Show();}

// gestore dell'evento generato dal click sul pulsante Parole Chiavevoid __fastcall TFrmCliente::BtnParoleChiaveClick(TObject *Sender){FrmParoleChiave->Show();}

// gestore dell'evento generato dal click sul pulsante 100 Servizivoid __fastcall TFrmCliente::BtnUltimi100ServiziClick(TObject *Sender){FrmUltimi100Servizi->Show();}

// gestore dell'evento generato dal click sul pulsante ABOUTvoid __fastcall TFrmCliente::BitBtn2Click(TObject *Sender){AboutBox->ShowModal();}

// gestore dell'evento generato dal click sul pulsante ESCIvoid __fastcall TFrmCliente::BitBtn1Click(TObject *Sender){FrmCliente->Close();}

File Fornitore.cpp

#include <vcl.h>#pragma hdrstop

Page 61: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 61 -

#include "Fornitore.h"#include "ultime_10_notizie.h"#include "statistiche.h"#include "parole_chiave.h"#include "ultimi_100_servizi.h"#include "inserisci_notizia.h"#include "Inserisci_articolo.h"#include "Inserisci_foto.h"#include "About.h"

#pragma package(smart_init)#pragma resource "*.dfm"TFrmFornitore *FrmFornitore;

__fastcall TFrmFornitore::TFrmFornitore(TComponent* Owner) : TForm(Owner){}

// gestore dell'evento generato dal click sul pulsante 10 Notizievoid __fastcall TFrmFornitore::BtnPrime10NotizieClick(TObject *Sender){FrmUltime10Notizie->Show();}

// gestore dell'evento generato dal click sul pulsante Statistichevoid __fastcall TFrmFornitore::BtnStatisticheClick(TObject *Sender){FrmStatistiche->Show();}

// gestore dell'evento generato dal click sul pulsante Parole Chiavevoid __fastcall TFrmFornitore::BtnParoleChiaveClick(TObject *Sender){FrmParoleChiave->Show();}

// gestore dell'evento generato dal click sul pulsante 100 Servizivoid __fastcall TFrmFornitore::BtnUltimi100ServiziClick(TObject *Sender){FrmUltimi100Servizi->Show();}

// gestore dell'evento generato dal click sul pulsante Inserisci Notiziavoid __fastcall TFrmFornitore::BtnInserisciNotiziaClick(TObject *Sender){FrmInserisciNotizia->Show();}

// gestore dell'evento generato dal click sul pulsante Inserisci Articolo

Page 62: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 62 -

void __fastcall TFrmFornitore::BtnInserisciArticoloClick(TObject *Sender){FrmInserisciArticolo->Show();}

// gestore dell'evento generato dal click sul pulsante Inserisci Fotografiavoid __fastcall TFrmFornitore::BtnInserisciFotoClick(TObject *Sender){FrmInserisciFoto->Show();}

// gestore dell'evento generato dal click sul pulsante ABOUTvoid __fastcall TFrmFornitore::BitBtn2Click(TObject *Sender){AboutBox->ShowModal();}

// gestore dell'evento generato dal click sul pulsante ESCIvoid __fastcall TFrmFornitore::BitBtn1Click(TObject *Sender){FrmFornitore->Close();}

File Inserisci_articolo.cpp

include <vcl.h>#pragma hdrstop

#include "Inserisci_articolo.h"

#pragma package(smart_init)#pragma resource "*.dfm"TFrmInserisciArticolo *FrmInserisciArticolo;

__fastcall TFrmInserisciArticolo::TFrmInserisciArticolo(TComponent* Owner) : TForm(Owner){}

// gestore dell'evento generato dal click sul pulsante OKvoid __fastcall TFrmInserisciArticolo::BitBtn1Click(TObject *Sender){/* per evitare che l'utente potesse scegliere separatamente luogo e stato, conpossibilità di incoerenza, nel combo box luogo viene fornito il luogo come lacomposizione delle stringhe formanti il nome e lo stato */AnsiString nome[31], stato[31];int index;/* poiché alla query devono essere passati come parametri separatamente nome estato scelti dall'utente separo la stringa scelta nelle due componenti primitive */index = ComboBoxLuogo->Text.Pos(", ");

Page 63: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 63 -

*nome = ComboBoxLuogo->Text.SubString(0, index-1);*stato = ComboBoxLuogo->Text.SubString(index+2, ComboBoxLuogo->Text.Length()-index);// eseguo la query che richiama la stored procedure per l'inserimento dell'articoloQueryPrincipale->Close();QueryPrincipale->Prepare();QueryPrincipale->ParamByName("tipo")->AsString = ComboBoxCategoria->Text;QueryPrincipale->ParamByName("cfpro")->AsString = ComboBoxCFPro->Text;QueryPrincipale->ParamByName("cfcap")->AsString = ComboBoxCFCap->Text;QueryPrincipale->ParamByName("nome")->AsString = *nome;QueryPrincipale->ParamByName("stato")->AsString = *stato;QueryPrincipale->ParamByName("accettato")->AsBoolean = Accettato->Checked;QueryPrincipale->ParamByName("data")->AsDateTime = Data->DateTime;QueryPrincipale->ParamByName("testo")->AsBlob = MemoTesto->Lines->Text;QueryPrincipale->ParamByName("titolo")->AsString = EditTitolo->Text;QueryPrincipale->ExecSQL();Application->MessageBox("L'articolo è stato inserito correttamente", "Conferma immissione",MB_OK); }

// gestore dell'evento generato dal click sul pulsante CANCELvoid __fastcall TFrmInserisciArticolo::BitBtn2Click(TObject *Sender){FrmInserisciArticolo->Close();}

// gestore dell'evento generato all'atto della creazione del form//NB: il gestore di questo evento è richiamato anche all'attivazione del formvoid __fastcall TFrmInserisciArticolo::FormCreate(TObject *Sender){int i;// mando in esecuzione le query per riempire i campi dei combo boxQueryCategoria->Close();QueryCategoria->Open();QueryCFPro->Close();QueryCFPro->Open();QueryLuogo->Close();QueryLuogo->Open();QueryCFCap->Close();// passo ai combo box i risultati delle rispettive queryfor (i=0; i<QueryCategoria->RecordCount; i++) {ComboBoxCategoria->Items->Strings[i] = QueryCategoria->Fields[0]->AsString; QueryCategoria->Next(); }ComboBoxCategoria->Text = ComboBoxCategoria->Items->Strings[0];QueryCFCap->Prepare();QueryCFCap->ParamByName("tipo")->AsString = ComboBoxCategoria->Text;QueryCFCap->Open();for (i=0; i<QueryCFCap->RecordCount; i++) {ComboBoxCFCap->Items->Strings[i] = QueryCFCap->Fields[0]->AsString; QueryCFCap->Next(); }

Page 64: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 64 -

ComboBoxCFCap->Text = ComboBoxCFCap->Items->Strings[0];for (i=0; i<QueryCFPro->RecordCount; i++) {ComboBoxCFPro->Items->Strings[i] = QueryCFPro->Fields[0]->AsString; QueryCFPro->Next(); }ComboBoxCFPro->Text = ComboBoxCFPro->Items->Strings[0];for (i=0; i<QueryLuogo->RecordCount; i++) {ComboBoxLuogo->Items->Strings[i] = QueryLuogo->Fields[0]->AsString+", "+QueryLuogo->Fields[1]->AsString; QueryLuogo->Next(); }ComboBoxLuogo->Text = ComboBoxLuogo->Items->Strings[0];// seleziono di default la data correnteData->Date = Now();}

// gestore dell'evento generato dalla scelta di una categoriavoid __fastcall TFrmInserisciArticolo::ComboBoxCategoriaChange( TObject *Sender){ int i;QueryCFCap->Close();QueryCFCap->Prepare();QueryCFCap->ParamByName("tipo")->AsString = ComboBoxCategoria->Text;QueryCFCap->Open();/* passo al combo box per il codice del caporedattore i risultati della query in questo modo risultano selezionabili solo i caporedattori della categoria scelta*/for (i=0; i<QueryCFCap->RecordCount; i++) {ComboBoxCFCap->Items->Strings[i] = QueryCFCap->Fields[0]->AsString; QueryCFCap->Next(); }ComboBoxCFCap->Text = ComboBoxCFCap->Items->Strings[0];}

File Inserisci_foto.cpp

#include <vcl.h>#pragma hdrstop

#include "Inserisci_foto.h"

#pragma package(smart_init)#pragma resource "*.dfm"TFrmInserisciFoto *FrmInserisciFoto;

__fastcall TFrmInserisciFoto::TFrmInserisciFoto(TComponent* Owner) : TForm(Owner){}

Page 65: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 65 -

// gestore dell'evento generato dal click sul pulsante OKvoid __fastcall TFrmInserisciFoto::BitBtn1Click(TObject *Sender){/* per evitare che l'utente potesse scegliere separatamente luogo e stato, conpossibilità di incoerenza, nel combo box luogo viene fornito il luogo come lacomposizione delle stringhe formanti il nome e lo stato */AnsiString nome[31], stato[31];int index;/* poiché alla query devono essere passati come parametri separatamente nome estato scelti dall'utente separo la stringa scelta nelle due componenti primitive */index = ComboBoxLuogo->Text.Pos(", ");*nome = ComboBoxLuogo->Text.SubString(0, index-1);*stato = ComboBoxLuogo->Text.SubString(index+2, ComboBoxLuogo->Text.Length()-index);// eseguo la query che richiama la stored procedure per l'inserimento della fotografiaQueryPrincipale->Close();QueryPrincipale->Prepare();QueryPrincipale->ParamByName("tipo")->AsString = ComboBoxCategoria->Text;QueryPrincipale->ParamByName("cfpro")->AsString = ComboBoxCFPro->Text;QueryPrincipale->ParamByName("cfcap")->AsString = ComboBoxCFCap->Text;QueryPrincipale->ParamByName("nome")->AsString = *nome;QueryPrincipale->ParamByName("stato")->AsString = *stato;QueryPrincipale->ParamByName("accettato")->AsBoolean = Accettato->Checked;QueryPrincipale->ParamByName("data")->AsDateTime = Data->DateTime;QueryPrincipale->ParamByName("didascalia")->AsString = MemoDidascalia->Lines->Text;QueryPrincipale->ParamByName("url")->AsString = EditUrl->Text;QueryPrincipale->ParamByName("a_se")->AsBoolean = A_Se->Checked;QueryPrincipale->ExecSQL();Application->MessageBox("La fotografia è stata inserita correttamente", "Conferma immissione",MB_OK);}

// gestore dell'evento generato dal click sul pulsante CANCELvoid __fastcall TFrmInserisciFoto::BitBtn2Click(TObject *Sender){FrmInserisciFoto->Close();}

// gestore dell'evento generato all'atto della creazione del form//NB: il gestore di questo evento è richiamato anche all'attivazione del formvoid __fastcall TFrmInserisciFoto::FormCreate(TObject *Sender){int i;// mando in esecuzione le query per riempire i campi dei combo boxQueryCategoria->Close();QueryCategoria->Open();QueryCFPro->Close();QueryCFPro->Open();QueryLuogo->Close();QueryLuogo->Open();QueryCFCap->Close();// passo ai combo box i risultati delle rispettive query

Page 66: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 66 -

for (i=0; i<QueryCategoria->RecordCount; i++) {ComboBoxCategoria->Items->Strings[i] = QueryCategoria->Fields[0]->AsString; QueryCategoria->Next(); }ComboBoxCategoria->Text = ComboBoxCategoria->Items->Strings[0];QueryCFCap->Prepare();QueryCFCap->ParamByName("tipo")->AsString = ComboBoxCategoria->Text;QueryCFCap->Open();for (i=0; i<QueryCFCap->RecordCount; i++) {ComboBoxCFCap->Items->Strings[i] = QueryCFCap->Fields[0]->AsString; QueryCFCap->Next(); }ComboBoxCFCap->Text = ComboBoxCFCap->Items->Strings[0];for (i=0; i<QueryCFPro->RecordCount; i++) {ComboBoxCFPro->Items->Strings[i] = QueryCFPro->Fields[0]->AsString; QueryCFPro->Next(); }ComboBoxCFPro->Text = ComboBoxCFPro->Items->Strings[0];for (i=0; i<QueryLuogo->RecordCount; i++) {ComboBoxLuogo->Items->Strings[i] = QueryLuogo->Fields[0]->AsString+", "+QueryLuogo->Fields[1]->AsString; QueryLuogo->Next(); }ComboBoxLuogo->Text = ComboBoxLuogo->Items->Strings[0];// seleziono di default la data correnteData->Date = Now();}

// gestore dell'evento generato dalla scelta di una categoriavoid __fastcall TFrmInserisciFoto::ComboBoxCategoriaChange( TObject *Sender){ int i;QueryCFCap->Close();QueryCFCap->Prepare();QueryCFCap->ParamByName("tipo")->AsString = ComboBoxCategoria->Text;QueryCFCap->Open();/* passo al combo box per il codice del caporedattore i risultati della query in questo modo risultano selezionabili solo i caporedattori della categoria scelta*/for (i=0; i<QueryCFCap->RecordCount; i++) {ComboBoxCFCap->Items->Strings[i] = QueryCFCap->Fields[0]->AsString; QueryCFCap->Next(); }ComboBoxCFCap->Text = ComboBoxCFCap->Items->Strings[0];}

File Inserisci_notizia.cpp

#include <vcl.h>#pragma hdrstop

Page 67: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 67 -

#include "inserisci_notizia.h"

#pragma resource "*.dfm"TFrmInserisciNotizia *FrmInserisciNotizia;

__fastcall TFrmInserisciNotizia::TFrmInserisciNotizia(TComponent *Owner): TForm(Owner)

{}

// gestore dell'evento generato all'atto della creazione del form//NB: il gestore di questo evento è richiamato anche all'attivazione del formvoid __fastcall TFrmInserisciNotizia::FormCreate(TObject *Sender){int i;// mando in esecuzione le query per riempire i campi dei combo boxQueryCategoria->Close();QueryCategoria->Open();QueryCFPro->Close();QueryCFPro->Open();QueryLuogo->Close();QueryLuogo->Open();QueryCFCap->Close();// passo ai combo box i risultati delle rispettive queryfor (i=0; i<QueryCategoria->RecordCount; i++) {ComboBoxCategoria->Items->Strings[i] = QueryCategoria->Fields[0]->AsString; QueryCategoria->Next(); }ComboBoxCategoria->Text = ComboBoxCategoria->Items->Strings[0];QueryCFCap->Prepare();QueryCFCap->ParamByName("tipo")->AsString = ComboBoxCategoria->Text;QueryCFCap->Open();for (i=0; i<QueryCFCap->RecordCount; i++) {ComboBoxCFCap->Items->Strings[i] = QueryCFCap->Fields[0]->AsString; QueryCFCap->Next(); }ComboBoxCFCap->Text = ComboBoxCFCap->Items->Strings[0];for (i=0; i<QueryCFPro->RecordCount; i++) {ComboBoxCFPro->Items->Strings[i] = QueryCFPro->Fields[0]->AsString; QueryCFPro->Next(); }ComboBoxCFPro->Text = ComboBoxCFPro->Items->Strings[0];for (i=0; i<QueryLuogo->RecordCount; i++) {ComboBoxLuogo->Items->Strings[i] = QueryLuogo->Fields[0]->AsString+", "+QueryLuogo->Fields[1]->AsString; QueryLuogo->Next(); }ComboBoxLuogo->Text = ComboBoxLuogo->Items->Strings[0];// seleziono di default la data correnteData->Date = Now();

Page 68: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 68 -

}

// gestore dell'evento generato dal click sul pulsante OKvoid __fastcall TFrmInserisciNotizia::BitBtn1Click(TObject *Sender){

/* per evitare che l'utente potesse scegliere separatamente luogo e stato, conpossibilità di incoerenza, nel combo box luogo viene fornito il luogo come lacomposizione delle stringhe formanti il nome e lo stato */AnsiString nome[31], stato[31];int index;/* poiché alla query devono essere passati come parametri separatamente nome estato scelti dall'utente separo la stringa scelta nelle due componenti primitive */index = ComboBoxLuogo->Text.Pos(", ");*nome = ComboBoxLuogo->Text.SubString(0, index-1);*stato = ComboBoxLuogo->Text.SubString(index+2, ComboBoxLuogo->Text.Length()-index);// eseguo la query che richiama la stored procedure per l'inserimento della notiziaQueryPrincipale->Close();QueryPrincipale->Prepare();QueryPrincipale->ParamByName("tipo")->AsString = ComboBoxCategoria->Text;QueryPrincipale->ParamByName("cfpro")->AsString = ComboBoxCFPro->Text;QueryPrincipale->ParamByName("cfcap")->AsString = ComboBoxCFCap->Text;QueryPrincipale->ParamByName("nome")->AsString = *nome;QueryPrincipale->ParamByName("stato")->AsString = *stato;QueryPrincipale->ParamByName("accettato")->AsBoolean = Accettato->Checked;QueryPrincipale->ParamByName("correzioni")->AsBoolean = Correzioni->Checked;QueryPrincipale->ParamByName("data")->AsDateTime = Data->DateTime;QueryPrincipale->ParamByName("testo")->AsBlob = MemoTesto->Lines->Text;QueryPrincipale->ParamByName("titolo")->AsString = EditTitolo->Text;QueryPrincipale->ExecSQL();Application->MessageBox("La notizia è stata inserita correttamente", "Conferma immissione",MB_OK);}

// gestore dell'evento generato dalla scelta di una categoriavoid __fastcall TFrmInserisciNotizia::ComboBoxCategoriaChange(TObject *Sender){ int i;QueryCFCap->Close();QueryCFCap->Prepare();QueryCFCap->ParamByName("tipo")->AsString = ComboBoxCategoria->Text;QueryCFCap->Open();/* passo al combo box per il codice del caporedattore i risultati della query in questo modo risultano selezionabili solo i caporedattori della categoria scelta*/for (i=0; i<QueryCFCap->RecordCount; i++) {ComboBoxCFCap->Items->Strings[i] = QueryCFCap->Fields[0]->AsString; QueryCFCap->Next(); }ComboBoxCFCap->Text = ComboBoxCFCap->Items->Strings[0];}

// gestore dell'evento generato dal click sul pulsante CANCEL

Page 69: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 69 -

void __fastcall TFrmInserisciNotizia::BitBtn2Click(TObject *Sender){FrmInserisciNotizia->Close();}

File Parole_chiave.cpp

#include <vcl.h>#pragma hdrstop

#include "Parole_chiave.h"

#pragma package(smart_init)#pragma resource "*.dfm"TFrmParoleChiave *FrmParoleChiave;

__fastcall TFrmParoleChiave::TFrmParoleChiave(TComponent* Owner) : TForm(Owner){}

// gestore dell'evento generato dal click sul pulsante OKvoid __fastcall TFrmParoleChiave::BitBtn1Click(TObject *Sender){/* eseguo la query che richiama la stored procedure per la ricerca degli articoliin base alla parola chiave scelta dall'utente */Query1->Close();Query1->Prepare();Query1->ParamByName("parola")->AsString = ParolaChiave->Text;Query1->Open();DBGridParoleChiave->Visible = true;}

// gestore dell'evento generato dal click sul pulsante CANCELvoid __fastcall TFrmParoleChiave::BitBtn2Click(TObject *Sender){FrmParoleChiave->Close();}

File Statistiche.cpp

#include <vcl.h>#pragma hdrstop

#include "Statistiche.h"

#pragma package(smart_init)#pragma resource "*.dfm"TFrmStatistiche *FrmStatistiche;

Page 70: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 70 -

__fastcall TFrmStatistiche::TFrmStatistiche(TComponent* Owner) : TForm(Owner){}

// gestore dell'evento generato dal click sul pulsante OKvoid __fastcall TFrmStatistiche::BitBtn1Click(TObject *Sender){char TipoFornitore, TipoDato;if (Proposto->Checked) TipoDato = 'p';else TipoDato = 'a';if (Tipo->Text == "Giornalisti") TipoFornitore = 'g';else if (Tipo->Text == "Fotografi") TipoFornitore = 'f'; else TipoFornitore = 'i';// eseguo la query che richiama la stored procedure per le statisticheQuery1->Close();Query1->Prepare();Query1->ParamByName("numero")->AsInteger = Edit1->Text.ToInt();Query1->ParamByName("tipofornitore")->AsString = TipoFornitore;Query1->ParamByName("tipodato")->AsString = TipoDato;Query1->Open();DBGrid1->Visible = true;}

// gestore dell'evento generato dal click sul pulsante CANCELvoid __fastcall TFrmStatistiche::BitBtn2Click(TObject *Sender){FrmStatistiche->Close();}

File Ultime_10_notizie.cpp

#include <vcl.h>#pragma hdrstop

#include "Ultime_10_notizie.h"

#pragma package(smart_init)#pragma resource "*.dfm"TFrmUltime10Notizie *FrmUltime10Notizie;

__fastcall TFrmUltime10Notizie::TFrmUltime10Notizie(TComponent* Owner) : TForm(Owner){}

// gestore dell'evento generato all'atto della creazione del form//NB: il gestore di questo evento è richiamato anche all'attivazione del formvoid __fastcall TFrmUltime10Notizie::FormCreate(TObject *Sender)

Page 71: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 71 -

{// eseguo la query che richiama la stored procedure per le ultime 10 notizieQuery1->Close();Query1->Open();}

// gestore dell'evento generato dal click sul pulsante OKvoid __fastcall TFrmUltime10Notizie::BitBtn1Click(TObject *Sender){FrmUltime10Notizie->Close();}

File Ultimi_100_servizi.cpp

#include <vcl.h>#pragma hdrstop

#include "Ultimi_100_servizi.h"

#pragma package(smart_init)#pragma resource "*.dfm"TFrmUltimi100Servizi *FrmUltimi100Servizi;

__fastcall TFrmUltimi100Servizi::TFrmUltimi100Servizi(TComponent* Owner) : TForm(Owner){}

// gestore dell'evento generato dal click sul pulsante OKvoid __fastcall TFrmUltimi100Servizi::BitBtn1Click(TObject *Sender){Query1->Close();Query1->Prepare();/* se è selezionato il campo Area Geografica, passo alla query come parametri il valore di tale campo per nomeag e una stringa vuota per sede*/if (CBArea->Visible == true) {Query1->ParamByName("nomeag")->AsString = CBArea->Text; Query1->ParamByName("sede")->AsString = ""; }/* altrimenti faccio il contrario*/else {Query1->ParamByName("nomeag")->AsString = ""; Query1->ParamByName("sede")->AsString = CBSede->Text; }/* in ogni caso passo alla query come parametro tipo il contenuto del campodove è indicata la categoria scelta dall'utente*/Query1->ParamByName("tipo")->AsString = CBCategoria->Text;/* mando in esecuzione la query*/Query1->Open();/* rendo visibili i risultati */

Page 72: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 72 -

Label1->Visible = true;Label2->Visible = true;Label3->Visible = true;DBCtrlGrid1->Visible = true;}

// gestore dell'evento generato dal click sul pulsante CANCELvoid __fastcall TFrmUltimi100Servizi::BitBtn2Click(TObject *Sender){FrmUltimi100Servizi->Close();}

// gestore dell'evento generato all'atto della creazione del form//NB: il gestore di questo evento è richiamato anche all'attivazione del formvoid __fastcall TFrmUltimi100Servizi::FormCreate(TObject *Sender){int i;// mando in esecuzione le query per riempire i campi dei combo boxQueryCategoria->Close();QueryCategoria->Open();QuerySede->Close();QuerySede->Open();QueryArea->Close();QueryArea->Open();// passo ai combo box i risultati delle rispettive queryfor (i=0; i<QueryCategoria->RecordCount; i++) {CBCategoria->Items->Strings[i] = QueryCategoria->Fields[0]->AsString; QueryCategoria->Next(); }CBCategoria->Text = CBCategoria->Items->Strings[0];for (i=0; i<QuerySede->RecordCount; i++) {CBSede->Items->Strings[i] = QuerySede->Fields[0]->AsString; QuerySede->Next(); }CBSede->Text = CBSede->Items->Strings[0];for (i=0; i<QueryArea->RecordCount; i++) {CBArea->Items->Strings[i] = QueryArea->Fields[0]->AsString; QueryArea->Next(); }CBArea->Text = CBArea->Items->Strings[0];}

/* gestore dell'evento generato dalla scelta esclusiva del radiobutton relativoall'Area Geografica */void __fastcall TFrmUltimi100Servizi::RadioButton1Click(TObject *Sender){CBArea->Visible = true;CBSede->Visible = false;}

/* gestore dell'evento generato dalla scelta esclusiva del radiobutton relativo

Page 73: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 73 -

alla Sede */void __fastcall TFrmUltimi100Servizi::RadioButton2Click(TObject *Sender){CBArea->Visible = false;CBSede->Visible = true;}

File Accesso.h

#ifndef accessoH#define accessoH

#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <Db.hpp>#include <DBGrids.hpp>#include <DBTables.hpp>#include <Grids.hpp>#include <Buttons.hpp>

// dichiarazione dei componenti del form

class TFrmAccesso : public TForm{__published: // IDE-managed Components TDatabase *Database1; TEdit *Edit1; TEdit *Edit2; TLabel *Label1; TLabel *Label2; TQuery *Query1; TLabel *Label3; TBitBtn *BitBtn1; TBitBtn *BitBtn2; void __fastcall BitBtn1Click(TObject *Sender);private: // User declarationspublic: // User declarations __fastcall TFrmAccesso(TComponent* Owner);};

extern PACKAGE TFrmAccesso *FrmAccesso;

#endif

File Cliente.h

#ifndef clienteH

Page 74: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 74 -

#define clienteH

#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <ExtCtrls.hpp>#include <Buttons.hpp>

// dichiarazione dei componenti del form

class TFrmCliente : public TForm{__published: // IDE-managed Components TButton *BtnPrime10Notizie; TButton *BtnStatistiche; TButton *BtnParoleChiave; TButton *BtnUltimi100Servizi; TLabel *Label1; TLabel *Label3; TLabel *Label2; TImage *Image1; TBitBtn *BitBtn1; TBitBtn *BitBtn2; void __fastcall BtnPrime10NotizieClick(TObject *Sender); void __fastcall BtnStatisticheClick(TObject *Sender); void __fastcall BtnParoleChiaveClick(TObject *Sender); void __fastcall BtnUltimi100ServiziClick(TObject *Sender);

void __fastcall BitBtn2Click(TObject *Sender); void __fastcall BitBtn1Click(TObject *Sender);private: // User declarationspublic: // User declarations __fastcall TFrmCliente(TComponent* Owner);};

extern PACKAGE TFrmCliente *FrmCliente;

#endif

File Fornitore.h

#ifndef FornitoreH#define FornitoreH

#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <ExtCtrls.hpp>

Page 75: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 75 -

#include <Buttons.hpp>

// dichiarazione dei componenti del form

class TFrmFornitore : public TForm{__published: // IDE-managed Components TButton *BtnPrime10Notizie; TButton *BtnStatistiche; TButton *BtnParoleChiave; TButton *BtnUltimi100Servizi; TButton *BtnInserisciNotizia; TButton *BtnInserisciArticolo; TLabel *Label1; TLabel *Label2; TLabel *Label3; TImage *Image1; TButton *BtnInserisciFoto; TBitBtn *BitBtn1; TBitBtn *BitBtn2; void __fastcall BtnPrime10NotizieClick(TObject *Sender); void __fastcall BtnStatisticheClick(TObject *Sender); void __fastcall BtnParoleChiaveClick(TObject *Sender); void __fastcall BtnUltimi100ServiziClick(TObject *Sender); void __fastcall BtnInserisciNotiziaClick(TObject *Sender); void __fastcall BtnInserisciArticoloClick(TObject *Sender); void __fastcall BtnInserisciFotoClick(TObject *Sender); void __fastcall BitBtn2Click(TObject *Sender); void __fastcall BitBtn1Click(TObject *Sender);private: // User declarationspublic: // User declarations __fastcall TFrmFornitore(TComponent* Owner);};

extern PACKAGE TFrmFornitore *FrmFornitore;

#endif

File Inserisci_articolo.h

#ifndef Inserisci_articoloH#define Inserisci_articoloH

#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <Buttons.hpp>#include <ComCtrls.hpp>#include <Db.hpp>

Page 76: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 76 -

#include <DBTables.hpp>#include <ExtCtrls.hpp>

// dichiarazione dei componenti del form

class TFrmInserisciArticolo : public TForm{__published: // IDE-managed Components TPanel *Panel2; TScrollBox *Genere; TLabel *Label2; TLabel *Label5; TLabel *Label6; TLabel *Label9; TLabel *TITOLO; TLabel *Label7; TLabel *Label3; TCheckBox *Accettato; TDateTimePicker *Data; TEdit *EditTitolo; TBitBtn *BitBtn1; TBitBtn *BitBtn2; TMemo *MemoTesto; TComboBox *ComboBoxCategoria; TComboBox *ComboBoxCFPro; TComboBox *ComboBoxCFCap; TComboBox *ComboBoxLuogo; TQuery *QueryCategoria; TQuery *QueryCFPro; TQuery *QueryCFCap; TQuery *QueryLuogo; TQuery *QueryPrincipale; TImage *Image1; TLabel *Label1; TLabel *Label4; TLabel *Label8; void __fastcall BitBtn1Click(TObject *Sender); void __fastcall BitBtn2Click(TObject *Sender); void __fastcall FormCreate(TObject *Sender); void __fastcall ComboBoxCategoriaChange(TObject *Sender);private: // User declarationspublic: // User declarations __fastcall TFrmInserisciArticolo(TComponent* Owner);};

extern PACKAGE TFrmInserisciArticolo *FrmInserisciArticolo;

#endif

Page 77: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 77 -

File Inserisci_foto.h

#ifndef Inserisci_fotoH#define Inserisci_fotoH

#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <Buttons.hpp>#include <ComCtrls.hpp>#include <Db.hpp>#include <DBTables.hpp>#include <ExtCtrls.hpp>

// dichiarazione dei componenti del form

class TFrmInserisciFoto : public TForm{__published: // IDE-managed Components TImage *Image1; TCheckBox *A_Se; TLabel *Label10; TLabel *URL; TEdit *EditUrl; TMemo *MemoDidascalia; TPanel *Panel2; TScrollBox *Genere; TLabel *Label2; TLabel *Label5; TLabel *Label6; TLabel *Label9; TLabel *Label7; TLabel *Label3; TCheckBox *Accettato; TDateTimePicker *Data; TBitBtn *BitBtn1; TBitBtn *BitBtn2; TComboBox *ComboBoxCategoria; TComboBox *ComboBoxCFPro; TComboBox *ComboBoxCFCap; TComboBox *ComboBoxLuogo; TQuery *QueryCategoria; TQuery *QueryCFPro; TQuery *QueryCFCap; TQuery *QueryLuogo; TQuery *QueryPrincipale; TLabel *Label1; TLabel *Label4; TLabel *Label8; void __fastcall BitBtn1Click(TObject *Sender);

Page 78: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 78 -

void __fastcall BitBtn2Click(TObject *Sender); void __fastcall FormCreate(TObject *Sender); void __fastcall ComboBoxCategoriaChange(TObject *Sender);private: // User declarationspublic: // User declarations __fastcall TFrmInserisciFoto(TComponent* Owner);};

extern PACKAGE TFrmInserisciFoto *FrmInserisciFoto;

#endif

File Inserisci_notizia.h

#ifndef inserisci_notiziaH#define inserisci_notiziaH

#include <SysUtils.hpp>#include <Windows.hpp>#include <Messages.hpp>#include <Classes.hpp>#include <Graphics.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <DBCtrls.hpp>#include <DB.hpp>#include <Buttons.hpp>#include <ComCtrls.hpp>#include <ExtCtrls.hpp>#include <Db.hpp>#include <DBTables.hpp>

// dichiarazione dei componenti del form

class TFrmInserisciNotizia : public TForm{__published: TScrollBox *Genere;

TLabel *Label2;TLabel *Label5;TLabel *Label6;TLabel *Label9;TPanel *Panel2;

TCheckBox *Accettato; TCheckBox *Correzioni; TDateTimePicker *Data; TEdit *EditTitolo; TLabel *TITOLO; TLabel *Label7;

Page 79: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 79 -

TLabel *Label3; TBitBtn *BitBtn1; TBitBtn *BitBtn2; TMemo *MemoTesto; TComboBox *ComboBoxCategoria; TComboBox *ComboBoxCFPro; TComboBox *ComboBoxCFCap; TComboBox *ComboBoxLuogo; TQuery *QueryCategoria; TQuery *QueryCFPro; TQuery *QueryCFCap; TQuery *QueryLuogo; TQuery *QueryPrincipale; TLabel *Label1; TLabel *Label4; TLabel *Label8; TImage *Image1; void __fastcall FormCreate(TObject *Sender); void __fastcall BitBtn1Click(TObject *Sender); void __fastcall ComboBoxCategoriaChange(TObject *Sender); void __fastcall BitBtn2Click(TObject *Sender);private:

// private declarationspublic:

// public declarations__fastcall TFrmInserisciNotizia(TComponent *Owner);

};

extern PACKAGE TFrmInserisciNotizia *FrmInserisciNotizia;

#endif

File Parole_chiave.h

#ifndef parole_chiaveH#define parole_chiaveH

#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <Buttons.hpp>#include <Db.hpp>#include <DBGrids.hpp>#include <DBTables.hpp>#include <Grids.hpp>#include <ExtCtrls.hpp>

// dichiarazione dei componenti del form

Page 80: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 80 -

class TFrmParoleChiave : public TForm{__published: // IDE-managed Components TQuery *Query1; TDataSource *DataSource1; TDBGrid *DBGridParoleChiave; TLabel *Label1; TEdit *ParolaChiave; TBitBtn *BitBtn1; TBitBtn *BitBtn2; TImage *Image1; TLabel *Label4; TLabel *Label5; TLabel *Label6; void __fastcall BitBtn1Click(TObject *Sender); void __fastcall BitBtn2Click(TObject *Sender);

private: // User declarationspublic: // User declarations __fastcall TFrmParoleChiave(TComponent* Owner);};

extern PACKAGE TFrmParoleChiave *FrmParoleChiave;

#endif

File Statistiche.h

#ifndef statisticheH#define statisticheH

#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <Db.hpp>#include <DBGrids.hpp>#include <DBTables.hpp>#include <Grids.hpp>#include <Buttons.hpp>#include <ExtCtrls.hpp>

// dichiarazione dei componenti del form

class TFrmStatistiche : public TForm{__published: // IDE-managed Components TQuery *Query1; TDataSource *DataSource1;

Page 81: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 81 -

TDBGrid *DBGrid1; TEdit *Edit1; TBitBtn *BitBtn1; TLabel *Label1; TLabel *Label2; TComboBox *Tipo; TLabel *Label3; TRadioGroup *RadioGroup1; TRadioButton *Proposto; TRadioButton *Accettato; TBitBtn *BitBtn2; TImage *Image1; TLabel *Label4; TLabel *Label5; TLabel *Label6; void __fastcall BitBtn1Click(TObject *Sender);

void __fastcall BitBtn2Click(TObject *Sender);

private: // User declarationspublic: // User declarations __fastcall TFrmStatistiche(TComponent* Owner);};

extern PACKAGE TFrmStatistiche *FrmStatistiche;

#endif

File Ultime_10_notizie.h

#ifndef ultime_10_notizieH#define ultime_10_notizieH

#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <Db.hpp>#include <DBCGrids.hpp>#include <DBCtrls.hpp>#include <DBTables.hpp>#include <Buttons.hpp>#include <ExtCtrls.hpp>

// dichiarazione dei componenti del form

class TFrmUltime10Notizie : public TForm{

Page 82: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 82 -

__published: // IDE-managed Components TDBCtrlGrid *DBCtrlGrid1; TDBText *DBText1; TDBText *DBText2; TDBMemo *DBMemo1; TDataSource *DataSource1; TQuery *Query1; TDBText *DBText3; TBitBtn *BitBtn1; TLabel *Label1; TImage *Image1; TLabel *Label2; TLabel *Label3; TLabel *Label4; TLabel *Label5; void __fastcall FormCreate(TObject *Sender); void __fastcall BitBtn1Click(TObject *Sender);

private: // User declarationspublic: // User declarations __fastcall TFrmUltime10Notizie(TComponent* Owner);};

extern PACKAGE TFrmUltime10Notizie *FrmUltime10Notizie;

#endif

File Ultimi_100_servizi.h

#ifndef ultimi_100_serviziH#define ultimi_100_serviziH

#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <Buttons.hpp>#include <Db.hpp>#include <DBCGrids.hpp>#include <DBCtrls.hpp>#include <DBTables.hpp>#include <ExtCtrls.hpp>

// dichiarazione dei componenti del form

class TFrmUltimi100Servizi : public TForm{__published: // IDE-managed Components TBitBtn *BitBtn1;

Page 83: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 83 -

TBitBtn *BitBtn2; TDataSource *DataSource1; TQuery *Query1; TDBCtrlGrid *DBCtrlGrid1; TDBText *DBText1; TDBText *DBText2; TDBText *DBText3; TLabel *Label1; TLabel *Label2; TLabel *Label3; TLabel *Label4; TQuery *QueryCategoria; TLabel *Label5; TRadioGroup *RadioGroup1; TRadioButton *RadioButton1; TRadioButton *RadioButton2; TComboBox *CBCategoria; TComboBox *CBArea; TComboBox *CBSede; TQuery *QueryArea; TQuery *QuerySede; TImage *Image1; TLabel *Label6; TLabel *Label7; TLabel *Label8; TLabel *Label9; TLabel *Label10; void __fastcall BitBtn1Click(TObject *Sender); void __fastcall BitBtn2Click(TObject *Sender); void __fastcall FormCreate(TObject *Sender); void __fastcall RadioButton1Click(TObject *Sender); void __fastcall RadioButton2Click(TObject *Sender);private: // User declarationspublic: // User declarations __fastcall TFrmUltimi100Servizi(TComponent* Owner);};

extern PACKAGE TFrmUltimi100Servizi *FrmUltimi100Servizi;

#endif

Page 84: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 84 -

File dfm (descrizione dei forms)

Form Accesso

object FrmAccesso: TFrmAccesso Left = 266 Top = 136 BorderStyle = bsSingle Caption = 'Accesso al database Agenzia Giornalistica' ClientHeight = 189 ClientWidth = 337 Color = 13681328 Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] Icon.Data = {codice dell’icona} Position = poScreenCenter PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 56 Top = 64 Width = 46 Height = 13 Caption = 'username' end object Label2: TLabel Left = 56 Top = 88 Width = 45 Height = 13 Caption = 'password' end object Label3: TLabel Left = 24 Top = 24 Width = 256 Height = 13 Caption = 'È necessario inserire il proprio usernamee la password' end object Edit1: TEdit Left = 112 Top = 56 Width = 121 Height = 21 TabOrder = 0 end object Edit2: TEdit Left = 112 Top = 80 Width = 121 Height = 21 PasswordChar = '*' TabOrder = 1 end object BitBtn1: TBitBtn Left = 72 Top = 128

Width = 75 Height = 25 Caption = '&OK' Default = True ModalResult = 1 TabOrder = 2 OnClick = BitBtn1Click Glyph.Data = {codice dell’icona} NumGlyphs = 2 end object BitBtn2: TBitBtn Left = 176 Top = 128 Width = 75 Height = 25 Caption = '&Esci' TabOrder = 3 Kind = bkClose end object Database1: TDatabase AliasName = 'GRUPPO_5' DatabaseName = 'Agenzia_Giornalistica' LoginPrompt = False Params.Strings = ( 'USER NAME=username 'PASSWORD=password) SessionName = 'Default' Left = 32 end object Query1: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select tipo from utenti where username =:username') Params.Data ={0100010008757365726E616D650001020030000000} Left = 64 endend

Form Cliente

object FrmCliente: TFrmCliente Left = 235 Top = 118 Width = 505 Height = 442 Caption = 'Accesso per i clienti' Color = clWhite Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] Icon.Data = {codice dell’icona} PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 112

Page 85: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 85 -

Top = 8 Width = 267 Height = 24 Caption = 'Agenzia Giornalistica - Gruppo 5 ' Font.Charset = ANSI_CHARSET Font.Color = clTeal Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label3: TLabel Left = 96 Top = 32 Width = 171 Height = 24 Caption = 'Modulo di immissione per' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsItalic] ParentFont = False end object Label2: TLabel Left = 272 Top = 32 Width = 91 Height = 23 Caption = 'CLIENTI ' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Perpetua Titling MT' Font.Style = [fsBold, fsItalic] ParentFont = False end object Image1: TImage Left = 24 Top = 75 Width = 193 Height = 305 Picture.Data = {codice dell’immagine} end object BtnPrime10Notizie: TButton Left = 256 Top = 96 Width = 185 Height = 41 Caption = '10 Notizie' TabOrder = 0 OnClick = BtnPrime10NotizieClick end object BtnStatistiche: TButton Left = 256 Top = 152 Width = 185 Height = 41 Caption = 'Statistiche' TabOrder = 1 OnClick = BtnStatisticheClick end

object BtnParoleChiave: TButton Left = 256 Top = 208 Width = 185 Height = 41 Caption = 'Parole Chiave' TabOrder = 2 OnClick = BtnParoleChiaveClick end object BtnUltimi100Servizi: TButton Left = 256 Top = 264 Width = 185 Height = 41 Caption = '100 Servizi' TabOrder = 3 OnClick = BtnUltimi100ServiziClick end object BitBtn1: TBitBtn Left = 360 Top = 352 Width = 75 Height = 25 Caption = '&Esci' TabOrder = 5 OnClick = BitBtn1Click Kind = bkClose end object BitBtn2: TBitBtn Left = 264 Top = 352 Width = 75 Height = 25 Caption = 'About' TabOrder = 4 OnClick = BitBtn2Click Glyph.Data = {codice dell’icona} NumGlyphs = 2 end

Form Fornitore

object FrmFornitore: TFrmFornitore Left = 234 Top = 100 Width = 539 Height = 498 Caption = 'Accesso per i Fornitori' Color = clWhite Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 96 Top = 24 Width = 267

Page 86: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 86 -

Height = 24 Caption = 'Agenzia Giornalistica - Gruppo 5 ' Font.Charset = ANSI_CHARSET Font.Color = clTeal Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label2: TLabel Left = 256 Top = 48 Width = 128 Height = 23 Caption = 'FORNITORI ' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Perpetua Titling MT' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label3: TLabel Left = 80 Top = 48 Width = 171 Height = 24 Caption = 'Modulo di immissione per' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsItalic] ParentFont = False end object Image1: TImage Left = 48 Top = 96 Width = 193 Height = 305 Picture.Data = {codice dell’immagine} end object BtnPrime10Notizie: TButton Left = 280 Top = 80 Width = 185 Height = 41 Caption = '10 Notizie' TabOrder = 0 OnClick = BtnPrime10NotizieClick end object BtnStatistiche: TButton Left = 280 Top = 136 Width = 185 Height = 41 Caption = 'Statistiche' TabOrder = 1 OnClick = BtnStatisticheClick end object BtnParoleChiave: TButton Left = 280

Top = 192 Width = 185 Height = 41 Caption = 'Parole Chiave' TabOrder = 2 OnClick = BtnParoleChiaveClick end object BtnUltimi100Servizi: TButton Left = 280 Top = 248 Width = 185 Height = 41 Caption = '100 Servizi' TabOrder = 3 OnClick = BtnUltimi100ServiziClick end object BtnInserisciNotizia: TButton Left = 280 Top = 304 Width = 185 Height = 41 Caption = 'Inserisci Notizia' TabOrder = 4 OnClick = BtnInserisciNotiziaClick end object BtnInserisciArticolo: TButton Left = 280 Top = 360 Width = 185 Height = 41 Caption = 'Inserisci Articolo' TabOrder = 5 OnClick = BtnInserisciArticoloClick end object BtnInserisciFoto: TButton Left = 280 Top = 416 Width = 185 Height = 41 Caption = 'Inserisci Fotografia' TabOrder = 6 OnClick = BtnInserisciFotoClick end object BitBtn1: TBitBtn Left = 152 Top = 424 Width = 75 Height = 25 Caption = '&Esci' TabOrder = 8 OnClick = BitBtn1Click Kind = bkClose end object BitBtn2: TBitBtn Left = 56 Top = 424 Width = 75 Height = 25 Caption = 'About' TabOrder = 7 OnClick = BitBtn2Click Glyph.Data = {codice dell’icona}

Page 87: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 87 -

NumGlyphs = 2 endend

Form Inserisci Articolo

object FrmInserisciArticolo: TFrmInserisciArticolo Left = 251 Top = 137 Width = 605 Height = 560 Caption = 'Immissione di un nuovo articolo' Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OnActivate = FormCreate OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Panel2: TPanel Left = 0 Top = 0 Width = 597 Height = 533 Align = alClient BevelInner = bvLowered BorderWidth = 4 Caption = 'Panel2' Color = 13681328 TabOrder = 0 object Genere: TScrollBox Left = 6 Top = 6 Width = 585 Height = 521 HorzScrollBar.Margin = 6 HorzScrollBar.Range = 348 VertScrollBar.Margin = 6 VertScrollBar.Range = 160 Align = alClient AutoScroll = False BorderStyle = bsNone Color = 13681328 ParentColor = False TabOrder = 0 object Label2: TLabel Left = 185 Top = 64 Width = 62 Height = 13 Caption = 'CATEGORIA' end object Label5: TLabel Left = 14 Top = 108 Width = 91 Height = 13 Caption = 'CF PROPONENTE'

end object Label6: TLabel Left = 185 Top = 108 Width = 112 Height = 13 Caption = 'CF CAPOREDATTORE' end object Label9: TLabel Left = 185 Top = 153 Width = 29 Height = 13 Caption = 'DATA' end object TITOLO: TLabel Left = 16 Top = 232 Width = 39 Height = 13 Caption = 'TITOLO' end object Label7: TLabel Left = 16 Top = 280 Width = 125 Height = 13 Caption = 'TESTO DELL'#39' ARTICOLO' end object Label3: TLabel Left = 16 Top = 153 Width = 38 Height = 13 Caption = 'LUOGO' end object Image1: TImage Left = 344 Top = 64 Width = 225 Height = 177 Picture.Data = {codice dell’immagine} end object Label1: TLabel Left = 32 Top = 8 Width = 267 Height = 24 Caption = 'Agenzia Giornalistica - Gruppo 5 ' Font.Charset = ANSI_CHARSET Font.Color = clTeal Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label4: TLabel Left = 216 Top = 32 Width = 119 Height = 23 Caption = 'Articolo '

Page 88: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 88 -

Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Perpetua Titling MT' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label8: TLabel Left = 16 Top = 32 Width = 193 Height = 24 Caption = 'Modulo di immissione per un' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsItalic] ParentFont = False end object Accettato: TCheckBox Left = 16 Top = 200 Width = 97 Height = 17 Caption = 'Accettato' TabOrder = 5 end object Data: TDateTimePicker Left = 185 Top = 168 Width = 146 Height = 21 CalAlignment = dtaLeft Date = 0.404484837999917 Time = 0.404484837999917 DateFormat = dfShort DateMode = dmComboBox Kind = dtkDate ParseInput = False TabOrder = 4 end object EditTitolo: TEdit Left = 16 Top = 248 Width = 561 Height = 21 TabOrder = 6 end object BitBtn1: TBitBtn Left = 207 Top = 480 Width = 75 Height = 25 TabOrder = 8 OnClick = BitBtn1Click Kind = bkOK end object BitBtn2: TBitBtn Left = 311 Top = 480 Width = 75

Height = 25 TabOrder = 9 OnClick = BitBtn2Click Kind = bkCancel end object MemoTesto: TMemo Left = 16 Top = 296 Width = 561 Height = 161 ScrollBars = ssBoth TabOrder = 7 end object ComboBoxCategoria: TComboBox Left = 185 Top = 77 Width = 146 Height = 21 ItemHeight = 13 TabOrder = 0 OnChange = ComboBoxCategoriaChange end object ComboBoxCFPro: TComboBox Left = 16 Top = 122 Width = 146 Height = 21 ItemHeight = 13 TabOrder = 1 end object ComboBoxCFCap: TComboBox Left = 185 Top = 122 Width = 146 Height = 21 ItemHeight = 13 TabOrder = 2 end object ComboBoxLuogo: TComboBox Left = 16 Top = 168 Width = 146 Height = 21 ItemHeight = 13 TabOrder = 3 end end end object QueryCategoria: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select tipo from categoria') Left = 108 Top = 216 end object QueryCFPro: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select cf from fornitore where attivo = 1') Left = 144 Top = 216 end

Page 89: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 89 -

object QueryCFCap: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select cf' 'from di, fornitore' 'where cf = cfcap' 'and attivo = 1' 'and tipo = :tipo') Params.Data ={01000100047469706F0001020030000000} Left = 180 Top = 216 end object QueryLuogo: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select nome, stato from luogo') Left = 216 Top = 216 end object QueryPrincipale: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = (

'exec inserisci_articolo :tipo, :nome, :stato, :cfpro,:cfcap, :a' + 'ccettato, :data, :testo, :titolo') Params.Data = {

01000900047469706F0001020030000000046E6F6D6500010200300000000573

7461746F000102003000000005636670726F0001020030000000056366636170

00010200300000000961636365747461746F0005020000000000046461746100

0B080000002C845D40CB42000005746573746F000F0100300000067469746F6C 6F0001020030000000} Left = 248 Top = 216 endend

Form Inserisci Fotografia

object FrmInserisciFoto: TFrmInserisciFoto Left = 208 Top = 135 Width = 696 Height = 566 Caption = 'Immissione di una nuova fotografia' Color = 13681328 Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = []

OnActivate = FormCreate OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Label10: TLabel Left = 32 Top = 448 Width = 39 Height = 13 Caption = 'TITOLO' end object Panel2: TPanel Left = 0 Top = 0 Width = 688 Height = 539 Align = alClient BevelInner = bvLowered BorderWidth = 4 Caption = 'Panel2' TabOrder = 0 object Genere: TScrollBox Left = 6 Top = 6 Width = 676 Height = 527 HorzScrollBar.Margin = 6 HorzScrollBar.Range = 348 VertScrollBar.Margin = 6 VertScrollBar.Range = 160 Align = alClient AutoScroll = False BorderStyle = bsNone Color = 13681328 ParentColor = False TabOrder = 0 object Label2: TLabel Left = 193 Top = 80 Width = 62 Height = 13 Caption = 'CATEGORIA' end object Label5: TLabel Left = 22 Top = 124 Width = 91 Height = 13 Caption = 'CF PROPONENTE' end object Label6: TLabel Left = 193 Top = 124 Width = 112 Height = 13 Caption = 'CF CAPOREDATTORE' end object Label9: TLabel Left = 193 Top = 169 Width = 29 Height = 13

Page 90: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 90 -

Caption = 'DATA' end object URL: TLabel Left = 24 Top = 240 Width = 22 Height = 13 Caption = 'URL' end object Label7: TLabel Left = 24 Top = 288 Width = 63 Height = 13 Caption = 'DIDASCALIA' end object Label3: TLabel Left = 24 Top = 169 Width = 38 Height = 13 Caption = 'LUOGO' end object Label1: TLabel Left = 48 Top = 24 Width = 267 Height = 24 Caption = 'Agenzia Giornalistica - Gruppo 5 ' Font.Charset = ANSI_CHARSET Font.Color = clTeal Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label4: TLabel Left = 240 Top = 48 Width = 134 Height = 23 Caption = 'FOTOGRAFIA' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Perpetua Titling MT' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label8: TLabel Left = 32 Top = 48 Width = 205 Height = 24 Caption = 'Modulo di immissione per una ' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsItalic] ParentFont = False end

object Image1: TImage Left = 416 Top = 16 Width = 194 Height = 222 AutoSize = True Picture.Data = {codice dell’immagine} end object Accettato: TCheckBox Left = 24 Top = 216 Width = 97 Height = 17 Caption = 'Accettato' TabOrder = 5 end object Data: TDateTimePicker Left = 193 Top = 184 Width = 146 Height = 21 CalAlignment = dtaLeft Date = 36697.404484838 Time = 36697.404484838 DateFormat = dfShort DateMode = dmComboBox Kind = dtkDate ParseInput = False TabOrder = 4 end object EditUrl: TEdit Left = 24 Top = 256 Width = 585 Height = 21 TabOrder = 7 end object BitBtn1: TBitBtn Left = 239 Top = 488 Width = 75 Height = 25 TabOrder = 9 OnClick = BitBtn1Click Kind = bkOK end object BitBtn2: TBitBtn Left = 335 Top = 488 Width = 75 Height = 25 TabOrder = 10 OnClick = BitBtn2Click Kind = bkCancel end object MemoDidascalia: TMemo Left = 24 Top = 304 Width = 585 Height = 153 ScrollBars = ssBoth TabOrder = 8

Page 91: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 91 -

end object ComboBoxCategoria: TComboBox Left = 193 Top = 93 Width = 146 Height = 21 ItemHeight = 13 TabOrder = 0 OnChange = ComboBoxCategoriaChange end object ComboBoxCFPro: TComboBox Left = 24 Top = 138 Width = 146 Height = 21 ItemHeight = 13 TabOrder = 1 end object ComboBoxCFCap: TComboBox Left = 193 Top = 138 Width = 146 Height = 21 ItemHeight = 13 TabOrder = 2 end object ComboBoxLuogo: TComboBox Left = 24 Top = 184 Width = 146 Height = 21 ItemHeight = 13 TabOrder = 3 end object A_Se: TCheckBox Left = 120 Top = 216 Width = 65 Height = 17 Caption = 'A sè' TabOrder = 6 end end end object QueryCategoria: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select tipo from categoria') Left = 516 Top = 488 end object QueryCFPro: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select cf from fornitore where attivo = 1') Left = 552 Top = 488 end object QueryCFCap: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select cf'

'from di, fornitore' 'where cf = cfcap' 'and attivo = 1' 'and tipo = :tipo') Params.Data ={01000100047469706F0001020030000000} Left = 444 Top = 488 end object QueryLuogo: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select nome, stato from luogo') Left = 584 Top = 488 end object QueryPrincipale: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = (

'exec inserisci_foto :tipo, :nome, :stato, :cfpro,:cfcap, :accet' + 'tato, :data, :url, :didascalia, :a_se') Params.Data = {

01000A00047469706F0001020030000000046E6F6D6500010200300000000573

7461746F000102003000000005636670726F0001020030000000056366636170

00010200300000000961636365747461746F0005020000000000046461746100

0B080000002C845D40CB4200000375726C00010200300000000A646964617363

616C6961000102003000000004615F73650005020000000000} Left = 480 Top = 488 endend

Form Inserisci Notizia

object FrmInserisciNotizia: TFrmInserisciNotizia Left = 284 Top = 4 BorderStyle = bsSingle Caption = 'Immissione di una nuova notiziad'#39'agenzia' ClientHeight = 542 ClientWidth = 639 ParentFont = True Position = poScreenCenter OnActivate = FormCreate OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13

Page 92: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 92 -

object Panel2: TPanel Left = 0 Top = 0 Width = 639 Height = 542 Align = alClient BevelInner = bvLowered BorderWidth = 4 Caption = 'Panel2' TabOrder = 0 object Genere: TScrollBox Left = 6 Top = 6 Width = 627 Height = 530 HorzScrollBar.Margin = 6 HorzScrollBar.Range = 348 VertScrollBar.Margin = 6 VertScrollBar.Range = 160 Align = alClient AutoScroll = False BorderStyle = bsNone Color = 13681328 ParentColor = False TabOrder = 0 object Label2: TLabel Left = 193 Top = 80 Width = 62 Height = 13 Caption = 'CATEGORIA' end object Label5: TLabel Left = 22 Top = 124 Width = 91 Height = 13 Caption = 'CF PROPONENTE' end object Label6: TLabel Left = 193 Top = 124 Width = 112 Height = 13 Caption = 'CF CAPOREDATTORE' end object Label9: TLabel Left = 193 Top = 169 Width = 29 Height = 13 Caption = 'DATA' end object TITOLO: TLabel Left = 24 Top = 240 Width = 39 Height = 13 Caption = 'TITOLO' end object Label7: TLabel Left = 24

Top = 288 Width = 119 Height = 13 Caption = 'TESTO DELLA NOTIZIA' end object Label3: TLabel Left = 24 Top = 169 Width = 38 Height = 13 Caption = 'LUOGO' end object Label1: TLabel Left = 48 Top = 24 Width = 267 Height = 24 Caption = 'Agenzia Giornalistica - Gruppo 5 ' Font.Charset = ANSI_CHARSET Font.Color = clTeal Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label4: TLabel Left = 240 Top = 48 Width = 88 Height = 23 Caption = 'NOTIZIA' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Perpetua Titling MT' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label8: TLabel Left = 32 Top = 48 Width = 205 Height = 24 Caption = 'Modulo di immissione per una ' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsItalic] ParentFont = False end object Image1: TImage Left = 360 Top = 24 Width = 249 Height = 201 Picture.Data = {codice dell’immagine} end object Accettato: TCheckBox Left = 24 Top = 216 Width = 97

Page 93: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 93 -

Height = 17 Caption = 'Accettato' TabOrder = 5 end object Correzioni: TCheckBox Left = 120 Top = 216 Width = 97 Height = 17 Caption = 'Correzioni' TabOrder = 6 end object Data: TDateTimePicker Left = 193 Top = 184 Width = 146 Height = 21 CalAlignment = dtaLeft Date = 36697.404484838 Time = 36697.404484838 DateFormat = dfShort DateMode = dmComboBox Kind = dtkDate ParseInput = False TabOrder = 4 end object EditTitolo: TEdit Left = 24 Top = 256 Width = 585 Height = 21 TabOrder = 7 end object BitBtn1: TBitBtn Left = 215 Top = 488 Width = 75 Height = 25 TabOrder = 9 OnClick = BitBtn1Click Kind = bkOK end object BitBtn2: TBitBtn Left = 327 Top = 488 Width = 75 Height = 25 TabOrder = 10 OnClick = BitBtn2Click Kind = bkCancel end object MemoTesto: TMemo Left = 24 Top = 304 Width = 585 Height = 169 ScrollBars = ssBoth TabOrder = 8 end object ComboBoxCategoria: TComboBox Left = 193 Top = 93

Width = 146 Height = 21 ItemHeight = 13 TabOrder = 0 OnChange = ComboBoxCategoriaChange end object ComboBoxCFPro: TComboBox Left = 24 Top = 138 Width = 146 Height = 21 ItemHeight = 13 TabOrder = 1 end object ComboBoxCFCap: TComboBox Left = 193 Top = 138 Width = 146 Height = 21 ItemHeight = 13 TabOrder = 2 end object ComboBoxLuogo: TComboBox Left = 24 Top = 184 Width = 146 Height = 21 ItemHeight = 13 TabOrder = 3 end end end object QueryCategoria: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select tipo from categoria') Left = 84 Top = 496 end object QueryCFPro: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select cf from fornitore where attivo = 1') Left = 120 Top = 496 end object QueryCFCap: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select cf' 'from di, fornitore' 'where cf = cfcap' 'and attivo = 1' 'and tipo = :tipo')

Params.Data ={01000100047469706F0001020030000000} Left = 12 Top = 496 end object QueryLuogo: TQuery DatabaseName = 'Agenzia_Giornalistica'

Page 94: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 94 -

SQL.Strings = ( 'select nome, stato from luogo') Left = 152 Top = 496 end object QueryPrincipale: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = (

'exec inserisci_notizia :tipo, :nome, :stato, :cfpro,:cfcap, :ac' + 'cettato, :correzioni, :data, :testo, :titolo') Params.Data = {

01000A00047469706F0001020030000000046E6F6D6500010200300000000573

7461746F000102003000000005636670726F0001020030000000056366636170

00010200300000000961636365747461746F00050200000000000A636F727265

7A696F6E6900050200000000000464617461000B080000002C845D40CB420000

05746573746F000F0100300000067469746F6C6F0001020030000000} Left = 48 Top = 496 endend

Form Parole Chiave

object FrmParoleChiave: TFrmParoleChiave Left = 325 Top = 34 Width = 681 Height = 541 Caption = 'Ricerca per parole chiave' Color = 13681328 Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 272 Top = 96 Width = 244 Height = 13 Caption = 'Ricerca i titoli degli articoli inerenti allaparola chiave' end object Image1: TImage Left = 16 Top = 56

Width = 129 Height = 385 Picture.Data = {codice dell’immagine} end object Label4: TLabel Left = 264 Top = 24 Width = 267 Height = 24 Caption = 'Agenzia Giornalistica - Gruppo 5 ' Font.Charset = ANSI_CHARSET Font.Color = clTeal Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label5: TLabel Left = 264 Top = 48 Width = 86 Height = 24 Caption = 'Ricerca per ' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsItalic] ParentFont = False end object Label6: TLabel Left = 352 Top = 48 Width = 175 Height = 23 Caption = 'PAROLE CHIAVE ' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Perpetua Titling MT' Font.Style = [fsBold, fsItalic] ParentFont = False end object DBGridParoleChiave: TDBGrid Left = 168 Top = 168 Width = 465 Height = 273 DataSource = DataSource1 TabOrder = 3 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'MS Sans Serif' TitleFont.Style = [] Visible = False end object ParolaChiave: TEdit Left = 296 Top = 120 Width = 201 Height = 21

Page 95: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 95 -

TabOrder = 0 end object BitBtn1: TBitBtn Left = 320 Top = 464 Width = 75 Height = 25 TabOrder = 1 OnClick = BitBtn1Click Kind = bkOK end object BitBtn2: TBitBtn Left = 424 Top = 464 Width = 75 Height = 25 TabOrder = 2 OnClick = BitBtn2Click Kind = bkCancel end object Query1: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'exec parole_chiave :parola') Params.Data ={01000100067061726F6C610001020030000000} Left = 8 Top = 24 end object DataSource1: TDataSource DataSet = Query1 Left = 40 Top = 24 endend

Form Statistiche

object FrmStatistiche: TFrmStatistiche Left = 294 Top = 25 Width = 571 Height = 533 Caption = 'Statistiche' Color = 13681328 Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 24 Top = 96 Width = 137 Height = 13 Caption = 'Esegui una statistica sui primi' end object Label2: TLabel

Left = 208 Top = 96 Width = 139 Height = 13 Caption = 'rappresentanti della categoria' end object Label3: TLabel Left = 24 Top = 144 Width = 119 Height = 13 Caption = 'relativamente al materiale' end object Image1: TImage Left = 360 Top = 128 Width = 177 Height = 145 Picture.Data = {codice dell’immagine} end object Label4: TLabel Left = 144 Top = 24 Width = 267 Height = 24 Caption = 'Agenzia Giornalistica - Gruppo 5 ' Font.Charset = ANSI_CHARSET Font.Color = clTeal Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label5: TLabel Left = 136 Top = 48 Width = 129 Height = 24 Caption = 'Visualizzazione di' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsItalic] ParentFont = False end object Label6: TLabel Left = 272 Top = 48 Width = 141 Height = 23 Caption = 'Statistiche ' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Perpetua Titling MT' Font.Style = [fsBold, fsItalic] ParentFont = False end object DBGrid1: TDBGrid Left = 24 Top = 296

Page 96: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 96 -

Width = 513 Height = 193 DataSource = DataSource1 TabOrder = 6 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'MS Sans Serif' TitleFont.Style = [] Visible = False end object Edit1: TEdit Left = 168 Top = 88 Width = 33 Height = 21 TabOrder = 0 Text = '10' end object BitBtn1: TBitBtn Left = 96 Top = 248 Width = 75 Height = 25 TabOrder = 4 OnClick = BitBtn1Click Kind = bkOK end object Tipo: TComboBox Left = 360 Top = 88 Width = 177 Height = 21 ItemHeight = 13 Items.Strings = ( 'Giornalisti' 'Fotografi' 'Inviati') TabOrder = 1 Text = 'Giornalisti' end object RadioGroup1: TRadioGroup Left = 160 Top = 136 Width = 97 Height = 89 TabOrder = 7 end object Proposto: TRadioButton Left = 176 Top = 160 Width = 73 Height = 17 Caption = 'Proposto' Checked = True TabOrder = 2 TabStop = True end object Accettato: TRadioButton Left = 176 Top = 192 Width = 73

Height = 17 Caption = 'Accettato' TabOrder = 3 end object BitBtn2: TBitBtn Left = 216 Top = 248 Width = 75 Height = 25 TabOrder = 5 OnClick = BitBtn2Click Kind = bkCancel end object Query1: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'exec statistiche :numero, :tipofornitore, :tipodato') Params.Data = {

01000300066E756D65726F000304000000000000000D7469706F666F726E6974

6F72650001020030000000087469706F6461746F0001020030000000} Left = 24 Top = 200 end object DataSource1: TDataSource DataSet = Query1 Left = 24 Top = 240 endend

Form Ultime10Notizie

object FrmUltime10Notizie: TFrmUltime10Notizie Left = 248 Top = 40 Width = 727 Height = 526 Caption = 'Ultime 10 notizie d'#39'agenzia' Color = 13681328 Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OnActivate = FormCreate OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Image1: TImage Left = 32 Top = 32 Width = 241 Height = 145 Picture.Data = {codice dell’immagine } end object Label2: TLabel

Page 97: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 97 -

Left = 336 Top = 32 Width = 267 Height = 24 Caption = 'Agenzia Giornalistica - Gruppo 5 ' Font.Charset = ANSI_CHARSET Font.Color = clTeal Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label3: TLabel Left = 464 Top = 56 Width = 96 Height = 23 Caption = 'NOTIZIE ' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Perpetua Titling MT' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label4: TLabel Left = 304 Top = 56 Width = 158 Height = 24 Caption = 'Ricerca delle ultime 10 ' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsItalic] ParentFont = False end object Label5: TLabel Left = 560 Top = 56 Width = 65 Height = 24 Caption = 'd'#39'agenzia' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsItalic] ParentFont = False end object DBCtrlGrid1: TDBCtrlGrid Left = 32 Top = 192 Width = 673 Height = 288 ColCount = 1 DataSource = DataSource1 PanelHeight = 144 PanelWidth = 657 ParentShowHint = False TabOrder = 1

RowCount = 2 ShowHint = False object DBText1: TDBText Left = 120 Top = 8 Width = 49 Height = 17 DataField = 'CODN' DataSource = DataSource1 end object DBText2: TDBText Left = 80 Top = 24 Width = 569 Height = 17 DataField = 'TITOLO' DataSource = DataSource1 end object DBText3: TDBText Left = 8 Top = 8 Width = 65 Height = 17 DataField = 'data' DataSource = DataSource1 end object Label1: TLabel Left = 80 Top = 8 Width = 33 Height = 13 Caption = 'Codice' end object DBMemo1: TDBMemo Left = 16 Top = 40 Width = 633 Height = 97 DataField = 'TESTO' DataSource = DataSource1 TabOrder = 0 end end object BitBtn1: TBitBtn Left = 432 Top = 152 Width = 75 Height = 25 TabOrder = 0 OnClick = BitBtn1Click Kind = bkOK end object DataSource1: TDataSource AutoEdit = False DataSet = Query1 Top = 424 end object Query1: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'exec prime_10_notizie') Top = 464

Page 98: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 98 -

endend

Form Ultimi100Servizi

object FrmUltimi100Servizi: TFrmUltimi100Servizi Left = 201 Top = 46 Width = 755 Height = 480 Caption = 'Ricerca degli ultimi 100 servizi per categoria, areageografica ' + 'o sede' Color = 13681328 Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OnActivate = FormCreate OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 16 Top = 96 Width = 33 Height = 13 Caption = 'Codice' Visible = False end object Label2: TLabel Left = 80 Top = 96 Width = 23 Height = 13 Caption = 'Data' Visible = False end object Label3: TLabel Left = 144 Top = 96 Width = 26 Height = 13 Caption = 'Titolo' Visible = False end object Label4: TLabel Left = 328 Top = 24 Width = 239 Height = 13 Caption = 'Ricerca i titoli degli ultimi 100 servizidella categoria' end object Label5: TLabel Left = 328 Top = 48 Width = 93

Height = 13 Caption = 'relativi ad una certa' end object Image1: TImage Left = 504 Top = 128 Width = 209 Height = 273 Picture.Data = {codice dell’immagine} end object Label6: TLabel Left = 8 Top = 8 Width = 267 Height = 24 Caption = 'Agenzia Giornalistica - Gruppo 5 ' Font.Charset = ANSI_CHARSET Font.Color = clTeal Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label7: TLabel Left = 160 Top = 32 Width = 62 Height = 23 Caption = 'AREA ' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Perpetua Titling MT' Font.Style = [fsBold, fsItalic] ParentFont = False end object Label8: TLabel Left = 8 Top = 32 Width = 146 Height = 24 Caption = 'Ricerca di servizi per' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsItalic] ParentFont = False end object Label9: TLabel Left = 224 Top = 32 Width = 7 Height = 24 Caption = 'o' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Dauphin' Font.Style = [fsItalic] ParentFont = False end

Page 99: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 99 -

object Label10: TLabel Left = 240 Top = 32 Width = 54 Height = 23 Caption = 'sede ' Font.Charset = ANSI_CHARSET Font.Color = clWindowText Font.Height = -19 Font.Name = 'Perpetua Titling MT' Font.Style = [fsBold, fsItalic] ParentFont = False end object BitBtn1: TBitBtn Left = 256 Top = 416 Width = 75 Height = 25 TabOrder = 5 OnClick = BitBtn1Click Kind = bkOK end object BitBtn2: TBitBtn Left = 352 Top = 416 Width = 75 Height = 25 TabOrder = 6 OnClick = BitBtn2Click Kind = bkCancel end object DBCtrlGrid1: TDBCtrlGrid Left = 8 Top = 120 Width = 465 Height = 280 ColCount = 1 DataSource = DataSource1 PanelHeight = 35 PanelWidth = 449 TabOrder = 7 RowCount = 8 Visible = False object DBText1: TDBText Left = 8 Top = 8 Width = 65 Height = 17 DataField = 'codn' DataSource = DataSource1 end object DBText2: TDBText Left = 72 Top = 8 Width = 49 Height = 17 DataField = 'data' DataSource = DataSource1 end object DBText3: TDBText Left = 136 Top = 8

Width = 513 Height = 17 DataField = 'titolo' DataSource = DataSource1 end end object RadioGroup1: TRadioGroup Left = 440 Top = 40 Width = 129 Height = 57 TabOrder = 8 end object RadioButton1: TRadioButton Left = 448 Top = 56 Width = 113 Height = 17 Caption = 'Area Geografica' Checked = True TabOrder = 1 TabStop = True OnClick = RadioButton1Click end object RadioButton2: TRadioButton Left = 448 Top = 72 Width = 113 Height = 17 Caption = 'Sede dell'#39'agenzia' TabOrder = 2 OnClick = RadioButton2Click end object CBCategoria: TComboBox Left = 584 Top = 16 Width = 145 Height = 21 ItemHeight = 13 TabOrder = 0 Text = 'CBCategoria' end object CBArea: TComboBox Left = 584 Top = 48 Width = 145 Height = 21 ItemHeight = 13 TabOrder = 3 Text = 'CBArea' end object CBSede: TComboBox Left = 584 Top = 72 Width = 145 Height = 21 ItemHeight = 13 TabOrder = 4 Visible = False end object DataSource1: TDataSource DataSet = Query1

Page 100: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 100 -

Left = 8 Top = 416 end object Query1: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'exec ultimi_100_servizi :sede, :nomeag, :tipo') Params.Data = {

0100030004736564650001020030000000066E6F6D6561670001020030000000 047469706F0001020030000000} Left = 48 Top = 416 end object QueryCategoria: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select * from categoria') Left = 88

Top = 416 end object QueryArea: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select * from area') Left = 120 Top = 416 end object QuerySede: TQuery DatabaseName = 'Agenzia_Giornalistica' SQL.Strings = ( 'select * from sede') Left = 152 Top = 416 endend

Page 101: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 101 -

BIBLIOGRAFIA

Domenico Beneventano, Sonia Bergamaschi, Maurizio Vincini, “Progetto di Basi di DatiRelazionali”, Pitagora Editrice Bologna

Herbert Schildt, “C++”, Ed.Mc Graw Hill

Kent Reisdorph, “Borland C++ Builder 3 Guida Completa”, Ed. Apogeo, Milano

Charlie Clavert, “Borland C++ Builder 3”, collana Unleashed, Ed. Sams, Indianapolis

Richard Waymire, Rick Satwell, “SQL Server 7.0 Guida Completa”, Ed Apogeo, Milano

Page 102: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 102 -

SOMMARIO

PRESENTAZIONE.............................................................................................................................. 1SCHEMA E/R...................................................................................................................................... 6PROGETTO CONCETTUALE........................................................................................................... 7

Cardinalità ........................................................................................................................................ 9PROGETTO LOGICO....................................................................................................................... 13

Eliminazione delle Gerarchie......................................................................................................... 13TRADUZIONE DELLO SCHEMA E/R IN SCHEMA RELAZIONALE....................................... 16DATI DERIVATI .............................................................................................................................. 21

1) Area Geografica nell'entità MATERIALE ................................................................................ 212) Numero-articoli-proposti e Numero-articoli-accettati nell'entità GIORNALISTA................... 223) Numero-foto-proposte e Numero-foto-accettate nell'entità FOTOGRAFO.............................. 234) Numero-dispacci-proposti e Numero-dispacci-accettati nell'entità INVIATO ......................... 24

IMPLEMENTAZIONE DEL DATABASE....................................................................................... 25DESCRIZIONE DELLE STORED PROCEDURE........................................................................... 34

Stored Procedure prime_10_notizie ............................................................................................... 34Stored Procedure ultimi_100_servizi............................................................................................. 34Stored Procedure parole_chiave ..................................................................................................... 35Stored Procedure inserisci_notizia ................................................................................................. 36Stored Procedure statistiche ........................................................................................................... 38Stored Procedure inserisci_articolo................................................................................................ 39Stored Procedure del_articolo ........................................................................................................ 40Stored Procedure inserisci_foto ..................................................................................................... 40Stored Procedure del_foto.............................................................................................................. 41Stored Procedure del_fornitore ...................................................................................................... 41Stored Procedure ins_abbcat .......................................................................................................... 41Stored Procedure del_abbcat.......................................................................................................... 42

DESCRIZIONE DEI TRIGGERS ..................................................................................................... 43Trigger inserisci_abbcat ................................................................................................................. 43Trigger cancella_notizia................................................................................................................. 44Trigger inserisci_cliente................................................................................................................. 44Trigger inserisci_fornitore.............................................................................................................. 44Trigger inserisci_ricevea................................................................................................................ 45Trigger inserisci_riceven................................................................................................................ 46Trigger inserisci_corredato ............................................................................................................ 47Trigger correzioni........................................................................................................................... 48Trigger inserisci_parte.................................................................................................................... 48

SICUREZZA: UTENTI E RUOLI..................................................................................................... 49IMPLEMENTAZIONE DEL FRONT END: MASCHERE.............................................................. 51IMPLEMENTAZIONE DEL FRONT END: C++ Builder............................................................... 51IL BORLAND DATABASE ENGINE.............................................................................................. 52MASCHERE...................................................................................................................................... 53

Form Accesso al database Agenzia Giornalistica .......................................................................... 53Form Accesso per i clienti e Accesso per i fornitori...................................................................... 53Form Ricerca degli ultimi 100 servizi per categoria, area geografica o sede ................................ 54Form Inserimento di una notizia d’agenzia .................................................................................... 55Form Inserimento di un articolo e Inserimento di una fotografia .................................................. 56Form Statistiche.............................................................................................................................. 57Form Ricerca per parole chiave ..................................................................................................... 57

Page 103: Relazione finale 1web.tiscali.it/fraeclaudio/appunti/bd/Relazione.pdf · gestione dell’archivio delle notizie, in modo da permettere la creazione di una centrale informativa che,

Tesina di Basi di Dati AA 1999-2000

Gruppo 5: Govi, Mazzoni - 103 -

Form Ultime 10 notizie d'agenzia .................................................................................................. 58CODICE DEL PROGRAMMA......................................................................................................... 59

File Accesso.cpp............................................................................................................................. 59File Agenzia_Giornalistica.cpp...................................................................................................... 59File Cliente.cpp .............................................................................................................................. 60File Fornitore.cpp........................................................................................................................... 61File Inserisci_articolo.cpp .............................................................................................................. 63File Inserisci_foto.cpp.................................................................................................................... 65File Inserisci_notizia.cpp ............................................................................................................... 67File Parole_chiave.cpp ................................................................................................................... 70File Statistiche.cpp ......................................................................................................................... 70File Ultime_10_notizie.cpp............................................................................................................ 71File Ultimi_100_servizi.cpp........................................................................................................... 72File Accesso.h................................................................................................................................ 74File Cliente.h.................................................................................................................................. 74File Fornitore.h............................................................................................................................... 75File Inserisci_articolo.h.................................................................................................................. 76File Inserisci_foto.h........................................................................................................................ 78File Inserisci_notizia.h................................................................................................................... 79File Parole_chiave.h....................................................................................................................... 80File Statistiche.h............................................................................................................................. 81File Ultime_10_notizie.h................................................................................................................ 82File Ultimi_100_servizi.h............................................................................................................... 83

File dfm (descrizione dei forms) ........................................................................................................ 85Form Accesso................................................................................................................................. 85Form Cliente................................................................................................................................... 85Form Fornitore ............................................................................................................................... 86Form Inserisci Articolo .................................................................................................................. 88Form Inserisci Fotografia............................................................................................................... 90Form Inserisci Notizia.................................................................................................................... 92Form Parole Chiave........................................................................................................................ 95Form Statistiche.............................................................................................................................. 96Form Ultime10Notizie ................................................................................................................... 97Form Ultimi100Servizi................................................................................................................... 99

BIBLIOGRAFIA.............................................................................................................................. 102SOMMARIO.................................................................................................................................... 104