islandofjava
12-07-2008, 13:05
Salve a tutti :)
Devo progettare una base di dati ma ho qualche problema nel modellare alcuni dati.
Questa è la richiesta:
Ogni paziente è descritto da un numero di tessera sanitaria, un codice fiscale, un nome e una data di nascita. Un paziente è sottoposto ad una cura, identificata da un nome e descritta da una sequenza di intervalli temporali consecutivi, ognuno dei quali è associato a uno o più farmaci. Un esempio di cura è il seguente: i farmaci A e B dal giorno 1 al giorno 3, il farmaco C dal giorno 4 al giorno 5, il farmaco D dal giorno 6 al giorno 7.
Un paziente è ricoverato su un letto di una stanza di un reparto. Per un letto si vuole memorizzare un codice identificativo e una posizione (finestra, corridoio, mediano), per una stanza si vuole memorizzare un codice identificativo e il numero di letti occupati e il numero totale di letti, al massimo 3 per ogni stanza. Per un reparto si vuole tenere traccia del nome e del numero di stanze ospedaliere che contiene.
Un medico è identificato da un nome e un cognome e afferisce esattamente ad un reparto. Un medico può essere primario; in tal caso dirige un reparto. Ogni reparto ha un unico primario e un medico può essere primario di più reparti. Infine, ogni paziente è seguito da uno o più medici.
Le query richieste sono:
- i pazienti curati con il farmaco Aspirina
- per ogni reparto, il primario e il numero di medici che vi lavorano
E poi creare in SQL standard una vista permanente che, per ogni paziente, contenga il letto, una stanza, il reparto e il nome della cura a cui il paziente è sottoposto. Usando la vista creata scrivere in SQL standard la seguente interrogazione: i pazienti ricoverati in Ortopedia in stanza singola ( con un solo letto)
Lo schema che ho fatto è il seguente:
http://img139.imageshack.us/img139/2580/ospedaleko4.th.jpg (http://img139.imageshack.us/my.php?image=ospedaleko4.jpg)
Ho provato vari programmi ma questo è il più intuitivo. Il problema è che alcune cose non sono riuscito a definirle.
Ad esempio, l'attributo numero letti occupati è calcolato, perché viene ricavato dal totale - i letti lasciati vuoti.
L'attributo posizione l'ho definito come attributo normale, ma dato che può essere o finestra o corridoio o mediano, non è multivalore?.
Ho fatto poi questa traduzione:
Farmaco (nome)
Composizione (giornoInizioCura, giornoFineCura, cura, farmaco)
Cura (nome)
Composizione (farmaco) -> Farmaco (nome)
Composizione (cura) -> (Cura nome)
Paziente (TesseraSanitaria, CF, dataNascita, nome)
Paziente (cura) -> Cura (nome)
Letto (codice, posizione)
Paziente (CF) -> Letto (codice)
Qua mi sono fermato perché non capisco una cosa: nella traduzione, devo tenere conto della cardinalità o del fatto che sia un'entità debole?
Oppure entrambe e fare una sorta di summa?
Perchè Paziente (CF) -> Letto (codice) è il risultato della traduzione (1,1) ma se si considera letto come entità debole, fregandosene della cardinalità, viene:
letto (codice, posizione, paziente)
letto (paziente) -> paziente (CF)
Qualcuno sa chiarire i miei dubbi? Purtroppo ho l'esame di DB e se canno la traduzione e lo schema sbaglio anche tutto il resto :(
Devo progettare una base di dati ma ho qualche problema nel modellare alcuni dati.
Questa è la richiesta:
Ogni paziente è descritto da un numero di tessera sanitaria, un codice fiscale, un nome e una data di nascita. Un paziente è sottoposto ad una cura, identificata da un nome e descritta da una sequenza di intervalli temporali consecutivi, ognuno dei quali è associato a uno o più farmaci. Un esempio di cura è il seguente: i farmaci A e B dal giorno 1 al giorno 3, il farmaco C dal giorno 4 al giorno 5, il farmaco D dal giorno 6 al giorno 7.
Un paziente è ricoverato su un letto di una stanza di un reparto. Per un letto si vuole memorizzare un codice identificativo e una posizione (finestra, corridoio, mediano), per una stanza si vuole memorizzare un codice identificativo e il numero di letti occupati e il numero totale di letti, al massimo 3 per ogni stanza. Per un reparto si vuole tenere traccia del nome e del numero di stanze ospedaliere che contiene.
Un medico è identificato da un nome e un cognome e afferisce esattamente ad un reparto. Un medico può essere primario; in tal caso dirige un reparto. Ogni reparto ha un unico primario e un medico può essere primario di più reparti. Infine, ogni paziente è seguito da uno o più medici.
Le query richieste sono:
- i pazienti curati con il farmaco Aspirina
- per ogni reparto, il primario e il numero di medici che vi lavorano
E poi creare in SQL standard una vista permanente che, per ogni paziente, contenga il letto, una stanza, il reparto e il nome della cura a cui il paziente è sottoposto. Usando la vista creata scrivere in SQL standard la seguente interrogazione: i pazienti ricoverati in Ortopedia in stanza singola ( con un solo letto)
Lo schema che ho fatto è il seguente:
http://img139.imageshack.us/img139/2580/ospedaleko4.th.jpg (http://img139.imageshack.us/my.php?image=ospedaleko4.jpg)
Ho provato vari programmi ma questo è il più intuitivo. Il problema è che alcune cose non sono riuscito a definirle.
Ad esempio, l'attributo numero letti occupati è calcolato, perché viene ricavato dal totale - i letti lasciati vuoti.
L'attributo posizione l'ho definito come attributo normale, ma dato che può essere o finestra o corridoio o mediano, non è multivalore?.
Ho fatto poi questa traduzione:
Farmaco (nome)
Composizione (giornoInizioCura, giornoFineCura, cura, farmaco)
Cura (nome)
Composizione (farmaco) -> Farmaco (nome)
Composizione (cura) -> (Cura nome)
Paziente (TesseraSanitaria, CF, dataNascita, nome)
Paziente (cura) -> Cura (nome)
Letto (codice, posizione)
Paziente (CF) -> Letto (codice)
Qua mi sono fermato perché non capisco una cosa: nella traduzione, devo tenere conto della cardinalità o del fatto che sia un'entità debole?
Oppure entrambe e fare una sorta di summa?
Perchè Paziente (CF) -> Letto (codice) è il risultato della traduzione (1,1) ma se si considera letto come entità debole, fregandosene della cardinalità, viene:
letto (codice, posizione, paziente)
letto (paziente) -> paziente (CF)
Qualcuno sa chiarire i miei dubbi? Purtroppo ho l'esame di DB e se canno la traduzione e lo schema sbaglio anche tutto il resto :(