Anteprima
Vedrai una selezione di 4 pagine su 15
Laboratorio di basi di dati I - la progettazione concettuale Pag. 1 Laboratorio di basi di dati I - la progettazione concettuale Pag. 2
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Laboratorio di basi di dati I - la progettazione concettuale Pag. 6
Anteprima di 4 pagg. su 15.
Scarica il documento per vederlo tutto.
Laboratorio di basi di dati I - la progettazione concettuale Pag. 11
1 su 15
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

CONCETTO COSTRUTTO ACCESSI

Infrastruttura E 1Composizione R 1Villaggio E 1senza ridondanza

CONCETTO COSTRUTTO ACCESSIInfrastruttura E 1Operazione 1con ridondanza

CONCETTO COSTRUTTO ACCESSIUtente E 1Proprietà R 1Villaggio E 1Composizione R 18Infrastruttura E 18Villaggio E 18senza ridondanza

CONCETTO COSTRUTTO ACCESSIUtente E 1Possiede R 1Villaggio E 1Composto R 18Infrastruttura E 18Operazione 8con ridondanza

CONCETTO COSTRUTTO ACCESSIUtente E 1Villaggio E 1senza ridondanza

CONCETTO COSTRUTTO ACCESSIUtente E 1Villaggio E 1Composizione R 39Infrastruttura E 39

Con ridondanza il numero di accessi è molto inferiore. L'occupazione di memoria aggiuntiva dovuta al dato ridondante è minima (4b * 100.000 =~ 400kb), dunque in questo caso conviene mantenere tale dato.

Eliminazione delle generalizzazioni Infrastruttura Nella generalizzazione si possono accorpare le entità figlie nell’entità padre data Magazzino, l’assenza di attributi specifici, eccetto i cui

attributi passano al padre. In questo modo si risparmia spazio dato che in c'è l'attributo che le identifica.

TipoTruppa Stessa cosa è stata effettuata con la generalizzazione, accorpando le entità figlie nel padre che ha già tutti gli attributi necessari a identificarle.

Partizionamenti e Accorpamenti Infrastruttura

Eseguiamo un partizionamento verticale sull'entità Tipo Infrastruttura. Questo tipo di partizionamento opera sugli attributi. Infatti, l'attributo ha valori ben definiti (tra le tipologie indicate nelle specifiche), così come i valori di moltiplicazione per il passaggio di livello che variano in base al tipo. Essi non verranno mai modificati una volta creata una data infrastruttura. Per questo motivo dedichiamo all'insieme di questi valori un'entità specifica, che andrà poi a caratterizzare, tramite una relazione, ogni singola infrastruttura.

presente in un villaggio. In questo modo l'entità perde l'attributo Tipo Funzione TipoInfrastruttura e viene collegata tramite la nuova relazione all'entità Infrastruttura. Questo tipo di Eseguiamo inoltre un partizionamento orizzontale sull'entità Infrastrutturapartizionamento opera sulle occorrenze dell'entità. Notiamo, infatti, che l'entità ,dopo l'eliminazione della generalizzazione, ha acquisito gli attributi che erano presentiMagazzinonell'entità figlia (grano, legno, argilla, ferro). Questi attributi comparirebbero quindi per ogni infrastruttura, non solo per i magazzini. Ciò porterebbe ad avere quattro campi nulli perInfrastrutturatante occorrenze dell'entità . Pertanto, decidiamo di dedicare ai magazziniMagazzino. Infrastrutturaun'entità a parte, chiamata L'entità perde quindi gli attributi grano, legno, ferro e argilla che vanno invece alla

nuova entità, la quale non presenta l'attributo tipoInfrastruttura. Trattandosi (poiché si tratta di soli magazzini) mentre conserva gli altri attributi didi un partizionamento orizzontale dobbiamo duplicare tutte le associazione a cui l'entità Magazzino Villaggio Riserve originaria partecipava: colleghiamo all'entità tramite la relazione eTipoInfrastruttura Requisiti all'entità tramite la relazione.

Dizionario dei dati

ENTITÀ DESCRIZIONE ATTRIBUTI IDENTIFICATORE

Nickname, Nome utente, NicknameGiocatore L'utente del gioco password, sesso, età, data di nascita

Villaggio Villaggio controllato da un Nome, x, y, abitanti Nomegiocatore

Infrastruttura Costruzione appartenente a ID, livello, dataora IDun villaggio

