[Basi di dati] Traduzione verso il modello logico
Nella mia applicazione (ricordo, per un progetto d'esame) ci sono due tipi di utenti: semplici e premium. Hanno entrambi gli stessi attributi (e sono tanti), quello che li distingue è cosa possono fare. I premium possono fare tutto quello che fanno i semplici (e quindi sono coinvolti nelle stesse relazioni) ma anche alcune cose in più. A conti fatti, tutti gli utenti partecipano a 6 relazioni, i premium invece partecipano a quelle 6 più ulteriori 3. In più, tutti gli utenti semplici possono diventare utenti premium dopo aver partecipato ad un certo numero di eventi. Nella traduzione verso il modello logico, io avevo pensato di mettere semplicemente un attributo "Tipo" nella tabella Utente che distingue gli utenti semplici dai premium.
Secondo voi è corretta come soluzione? Ho qualche dubbio perché lo schema ER così ristrutturato chiaramente non evidenzia più chi può fare cosa (tutte le associazioni partono quindi da UTENTE), ed ovviamente il controllo su chi può fare cosa verrà demandato tutto all'applicazione.
L'alternativa sarebbe fare due entità separate, chiamiamole US e UP, legando UP ad US (dove UP ha un identificatore esterno verso US), però questo presenta dei problemi: non c'è un attributo proprio di UP, quindi l'entità UP che attributi avrebbe? O dovrei duplicare alcuni degli attributi oppure inventarmene uno aggiuntivo. In secondo luogo, se poi un US diventa UP che dovrei fare? Copiare i dati di quell'US nella tabella UP? Infine, sparirebbe dallo schema il coinvolgimento di UP con le 6 associazioni in cui era coinvolto.
Voi che ne pensate?
Grazie.
Secondo voi è corretta come soluzione? Ho qualche dubbio perché lo schema ER così ristrutturato chiaramente non evidenzia più chi può fare cosa (tutte le associazioni partono quindi da UTENTE), ed ovviamente il controllo su chi può fare cosa verrà demandato tutto all'applicazione.
L'alternativa sarebbe fare due entità separate, chiamiamole US e UP, legando UP ad US (dove UP ha un identificatore esterno verso US), però questo presenta dei problemi: non c'è un attributo proprio di UP, quindi l'entità UP che attributi avrebbe? O dovrei duplicare alcuni degli attributi oppure inventarmene uno aggiuntivo. In secondo luogo, se poi un US diventa UP che dovrei fare? Copiare i dati di quell'US nella tabella UP? Infine, sparirebbe dallo schema il coinvolgimento di UP con le 6 associazioni in cui era coinvolto.
Voi che ne pensate?
Grazie.
Risposte
Credo che ci siano due alternative:
1. Usare un attributo per distinguerli come hai già suggerito.
2. Avere una tabella che contiene gli ID degli utenti premium.
1. Usare un attributo per distinguerli come hai già suggerito.
2. Avere una tabella che contiene gli ID degli utenti premium.