Questa domanda mostra che il tuo modello attuale non è intuitivo e penso che sia un buon feeling.
Lascia che ti spieghi un'alternativa all'aver solo Student
, Subject
e Degree
per te che, si spera, ti sembra più intuitivo.
Mentre uno studente sembra sapere tutto sui suoi gradi, non lo fa. Illustriamo questo con un esempio del mondo reale: considera che uno studente ha una laurea per un corso. Tuttavia, lo staff universitario ha scoperto e può dimostrare che lo studente ha imbrogliato nelle prove finali. La sua laurea viene quindi dichiarata immediatamente non valida prima che probabilmente ne venga a conoscenza.
La domanda è: chi è responsabile di dire se alcuni studenti sono già in possesso e validi?
Sono quelli che hanno la responsabilità di sapere quale studente ha quali (validi) gradi. Questo potrebbe ad es. essere un examination office
, ma potrebbe dipendere dall'università / paese. [1]
Come vedi, dobbiamo modellare un'altra parte in merito alla separazione delle preoccupazioni. E lo stesso vale per il tuo single degree plan
. Esiste sicuramente un'altra autorità responsabile dell'amministrazione dei piani di laurea degli studenti per assicurarsi che ogni studente abbia un solo piano e che questo piano sia valido.
In poche parole, gli studenti e i loro gradi sono collegati solo indirettamente attraverso diversi tipi di autorità. Gli studenti di solito conoscono le autorità che sono responsabili per loro (ad esempio nel codice che significa che hanno un riferimento a questo oggetto).
[1]: solo una nota di cautela: anche se potrebbe esserci un'unica autorità di questo tipo, non modellarla con qualche schema singleton. Invece, modellalo come se ci potesse essere più di una autorità e nel tuo programma attuale crea solo un'istanza.