TipoInfrastruttura Tipologie di infrastruttura Nome, g_up, a_up, f_up, Nomel_up

Magazzino Infrastruttura dedicata a ID, livello, dataora, IDcontenere risorse grano, argilla, ferro,legno

TipoTruppa Tipologie di

  • unità militare
  • Tipo, attacco, difesa, Tipog_up, a_up, f_up, l_up
  • Combattimento
  • Attacco militare da un ID, dataora IDvillaggio ad un altro

RELAZIONE

DESCRIZIONE ENTITÀ COINVOLTE ATTRIBUTI

  • Proprietà
  • Associa uno o più villaggi a Giocatore (0,N), un giocatore Villaggio (1,1)
  • Composizione
  • Associa un'infrastruttura a Villaggio (1,N), un villaggio Infrastruttura (1,1)
  • Funzione
  • Associa una tipologia ad Infrastruttura (1,1), un'infrastruttura TipoInfrastruttura (0,N)
  • Attaccante
  • Associa il villaggio che sferra l'attacco al combattimento Combattimento (1,1), corrispondente TipoTruppa (0,N)
  • Difensore
  • Associa il villaggio che subisce l'attacco al combattimento Combattimento (1,1), corrispondente TipoTruppa (0,N)
  • Truppe
  • Associa truppe ad un TipoTruppa (0,N), Quantità villaggio Villaggio (0,N)
  • Riserve
  • Associa un magazzino ad un villaggio Magazzino (1,1)
  • Requisiti
  • Associa un...

magazzino Magazzino (1,1),all'entità creata per TipoInfrastruttura (0,N)conservare le informazioni sulle infrastrutture

Schema logico dei vincoli di integrità referenziale

Schema relazionale

Giocatore {Nickname,Nome,Password,Residenza,Sesso,Data di Nascita}

Villaggio {Nome,Abitanti,X,Y,Proprietario (referenza Giocatore(Nick))}

Combattimento {Id,DataOra,Attaccante, (referenza Villaggio(Nome))Tipo_a, (referenza TipoTruppa(Nome))Impiegate_a,Perse_a,Difensore, (referenza Villaggio(Nome))Tipo_d, (referenza TipoTruppa(Nome))Impiegate_d,Perse_d}

Truppe {Tipo, (referenza TipoTruppa(Nome))Villaggio, (referenza Villaggio(Nome))Quantità}

TipoTruppa {Nome,Attacco,Difesa,G_up,A_up,F_up,L_up}

Magazzino {Id,Livello,DataOra,Argilla,Ferro,Grano,Legno,Villaggio (referenza Villaggio(Nome))}

Infrastruttura {Id,Tipo (referenza TipoInfrastruttura(Nome))Livello,DataOra,Villaggio, (referenza Villaggio(Nome))}

TipoInfrastruttura {Nome,G_up,A_up,F_up,L_up}

CODICE SQL

Per tutte le operazioni con

Il codice SQL è stata utilizzata la piattaforma MySQL. Query per la creazione del database: ```html

CREATE TABLE giocatore(
    nick VARCHAR(30) NOT NULL,
    nome VARCHAR(30) NOT NULL,
    password VARCHAR(20) NOT NULL,
    residenza VARCHAR(255) NOT NULL,
    sesso CHAR(1) NOT NULL check (sesso = 'm' or sesso = 'f'),
    data_nascita DATE NOT NULL,
    PRIMARY KEY (nick)
);

CREATE TABLE villaggio(
    nome VARCHAR(20) NOT NULL,
    abitanti INTEGER DEFAULT 95 NOT NULL,
    x INTEGER(3) NOT NULL check (x >= -375 or x <= 375),
    y INTEGER(3) NOT NULL check (y >= -375 or y <= 375),
    proprietario VARCHAR(30) NOT NULL REFERENCES giocatore(nick) ON UPDATE CASCADE,
    PRIMARY KEY (nome),
    CONSTRAINT posizione unique(x,y)
);

CREATE TABLE combattimento(
    id INTEGER NOT NULL AUTO_INCREMENT,
    dataora TIMESTAMP DEFAULT NOW(),
    attaccante VARCHAR(20) NOT NULL REFERENCES villaggio(nome) ON UPDATE CASCADE,
    tipo_a VARCHAR(255) NOT NULL REFERENCES tipotruppa(nome) ON UPDATE CASCADE,
    impiegate_a INTEGER NOT NULL check (impiegate_a >=

```
0),perse_a INTEGER NOT NULL check (perse_a <= impiegate_a),
difensore VARCHAR(20) NOT NULL REFERENCES villaggio(nome) ON UPDATE CASCADE,
tipo_d VARCHAR(255) NOT NULL REFERENCES tipotruppa(nome) ON UPDATE CASCADE,
impiegate_d INTEGER NOT NULL check (impiegate_d >= 0),
perse_d INTEGER NOT NULL check (perse_d <= impiegate_d),
PRIMARY KEY (id)
);

