Dubbio Progettazione Concettuale

di il
12 risposte

Dubbio Progettazione Concettuale

Buonasera a tutti,
ho quasi completato lo schema er di una base di dati che sto costruendo, ma mi manca solo questo pezzo, che non so come sistemare.

Questa è la parte interessata (ho tralasciato, per comodità, le relazioni, ma tranquilli che su quello ufficiale ho messo tutto)
photo6039384507292953807.jpg
photo6039384507292953807.jpg

In pratica i volontari hanno un brevetto che ottengono attraverso un corso. Ho creato una storicizzazione dell'entità Corso con "Corso Futuro" e "Corso passato".
I partecipanti ai corsi (intesi come unione di "docenti" e "discenti") sono tutti volontari.
Il problema risiede nel fatto che i docenti di un corso hanno già frequentato quel corso come discenti nel passato, superandolo e ottenendo il brevetto.
Come potrei evidenziare il fatto che i docenti dei corsi già posseggono il brevetto che si ottiene col corso di cui sono docenti? e che quindi nel passato sono stati discenti dello stesso corso di cui ora sono docenti?

Ho pensato di risolvere così
photo6039384507292953818.jpg
photo6039384507292953818.jpg

ma non mi convince molto.

Suggerimenti?

Grazie in anticipo

12 Risposte

  • Re: Dubbio Progettazione Concettuale

    1) Ma quanti TIPI di corso vi sono?
    2) perché questa distinzione fra Corso passato e Corso futuro? Non basta una data?
  • Re: Dubbio Progettazione Concettuale

    1) C'è un tipo di corso per ogni brevetto esistente. Esistono 20 brevetti diversi, quindi 20 tipi di corso.
    2) Nella prima bozza avevo messo soltanto "Corso" e come attributi la data di inizio e fine. Però poi ho pensato che potesse servire questa divisione per avere uno storico dei corsi passati e un sistema di prenotazione per i corsi futuri. La generalizzazione poi la toglierò accorpando le entità genitore e figlie. Consigli comunque di lasciare "Corso" con la data di inizio e fine?
  • Re: Dubbio Progettazione Concettuale

    simo954 ha scritto:


    1) C'è un tipo di corso per ogni brevetto esistente. Esistono 20 brevetti diversi, quindi 20 tipi di corso.
    A dir la verità esiste un singolo corso, con un attributo tipodicorso
    2) Nella prima bozza avevo messo soltanto "Corso" e come attributi la data di inizio e fine. Però poi ho pensato che potesse servire questa divisione ...
    Hai pensato male, perchè questa operazione (shard) rende difficile ed oneroso interrogare entrambe le tabelle per scopi statistici, ricerca eccetera.
  • Re: Dubbio Progettazione Concettuale

    +m2+ ha scritto:


    simo954 ha scritto:


    1) C'è un tipo di corso per ogni brevetto esistente. Esistono 20 brevetti diversi, quindi 20 tipi di corso.
    A dir la verità esiste un singolo corso, con un attributo tipodicorso

    Si corso è uno solo, tipodicorso ha numerosità 20. Pensavo @gibra intendesse questi
    2) Nella prima bozza avevo messo soltanto "Corso" e come attributi la data di inizio e fine. Però poi ho pensato che potesse servire questa divisione ...
    Hai pensato male, perchè questa operazione (shard) rende difficile ed oneroso interrogare entrambe le tabelle per scopi statistici, ricerca eccetera.
    Quindi conviene lasciare soltanto "corso" senza divisione e facendo lo storico all'interno dell'entità "corso" stessa?

    E la questione dei docenti che hanno già fatto il corso in precedenza come discenti? come potrei risolverla? Ho pensato anche a togliere la divisione in "docenti" e "discenti" lasciando solo "partecipanti" e mettendo "ruolo" tra gli attributi, però mi sembra poco snella come rappresentazione
  • Re: Dubbio Progettazione Concettuale

    simo954 ha scritto:


    E la questione dei docenti che hanno già fatto il corso in precedenza come discenti? come potrei risolverla? Ho pensato anche a togliere la divisione in "docenti" e "discenti" lasciando solo "partecipanti" e mettendo "ruolo" tra gli attributi, però mi sembra poco snella come rappresentazione
    ma la snellezza, qualsiasi cosa significhi, ha un qualche rilievo?
  • Re: Dubbio Progettazione Concettuale

    Ha rilievo solo in questa prima fase della progettazione concettuale, poi verrà eliminata anche questa generalizzazione.
    Devo fare un progetto che comprende ogni singola fase della progettazione concettuale e logica. Per questo sto cercando una mano per come sistemare ora le cose
  • Re: Dubbio Progettazione Concettuale

    Così potrebbe avere più senso?
    In questo modo dovrebbe essere chiaro quali corsi possono insegnare i docenti
    photo6041822266305653991.jpg
    photo6041822266305653991.jpg

  • Re: Dubbio Progettazione Concettuale

    simo954 ha scritto:


    Quindi conviene lasciare soltanto "corso" senza divisione e facendo lo storico all'interno dell'entità "corso" stessa?
    Sì, ma non è qui devi tenere lo storico. Vedi sotto...

    simo954 ha scritto:


    E la questione dei docenti che hanno già fatto il corso in precedenza come discenti? come potrei risolverla?
    Se sono docenti a mio avviso non si dovrebbe più parlare di corso, ma di Brevetto.
    Potrebbe accadere che un fa il corso, ma non lo passa e deve ripeterlo?
    Se sì, a quanti corsi può aver partecipato? Più di uno, ognuno dei quali con data-inizio e data-fine; quindi a quel punto complichi le cose inutilmente.
    Se parli di brevetti, allora avrai una tabella 'storico' molti-molti tra Brevetti e Soggetti.

    I Soggetti sono l'insieme di persone che possono essere docenti o discenti.

    Naturalmente, non conoscendo minimamente la materia a cui ti riferisci non è semplice dae suggerimenti mirati perché non abbiamo la minima idea di come si articola l'intera 'faccenda'.
  • Re: Dubbio Progettazione Concettuale

    Sintetizzo quanto più possibile tutto lo schema.
    Devo fare questo database per la gestione di servizi di un'azienda(è un progetto che sto facendo nel volontariato).
    I volontari sono coloro che vengono impiegati nei vari servizi.
    Per fare i servizi, servono determinati brevetti.
    I volontari, per ottenere questi brevetti, seguono dei corsi che hanno una data-inizio, una data-fine e un esito.
    I brevetti esistenti sono in tutto 30. I corsi sono 2 all'anno per ogni singolo brevetto (quindi 60 corsi/anno). I corsi fanno conseguire solo uno di questi 30 brevetti.
    Una volta superato il corso, non puoi più farlo. Il superamento del corso con cui ottieni il brevetto "x" ti permette di essere docente nel prossimo corso per il conseguimento del brevetto "x".
    Se non si supera il corso, si può rifare il prossimo.

    Mi servirebbe un sistema di prenotazione sui corsi futuri e un'archiviazione per i corsi passati (che si può risolvere tornando alla sola entità "corso" con data-inizio e data-fine come attributi) e un modo per far sì che il docente del corso per il brevetto "x" già possiede il brevetto "x" avendo fatto il corso nel passato.

    Spero sia un po' più chiaro.

    Ovviamente la struttura del database non è solo questa, ma sul resto ci sono. È solo qui che non riesco a trovare una soluzione
  • Re: Dubbio Progettazione Concettuale

    Per me si potrebbe ragionare in 2 modi:

    A) Una Persona può avere una serie di Fatti che lo coinvolgono. Tali Fatti possono essere di 2 tipi: FrequentazioneCorso o ConseguimentoBrevetto. Di conseguenza ci vedo il seguente scenario tabelle:

    Persone
    IDPersona (PK)
    Cognome
    Nome
    ...altri campi anagrafici...

    Fatti
    IDFatto (PK)
    DataFatto
    TipoFatto (qui ci scrivi se si tratta di FrequentazioneCorso o ConseguimentoBrevetto)
    Descrizione (o NomeFatto se intendi standardizzare valori che poi si ripetono sistematicamente...)
    IDPersona (FK)

    Persone.IDPersona uno-a-molti Fatti.IDPersona

    B) Invece di una tabella Fatti, 2 tabelle distinte FrequentazioniCorsi e BrevettiPersone, quindi

    Persone
    IDPersona (PK)
    Cognome
    Nome
    ...altri campi anagrafici...

    FrequentazioniCorsi
    IDFC (PK)
    DataFC
    NomeCorso
    IDPersona (FK)

    BrevettiPersone
    IDBP (PK)
    DataBrevetto
    NomeBrevetto
    IDPersona (FK)

    Persone.IDPersona uno-a-molti FrequentazioniCorsi.IDPersona
    Persone.IDPersona uno-a-molti BrevettiPersone.IDPersona

    Io voterei la soluzione A).

    Ho omesso l'aspetto riguardante l'insegnamento. In ogni caso, qualsiasi meccanismo tu volessi rendere "automatico" circa il fatto che dai Corsi si passa al ConseguimentoBrevetto, poi si passa a essere Docente, secondo me sono cose che devi gestire con query e automazioni macro o VBA.
  • Re: Dubbio Progettazione Concettuale

    Una possibile soluzione
    • tblAnagrafiche:
      • IDAnagrafica
        Cognome
        Nome
        ecc…
      tblCorsi:
      • IDCorso
        Corso
        ecc…
      tblFrequenzeCorso
      • IDFrequenzaCorso
        IDCorso
        IDAnagrafica
        TipoFrequenza (Docente o Studente)
        DataInizio
        DataFine
        Superato (Tipo dati=Sì/No, Valore predefinito=Falso)
        ecc…
    Per inserire il Docente in una FrequanzaCorso basta filtrare dalla tblFrequanzeCorso tutti quelli dove IDCorso, è uguale a quello che deve essere svolto, e Superato è uguale a Sì.
    Lo Stesso criterio può essere usato per sapere quali sono le persone in possesso di un certo Brevetto.
    Il campo TipoFrequenza dovrà essere registrato automaticamente.
    Naturalmente è necessario controllare ad ogni inserimento di record nella tblFrequenzeCorso che :
    • se si seleziona un'Anagrafica che ha già frequentato quel Corso superandolo nel campo TipoFrequenza verrà scritto Docente.
      una volta che esiste un Docente si dovranno poter selezionare solo Anagrafiche che non hanno frequentato quel Corso o che lo hanno frequentato ma con esito negativo, se il corso può essere ripetuto, nel caso un corso non può essere ripetuto solo le Anagrafice che non hanno mai partecipato al Corso e nel campo TipoFrequenza verrà scritto Studente.
  • Re: Dubbio Progettazione Concettuale

    La domanda è: si tratta di un qualcosa scolastico, oppure puoi materialmente fare come ti pare?
    Quale genere di utilizzo sarà necessario?
    Sia come inserimenti, che come letture.
    Hai un progetto talmente banale che si potrebbe implementare con una singola tabella, o con 10, a seconda di come sarai più comodo.
    Rammenta che lo scopo è avere qualcosa che sarà efficiente e comodo, non "snello".

    Ad esempio
    1) un brevetto può essere revocato/scadere, o una volta conseguito c'è per sempre?
    2) quanti volontari ci sono?
    3) quanto puoi operare lato applicazione?
    4) ci sono legami logici tra i corsi (puoi fare il corso C solo se hai già superato il corso B)?
Devi accedere o registrarti per scrivere nel forum
12 risposte