|
PROGETTAZIONE FISICA
La base di dati verrà realizzata e gestita per mezzo del DBMS Microsoft®
Access®. Ci uniformeremo, quindi, alla nomenclatura utilizzata dal DBMS adoperato
e pertanto chiameremo Tabelle le relazioni, Record le occorrenze (tuple) di una relazione e Campi
gli attributi di una relazione; i tipi di dato cui faremo riferimento sono i tipi di dato utilizzati da Microsoft Access.
DOMINÎ DEGLI ATTRIBUTI E VINCOLI DI DOMINIO
Nelle tabelle seguenti vengono indicati, per ogni relazione della base di dati, i dominî degli attributi e, ove presenti,
i vincoli di dominio, ovvero le regole di validità dei valori dei campi di un record, indipendentemente da altri record
della medesima o di altre tabelle e indipendentemente dai valori degli altri campi del medesimo record; in Microsoft Access i
vincoli di dominio vengono definiti imponendo delle condizioni in una apposita casella, etichettata con la dicitura
Valido se, disponibile per ogni campo.
La chiave primaria di ogni tabella è evidenziata dalla sottolineatura dei nomi degli attributi che la costituiscono.
Le conclusioni di seguito riassunte vengono derivate con semplicità dalle informazioni raccolte nella fase di analisi
dei requisiti e dalle valutazioni svolte nelle successive fasi di progettazione; ogni ulteriore analisi che si sia resa
necessaria è anch'essa documentata di seguito. Ad alcuni attributi è stato assegnato un nome diverso, allo scopo di
renderne più immediatamente comprensibile il significato.
Tabella ARTISTA |
Campo |
Tipo di Dati |
Dimensione |
Null |
Unico |
Default |
Vincoli di Dominio |
IDartista |
Contatore |
Intero lungo |
No |
Sì |
- |
- |
NomeArtista |
Testo |
100 |
No |
Sì |
- |
- |
DescrizioneArtista |
Memo |
- |
No |
No |
- |
- |
NazioneArtista |
Testo |
60 |
Sì |
No |
NULL |
- |
FotoArtista |
Testo |
100 |
Sì |
Sì |
- |
- |
NOTE
Occorre spiegare la scelta fatta per il campo Foto; ciò che deve essere
memorizzato è una foto dell'artista; tale foto non verrà memorizzata nel database ma in un
file a parte il quale, mentre nella base di dati si memorizzerà la stringa indicante percorso e nome
del file. Il campo deve avere valori univoci (nel senso che ogni record della tabella deve presentare
valori diversi per questo campo) in quanto non possono esistere due file con il medesimo nome. Tale scelta
è fatta anche in relazione al campo Foto della tabella
DISCO.
|
Tabella BRANO |
Campo |
Tipo di Dati |
Dimensione |
Null |
Unico |
Default |
Vincoli di Dominio |
CodiceDisco |
Numerico |
Intero lungo |
No |
No |
- |
- |
NumeroBrano |
Numerico |
Byte (Fisso; 0 pos. decimali)
|
No |
No |
- |
>0
|
TitoloBrano |
Testo |
100 |
No |
No |
- |
- |
Tabella CARATTERIZZAZIONE |
Campo |
Tipo di Dati |
Dimensione |
Null |
Unico |
Default |
Vincoli di Dominio |
IDartista |
Numerico |
Intero lungo |
No |
No |
- |
- |
IDgenere |
Numerico |
Intero lungo |
No |
No |
- |
- |
Tabella DISCO |
Campo |
Tipo di Dati |
Dimensione |
Null |
Unico |
Default |
Vincoli di Dominio |
Codice |
Contatore |
Intero lungo |
No |
Sì |
- |
- |
TitoloDisco |
Testo |
100 |
No |
No |
- |
- |
AnnoDisco |
Numerico |
Intero (Fisso; 0 pos. decimali)
|
No |
No |
- |
(>0) AND (<=Year(Now())+1)
|
CasaDiscografica |
Testo |
80 |
No |
No |
nd |
- |
FotoDisco |
Testo |
100 |
Sì |
Sì |
NULL |
- |
VotoMedio |
Numerico |
Precisione Singola (pos. decimali automatiche)
|
No |
No |
0 |
(>=0) AND (<=10) |
NumeroVoti |
Numerico |
Intero lungo (Fisso; 0 pos. decimali)
|
No |
No |
0 |
>=0
|
Valutazione |
Numerico |
Precisione Singola (pos. decimali automatiche)
|
No |
No |
0 |
>=0
|
IDgenere |
Numerico |
Intero lungo |
No |
No |
- |
- |
NOTE
I campi NumeroVoti e VotoMedio erano
stati indicati come opzionali, mentre qui sono indicati come obbligatori, e ad essi viene
assegnato un valore di default pari a 0. Tale scelta è stata fatta sulla base dei
seguenti ragionamenti. Innanzitutto, osserviamo che, per calcolare il nuovo voto medio quando
viene attribuito un nuovo voto al disco da parte di un visitatore, si può far ricorso
alla seguente relazione:
µ
N+1 = ( N*µN + vN+1 ) / ( N+1 )
dove µN è il voto medio dopo N votazioni,
vN+1 è l'(N+1)-esimo voto e
µN+1 è il nuovo voto medio, dopo N+1 votazioni.
Tale formula non è applicabile per N=0 (cioè, quando il disco non è stato votato
precedentemente) se non sono definiti i valori di µN e di N,
ovvero i valori dei campi VotoMedio e NumeroVoti,
mentre nel caso in cui essi siano definiti e pari a 0, come del resto è ovvio, la formula è
valida e restituisce correttamente il valore del voto medio aggiornato (che risulta pari a
v1, come deve essere).
Per quanto riguarda il campo Anno, abbiamo imposto la condizione che il suo
valore non possa essere superiore all'anno successivo di quello corrente; la motivazione di tale scelta
è piuttosto ovvia: non ha senso considerare un disco il cui anno di uscita sia collocato nel futuro.
La scelta di considerare l'anno successivo al corrente come valido è motivata dal fatto che talora
accade di considerare dischi di prossima uscita e, se questo avviene alla fine di un anno (ad es. a dicembre)
si può verificare la possibilità di dover considerare un disco in uscita nell'anno successivo
(ad es. a febbraio).
|
Tabella GENERE |
Campo |
Tipo di Dati |
Dimensione |
Null |
Unico |
Default |
Vincoli di Dominio |
IDgenere |
Contatore |
Intero lungo |
No |
Sì |
- |
- |
NomeGenere |
Testo |
60 |
No |
Sì |
- |
- |
Tabella INTERVISTA |
Campo |
Tipo di Dati |
Dimensione |
Null |
Unico |
Default |
Vincoli di Dominio |
IDartista |
Numerico |
Intero lungo |
No |
No |
- |
- |
IDredattore |
Testo |
10 |
No |
No |
- |
- |
DataIntervista
|
Data/Ora |
Data generica
|
No |
No |
Now()
|
<=Now()
|
TitoloIntervista |
Testo |
80 |
No |
No |
- |
- |
TestoIntervista |
Memo |
- |
No |
No |
- |
- |
NOTE
Il valore del campo Data deve rappresentare una data non
successiva a quella corrente: questo perché non ha senso considerare interviste
scritte nel futuro. Analoga valutazione viene fatta per il campo Data
della tabella RECENSIONE.
|
Tabella REALIZZAZIONE |
Campo |
Tipo di Dati |
Dimensione |
Null |
Unico |
Default |
Vincoli di Dominio |
IDartista |
Numerico |
Intero lungo |
No |
No |
- |
- |
CodiceDisco |
Numerico |
Intero lungo |
No |
No |
- |
- |
Tabella RECENSIONE |
Campo |
Tipo di Dati |
Dimensione |
Null |
Unico |
Default |
Vincoli di Dominio |
CodiceDisco |
Numerico |
Intero lungo |
No |
No |
- |
- |
IDredattore |
Testo |
10 |
No |
No |
- |
- |
DataRecensione |
Data/Ora |
Data generica
|
No |
No |
Now()
|
<=Now()
|
TitoloRecensione |
Testo |
80 |
No |
No |
- |
- |
TestoRecensione |
Memo |
- |
No |
No |
- |
- |
VotoRecensione |
Numerico |
Byte (Fisso; 0 pos. decimali)
|
No |
No |
- |
(>=0) AND (<=10)
|
Tabella REDATTORE |
Campo |
Tipo di Dati |
Dimensione |
Null |
Unico |
Default |
Vincoli di Dominio |
UserID |
Testo |
10 |
No |
Sì |
- |
- |
Password |
Testo |
10 |
No |
No |
- |
- |
CognomeRedattore |
Testo |
80 |
No |
No |
- |
- |
NomeRedattore |
Testo |
80 |
No |
No |
- |
- |
EmailRedattore |
Sì/No |
80 |
Sì |
No |
NULL |
- |
Tabella SITO |
Campo |
Tipo di Dati |
Dimensione |
Null |
Unico |
Default |
Vincoli di Dominio |
IDartista |
Numerico |
Intero lungo |
No |
No |
- |
- |
Url |
Testo |
150 |
No |
No |
- |
- |
VINCOLI
VINCOLI DI TUPLA
I vincoli di tupla sono delle regole che il valore di un campo deve rispettare in relazione ai valori assunti da altri
campi del medesimo record (tupla). L'unico vincolo di tupla è quello espresso dalla RD01 (vedi
Progettazione Logica), per la quale deve sussistere il legame Valutazione=VotoMedio*NumeroVoti
per i campi della tabella DISCO. Tale vincolo può essere imposto avvalendosi della casella
Valido se disponibile nella finestra Proprietà Tabella, nella quale si possono specificare le condizioni
che devono essere verificate per ogni record della tabella.
ALTRI VINCOLI INTRARELAZIONALI
I vincoli intrarelazionali rappresentano condizioni che devono essere verificate per i valori dei campi di un record in relazione
ai valori assunti su altri record della medesima tabella. I vincoli di tupla sopra analizzati sono un particolare tipo di vincolo
intrarelazionale, così come lo sono vincoli di chiave primaria già evidenziati sopra. Una particolare categoria di
vincoli intrarelazionali è rappresentata dal vincolo unique, il quale impone che, dato un insieme di campi di una
tabella, ogni combinazione di valori su essi può essere assunta su un solo record della tabella, quindi non possono esservi
diversi record della tabella che presentano i medesimi valori sui campi dati. L'unica differenza dal vincolo di chiave primaria,
in effetti, è che i campi sottoposti al vincolo unique possono assumere valore NULL; inoltre, mentre per ogni tabella si
può definire una sola chiave primaria, è possibile definire un qualunque numero di vincoli unique. Sulla base di
quanto asserito nelle regole RV06, RV07 ed RV08 (vedi
Progettazione Logica) si evince che i campi Nome di GENERE,
NomeArtista di ARTISTA e
(CognomeRedattore,NomeRedattore) di
REDATTORE devono essere sottoposti a vincolo di unicità; in Access tale vincolo può
essere imposto creando un indice univoco sui campi interessati, il che può essere fatto scegliendo la voce Sì
(Duplicati non ammessi) nella casella combinata etichettata con Indicizzato, disponibile per ogni campo, oppure
accedendo alla finestra di dialogo Indici e indicando quali debbano essere gli indici univoci della tabella. Purtroppo,
Access non consente la creazione di altri tipi di regole di vincolo interrelazionali: le regole di vincolo (dette Regole di
convalida in Access) che si possono definire sono solo i vincoli di chiave, i vincoli unique, i vincoli di dominio e i vincoli
di tupla; pertanto occorre affidare al codice che scriveremo per l'accesso alla base di dati il compito di assicurare che venga
rispettata la regola RD02 sulla consecutività dei valori di NumeroBrano nei
record che presentano il medesimo valore di CodiceDisco. Si rimanda alla sezione Implementazione
per ulteriori dettagli.
VINCOLI DI INTEGRITÀ REFERENZIALE
Un vincolo di integrità referenziale crea un legame fra due tabelle, dette tabella interna e tabella esterna,
ponendo in corrispondenza determinati campi di esse (N campi della tabella interna posti in corrispondenza con N campi della tabella
esterna) e imponendo che, per ogni record della tabella interna, i valori assunti su tali campi siano assunti dai corrispondenti
campi per un record della tabella esterna. È necessario che sui campi della tabella esterna coinvolti nel vincolo di
integrità referenziale sia imposto anche un vincolo di tipo unique; tipicamente, i campi della tabella esterna che si
considerano costituiscono la chiave primaria della stessa per cui la condizione di unicità è implicitamente verificata.
In Microsoft Access è possibile realizzare tali vincoli creando quelle che vengono chiamate relazioni tra tabelle;
quando si definisce una relazione, occorre specificare le due tabelle coinvolte, i campi posti in relazione, se debba essere imposta
l'applicazione delle regole di integrità referenziale e, in tal caso, come vanno gestiti l'aggiornamento e la cancellazione
di record; in base alle caratteristiche delle due tabelle indicate, Access stabilisce quale sia la tabella interna e quale quella
esterna, nonché il tipo di relazione (uno-a-molti, uno-a-uno); osserviamo che la tabella esterna è detta tabella
primaria, mentre la tabella interna è detta tabella correlata. È importante spendere qualche parola
circa l'aggiornamento e cancellazione dei record. Innanzitutto, l'applicazione dell'integrità referenziale permette di
effettuare il controllo sui valori dei campi correlati, quindi la attiveremo sempre per ogni relazione; riguardo l'aggiornamento e
cancellazione a catena, vi sono due possibilità: abilitare l'aggiornamento (cancellazione) a catena, nel qual caso ogni
variazione dei campi correlati apportata nella tabella primaria si ripercuote sulla tabella correlata, nella (dalla) quale verranno
aggiornati i valori dei campi corrispondenti (verrammo eliminati i record corrispondenti), oppure disabilitare l'aggiornamento
(cancellazione) dei record, nel qual caso viene rigettato ogni tentativo di aggiornare nella tabella primaria i campi posti in
relazione (di eliminare un record dalla tabella primaria) se esistono dei record nella tabella correlata che siano collegati al
record che si vuole aggiornare (cancellare).
Tutto ciò detto, vediamo quali relazioni occorre definire per la base di dati in esame, che vengono riepilogate nella
seguente tabella.
Tabella |
|
Campi Correlati |
|
Primaria (Esterna) |
Correlata (Interna) |
Cancellazione a cascata |
Primaria |
Correlata |
Tipo
Relazione |
ARTISTA |
SITO |
Sì |
IDartista |
IDartista |
1-∞ |
ARTISTA |
INTERVISTA |
Sì |
IDartista |
IDartista |
1-∞ |
REDATTORE |
INTERVISTA |
Sì |
UserID |
IDredattore |
1-∞ |
ARTISTA |
CARATTERIZZAZIONE |
No |
IDartista |
IDartista |
1-∞ |
GENERE |
CARATTERIZZAZIONE |
No |
IDgenere |
IDgenere |
1-∞ |
GENERE |
DISCO |
No |
IDgenere |
IDgenere |
1-∞ |
ARTISTA |
REALIZZAZIONE |
No |
IDartista |
IDartista |
1-∞ |
DISCO |
REALIZZAZIONE |
Sì |
Codice |
CodiceDisco |
1-∞ |
DISCO |
BRANO |
Sì |
Codice |
CodiceDisco |
1-∞ |
REDATTORE |
RECENSIONE |
Sì |
UserID |
IDredattore |
1-∞ |
DISCO |
RECENSIONE |
Sì |
Codice |
CodiceDisco |
1-1 |
È opportuno motivare alcune delle scelte fatte.
Rendere impossibile la cancellazione di un artista se vi sono record nella tabella REALIZZAZIONE
correlati al record che si intende eliminare è necessario al fine di preservare la regola che un disco sia realizzato da
almeno un artista; se si permettesse la cancellazione di un artista che ha collaborato alla realizzazione di un disco si
correrebbe il rischio, a seguito di successive cancellazioni, di avere dischi che non risultano realizzati da alcun artista,
il che violerebbe la condizione che un disco sia realizzato da almeno un artista; di fatto, quindi, per poter cancellare un
artista è necessario aver cancellato tutti i dischi realizzati dall'artista e, di conseguenza, tutti i corrispondenti
record della tabella REALIZZAZIONE.
Si è scelto anche di imporre che non si possa cancellare un genere se esistono dischi classificati in base a quel genere;
in effetti si potrebbe consentire la cancellazione a cascata, ma di fatto è assai improbabile che si voglia cancellare un
disco andando a cancellare il genere corrispondente, mentre assai più probabile è che si commetta un errore nel
cercare di cancellare un genere che è legato ad un disco, e quindi la scelta fatta vuole prevenire un simile errore; di
fatto, quindi, sarà possibile eliminare un genere solo se non vi sono dischi in base ad esso classificati.
Più delicato è l'esame delle relazioni che coinvolgono la tabella
CARATTERIZZAZIONE. Ricordiamo, infatti, che esiste una regola di derivazione (vedi
RD02 in Progettazione Logica) che impone un vincolo fra le istanze di
CARATTERIZZAZIONE, DISCO,
ARTISTA e GENERE, in quanto un artista è
caratterizzato da un genere se e solo se ha realizzato dischi classificati in base a quel genere. Come questo vincolo debba
essere rappresentato sarà discusso fra breve nel paragrafo successivo, per ora ci limitiamo a dire che inibendo la
cancellazione a catena per le relazioni fra ARTISTA e
CARATTERIZZAZIONE e fra GENERE e
CARATTERIZZAZIONE rafforziamo il controllo riguardo il vincolo indicato. Infatti, se non si
consente la cancellazione di un artista se sono ancora presenti dischi da esso realizzati, a maggior ragione non si può
consentire la eliminazione a catena in CARATTERIZZAZIONE, perché altrimenti si
rischierebbe di giungere alla situazione che un artista ha realizzato dischi di un determinato genere ma non risulta
caratterizzato da quel genere, il che porterebbe ad ottenere una base di dati inconsistente; analogamente, se non si consente
che venga eliminato un genere se esistono dei dischi in base ad esso classificati, allora non si può consentire neanche
l'eliminazione a catena da CARATTERIZZAZIONE, altrimenti si rischierebbe di giungere in una
situazione in cui un artista risulta caratterizzato da un genere benché non abbia realizzato alcun disco di quel genere,
il che rappresenterebbe una inconsistenza nella base dei dati.
ALTRI VINCOLI INTERRELAZIONALI
La regola RD02 (vedi Progettazione Logica) impone un vincolo interrelazionale, ovverosia un vincolo
che può essere verificato confrontando record di tabelle diverse. La regola indicata impone, in particolare, che vi sia
un legame fra i record delle tabelle ARTISTA, REALIZZAZIONE,
DISCO, GENERE e
CARATTERIZZAZIONE tale da assicurare che venga rispettato il concetto che un artista è
caratterizzato da un genere se e solo se ha realizzato dischi classificati in base a quel genere. Come detto, non è
possibile in Access specificare una regola di questo tipo, per cui assicureremo il rispetto del vincolo scrivendo opportunamente
il codice di modifica della base di dati. In particolare, considerato che le operazioni di modifica della base di dati che
interessano dati sensibili alla regola in esame devono coinvolgere più di una tabella (ad es., se si inserisce un nuovo
disco occorrerà inserire anche nuovi record in CARATTERIZZAZIONE per assicurarsi di
conservare la consistenza dei dati), ci affideremo al meccanismo delle transazioni per assicurarci che la base di dati rimanga
in uno stato consistente. In particolare, occorrerà assicurare che le operazioni di modifica alla base di dati avvengano
secondo le seguenti modalità:
-
Se si elimina un record da DISCO, automaticamente vengono cancellati tutti i record
da REALIZZAZIONE ad esso correlati, ma occorre verificare anche i record di
CARATTERIZZAZIONE; se, infatti, a seguito della cancellazione da
REALIZZAZIONE si verifica che un artista non è più caratterizzato da un
genere (perché non vi sono più dischi da esso realizzati classificati in base a quel genere) allora il
corrispondente record di CARATTERIZZAZIONE deve essere eliminato.
-
Se si inserisce un record in DISCO, e di conseguenza si inseriscono i corrispondenti
record in REALIZZAZIONE, occorre verificare se è necessario inserire nuovi
record in CARATTERIZZAZIONE; infatti, se il genere del disco appena inserito non era
già precedentemente caratterizzante per uno degli artisti che hanno realizzato il disco, allora occorrerà
inserire un nuovo record in CARATTERIZZAZIONE.
-
Se si modifica un disco, associando ad esso un genere diverso da quello che aveva precedentemente, occorre verificare se
è necessario modificare anche la tabella CARATTERIZZAZIONE; se, infatti, per un
artista che ha realizzato il disco in questione lo stesso disco era l'unico classificato in base al vecchio genere,
allora occorrerà eliminare il corrispondente record da CARATTERIZZAZIONE; se,
poi, il nuovo genere non era già precedentemente caratterizzante per uno degli artisti che hanno realizzato il
disco, allora occorrerà inserire un nuovo record in CARATTERIZZAZIONE.
Si rimanda alla sezione Implementazione per i dettagli sui metodi di realizzazione delle modalità operative
descritte.
INDICI
Gli indici sono strutture ausiliarie che vengono associati a una tabella e definiti su un campo (o insieme di campi) di questa;
scopo fondamentale degli indici è quello di velocizzare l'accesso alla tabella quando l'operazione di selezione sulla
tabella sia fatta in base al campo (o insieme di campi) indicizzati, e analogamente per le operazioni di join. È
conveniente, quindi, definire un indice su un campo rispetto al quale vengono frequentemente effettuate operazioni di selezione
e/o join; è bene tenere presente che, per contro, gli indici occupano memoria e rallentano le operazioni di aggiornamento,
in quanto richiedono che, oltre alla tabella stessa, venga aggiornato anche l'indice.
In Microsoft Access è possibile definire indici per ogni tabella utilizzando l'apposita finestra di dialogo, dove
è possibile dare un nome all'indice, specificare il campo (o i campi) su cui l'indice è definito, specificare il
tipo di ordinamento (crescente o decrescente) da mantenere per ogni campo (gli indici sono sempre strutture ordinate) e,
infine, stabilire se l'indice è primario, cioè se i campi coinvolti costituiscono la chiave primaria della
tabella (ve ne può essere uno solo per tabella, ovviamente; si tratta di un modo alternativo per definire la chiave
primaria di una tabella), se è univoco, ovvero se sui campi interessati vi è un vincolo di tipo unique, e se i
valori NULL debbano essere o meno esclusi dall'indice. Un indice primario viene comunque definito automaticamente quando si
specifica la chiave primaria di una tabella. Inoltre, come abbiamo poc'anzi visto, l'unico modo per imporre vincoli di
unicità sui campi è quello di definire un indice univoco su essi. Vediamo, ora, quali altri indici è
opportuno definire per la nostra base di dati.
Dai requisiti sulle operazioni (vedi Analisi dei Requisiti) possiamo evincere che i campi più frequentemente
coinvolti in operazioni di selezione e join sono quelli riportati nella seguente tabella; su di essi definiremo un indice le
cui caratteristiche sono anch'esse riportate in tabella. La proprietà Ignora Null non è stata riportata
in quanto ininfluente: vedremo che tutti gli indici sono definiti su campi che non possono assumere valori NULL, per cui non
è necessario chiedersi se i valori NULL debbano o meno essere esclusi dall'indice. Per semplicità, e anche allo
scopo di fornire una visione immediata, nella tabella sono riportati tutti gli indici che abbiamo deciso di definire, compresi
quelli primari e quelli necessari per realizzare un vincolo di unicità, già discussi in precedenza.
Tabella |
Campi |
Ordinamento |
Primario |
Unico |
ARTISTA |
IDartista NomeArtista |
ASC ASC |
Sì No |
Sì
Sì |
BRANO |
(CodiceDisco,NumeroBrano) CodiceDisco NumeroBrano |
(ASC,ASC) ASC ASC |
Sì No No |
Sì No No |
CARATTERIZZAZIONE |
(IDartista,IDgenere) IDartista IDgenere |
(ASC,ASC) ASC ASC |
Sì No No |
Sì No No |
DISCO |
Codice Titolo Valutazione IDgenere |
ASC ASC DESC
ASC |
Sì No No No |
Sì No No No |
GENERE |
IDgenere NomeGenere |
ASC ASC |
Sì No |
Sì
Sì |
INTERVISTA |
(IDredattore,IDartista,Data)
IDredattore IDartista Data |
(ASC,ASC,DESC) ASC ASC DESC |
Sì No No No |
Sì No No No |
REALIZZAZIONE |
(IDartista,CodiceDisco) IDartista CodiceDisco |
(ASC,ASC) ASC ASC |
Sì No No |
Sì No No |
RECENSIONE |
CodiceDisco IDredattore Data |
ASC ASC DESC |
Sì No No |
Sì No No |
REDATTORE |
UserID (Cognome,Nome) |
ASC (ASC,ASC) |
Sì No |
Sì Sì |
SITO |
(IDartista,Url) IDartista |
(ASC,ASC) ASC |
Sì No |
Sì No |
|
|