CREATE TABLE magazzino(
id INTEGER NOT NULL AUTO_INCREMENT,
livello INTEGER NOT NULL DEFAULT 1,
dataora TIMESTAMP DEFAULT NOW(),
argilla INTEGER NOT NULL check (argilla >= 0),
ferro INTEGER NOT NULL check (ferro >= 0),
grano INTEGER NOT NULL check (grano >= 0),
legno INTEGER NOT NULL check (legno >= 0),
villaggio VARCHAR(20) NOT NULL REFERENCES villaggio(nome) ON UPDATE CASCADE,
PRIMARY KEY (id)
);

CREATE TABLE tipotruppa(
nome VARCHAR(255) NOT NULL,
attacco INTEGER NOT NULL,
difesa INTEGER NOT NULL,
a_up INTEGER NOT NULL,
f_up INTEGER NOT NULL,
g_up INTEGER NOT NULL,
l_up INTEGER NOT NULL,
PRIMARY KEY (nome)
);

CREATE TABLE tipoinfrastruttura(
nome

CREATE TABLE tabella1 (
    VARCHAR(255) NOT NULL,
    a_up INTEGER NOT NULL,
    f_up INTEGER NOT NULL,
    g_up INTEGER NOT NULL,
    l_up INTEGER NOT NULL,
    PRIMARY KEY (nome)
);

CREATE TABLE infrastruttura (
    id INTEGER NOT NULL AUTO_INCREMENT,
    livello INTEGER NOT NULL DEFAULT 1,
    dataora TIMESTAMP DEFAULT NOW(),
    villaggio VARCHAR(20) NOT NULL REFERENCES villaggio(nome) ON UPDATE CASCADE,
    tipo VARCHAR(255) NOT NULL REFERENCES tipoinfrastruttura(nome) ON UPDATE CASCADE,
    PRIMARY KEY (id)
);

CREATE TABLE truppe (
    villaggio VARCHAR(20) NOT NULL REFERENCES villaggio(nome) ON UPDATE CASCADE,
    quantità INTEGER NOT NULL check (quantità >= 0),
    tipo VARCHAR(255) REFERENCES truppa(tipo) ON UPDATE CASCADE,
    PRIMARY KEY (villaggio,tipo)
);

Query di inizializzazione

INSERT INTO tipoinfrastruttura (nome,a_up,g_up,f_up,l_up)

VALUES('centro_città',100,200,400,400),('municipio',100,400,200,400),('granaio',200,200,200,400),('magazzino',200,200,200,500),('forno',100,200,400,400),('fabbro',100,200,200,200),('mercato',50,100,100,200),('campo_grano',100,100,100,100),('miniera_argilla',100,0,400,100),('miniera_ferro',100,0,400,200),('foresta',100,50,0,100),('caserma',200,200,400,400),('scuderia',100,50,200,400),('armeria',100,50,300,300),('arena',100,50,300,500),('castello',300,200,500,500); INSERT INTO tipotruppa (nome,attacco,difesa,a_up,f_up,g_up,l_up)VALUES('legionario',10,20,50,50,50,50),('pretoriano',20,20,50,50,75,50),('imperiano',40,30,75,50,100,50),('legionario_cavallo',40,60,100,75,150,75),('imperiano_cavallo',80,80,100,75,175,75),('catapulta',200,200,100,0,500,500),('ariete',150,150,100,0,350,500);

Operazioni richieste nelle specifiche

Operazione 1: Registrare un nuovo utente e la creazione di un nuovo villa

Dettagli
Publisher
A.A. 2009-2010
15 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher flaviael di informazioni apprese con la frequenza delle lezioni di Laboratorio di basi di dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Roma La Sapienza o del prof Fontana Flavio.