2001/02 - Banca del Tempo


Diagramma E/R


imageAll'atto dell'iscrizione il socio dichiara la zona dove risiede e le categorie di prestazioni che offre

imageSe l'associazione ha un numero elevato di soci allora i soci dichiarano le singole prestazioni piuttosto che le categorie

imageQuando viene svolto un servizio si registrano i dati del socio donatore, del socio ricevitore e la prestazione (oltre che la data e le ore svolte)

ZONA SOCIO CATEGORIA PRESTAZIONE

Schema relazionale esteso

image
Lo schema relazionale differisce dai diagramma E/R (perché sono stati sviluppati in tempi diversi...)

Query

Chi può svolgere una prestazione in una zona
SELECT SOCIO.*
FROM ZONA INNER JOIN (SOCIO INNER JOIN
    ((CATEGORIA INNER JOIN PRESTAZIONE ON CATEGORIA.IDcategoria = PRESTAZIONE.categoriaID)
    INNER JOIN SOCIO_CATEGORIA ON CATEGORIA.IDcategoria = SOCIO_CATEGORIA.categoriaID)
    ON SOCIO.IDsocio = SOCIO_CATEGORIA.socioID) ON ZONA.IDzona = SOCIO.zonaID
WHERE (PRESTAZIONE.Descrizione = [Scegli la prestazione]) AND
      (ZONA.Descrizione = [Scegli la zona])

Classifica per ore ricevute
SELECT IDsocio, Nome, Cognome, Sum(Ore) AS [Ore ricevute]
FROM SOCIO INNER JOIN LAVORO ON (SOCIO.IDsocio = LAVORO.a_socioID)
GROUP BY IDsocio, Nome, Cognome
ORDER BY Sum(Ore) DESC

Classifica per ore prestate
SELECT IDsocio, Nome, Cognome, Sum(Ore) AS [Ore prestate]
FROM SOCIO INNER JOIN LAVORO ON (SOCIO.IDsocio = LAVORO.da_socioID)
GROUP BY IDsocio, Nome, Cognome
ORDER BY Sum(Ore) DESC

Classifica per prestazioni
SELECT IDprestazione, PRESTAZIONE.Descrizione, Sum(LAVORO.Ore) AS SommaDiOre
FROM PRESTAZIONE INNER JOIN LAVORO ON (PRESTAZIONE.IDprestazione = LAVORO.prestazioneID)
GROUP BY IDprestazione, PRESTAZIONE.Descrizione
ORDER BY Sum(LAVORO.Ore) DESC

Chi ha diritto a una prestazione
SELECT SOCIO.*
FROM SOCIO
WHERE (SELECT Sum(LAVORO.Ore) AS SommaDiOreDa
       FROM LAVORO
       WHERE (LAVORO.da_socioID=SOCIO.IDsocio)) >
      (SELECT Sum(LAVORO.Ore) AS SommaDiOreA
       FROM LAVORO
       WHERE (LAVORO.a_socioID=SOCIO.IDsocio))

Chi svolge altre attività oltre a SEGRETERIA
SELECT SOCIO.*
FROM SOCIO INNER JOIN (CATEGORIA INNER JOIN SOCIO_CATEGORIA
  ON CATEGORIA.IDcategoria = SOCIO_CATEGORIA.categoriaID)
  ON SOCIO.IDsocio = SOCIO_CATEGORIA.socioID
WHERE (CATEGORIA.Descrizione = "SEGRETERIA") AND
      (SOCIO.IDsocio IN (SELECT SOCIO.IDsocio
                         FROM SOCIO INNER JOIN (CATEGORIA INNER JOIN SOCIO_CATEGORIA
                           ON CATEGORIA.IDcategoria = SOCIO_CATEGORIA.categoriaID)
                           ON (SOCIO.IDsocio = SOCIO_CATEGORIA.socioID)
                         WHERE (CATEGORIA.Descrizione <> "SEGRETERIA")))
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki