Newsgroup: it.comp.software.database
Titolo: Modello ER e vincoli speciali

Ciao, spero che questo sia il gruppo giusto per una domanda.
Nell'ultimo scritto per l'esame di stato di ingegneria informatica si 
chiedeva, tra l'altro, di "Progettare lo schema concettuale dei dati e 
delle funzioni" e "Progettare lo schema logico dei dati" di un sistema 
informativo per una università. Nella descrizione del sistema erano 
presenti vincoli molto restrittivi, come ad esempio (cito a memoria):
- Un appello per un determinato canale di insegnamento può essere 
istituito solo da un docente che appartenga a quel canale.
- Per ciascun appello viene stabilita una commissione di tre docenti, 
uno dei quali deve essere il docente che ha istituito l'appello.
Per quel che ho capito io, le richieste di progettazione di cui sopra 
vengono semplicemente soddisfatte dal progetto di un modello 
Entità-Relazione del sistema e del conseguente modello logico, ma in 
questi due modelli, per quello che leggo nei libri, non trovo il modo di 
esprimere vincoli come i due citati sopra. Penserei piuttosto che il 
rispetto di questi vincoli debba essere imposto successivamente, tramite 
codice interno all'applicazione che gestirà il database, o trigger sql, 
o altro.
Cosa ne pensate? C'è un modo di esprimere quei vincoli nel modello ER? 
Grazie.
-- 
01

 che gestirà il database
No, tutti i vincoli di integrita` devono stare il piu` appresso
possibile ai dati; altrimenti e` solo questione di tempo affinche`
vengano aggirati.
ciao

 Appelli { Data, (Docente, Canale)_FK -> Ruoli }
spero mi perdoni zeroUno se vado un po' fuori tema, ma volevo chidere
una cosa su questo tipo di modello.
- ruoli ha una pk composta, che magari ogni chiave e' una fk
- appelli ha una chiave fk, che non e' la prima fk di ruoli e la
seconda, ma la composizione delle due (come se insieme fossero
un'unica chiave)
io in questi casi faccio cosi'
- Ruoli { (Docente, Canale)_UNIQUE, chiave_autogenerata_PK }
- Appelli { Data, chiave_autogenerata_PK -> Ruoli }
altrimenti dovrei riportare su Appelli le due chiavi di ruoli, ma chi
mi dice che la "coppia" (docente, canale) sia univoca?
e' giusto?
grazie 1k
Rob

 e' giusto?
No, non lo vedi insegnato in alcun testo serio.
Io leggo parecchio e consulto i siti dei docenti; non ho ancora
trovato uno che faccia quello di cui sopra, tranne uno, che
dovrebbe dedicarsi all'agricoltura (ha mancato persino la
definizione di database relazionale...), pero` ha scritto libri
per una nota casa editrice, mah.
ciao 

 lasciare il compito di verificare l'integrita` referenziale al dbms.
Aggiungo che potrei decidere di voler fare vincoli FK aggiuntivi
con altre tabelle, ad esempio Canale con una tabella Canali,
Docente con una tabella Lezioni. Con che cosa li fai se i due attributi
sono ora conglobati in una colonna ID (il quale ID riguarda solo una
particolare istanza di solo una particolare tabella)...? 

Il 09/09/2008, The man with two watches ha detto :

niente da dire (magari al momento...)
chiarissimo come sempre
grazie :o)
Rob

 vengano aggirati.
L'idea di usare trigger SQL non può essere utile?
Grazie mille per l'aiuto!
-- 
01

 L'idea di usare trigger SQL non può essere utile?
No: un trigger e` procedurale (es. non mi verifica i dati passati)
e puo` essere aggirato in svariati modi. Un vincolo dichiarativo e`
molto superiore e preferibile al codice procedurale.
ciao 

 Quale principio fondamentale questa tabella viola?
Accetto la tirata senza riserve, a mia parziale discolpa posso dire che 
mi sembrava brutto già a guardarlo ma non mi sono messo a pensarci 
troppo :-)
Il fatto è che nel breve tempo dedicato finora allo studio 
dell'argomento ho sempre disegnato prima il modello ER e poi da lì sono 
passato alla progettazione logica. Qui invece ho scritto la cosa al volo 
tanto per spiegarmi. Certamente pensando di dover fare le cose per bene 
immaginerei di creare due entità, Docente e Commissione, legate da una 
relazione "Fa parte di", e quindi il risultato sarebbe diverso.
-- 
01