Schema del database della scuola
Sto lavorando a un sistema scolastico semplice che gestisce la registrazione e il programma degli studenti. Inoltre, il sistema dovrebbe gestire diversi tipi di scuole come la scuola materna, primaria, secondaria e superiore (prescolare e k12).
Im non un esperto in progettazione di DB , ma comunque seguire quello che posso da quello che ho imparato attraverso la lettura e la pratica.
- Alunno
- Genitore
- Student_parent (Se è presente più di un genitore che desidera essere nel sistema)
- Scuola (dove il sistema può verificare l'appartenenza dello studente a quale livello (Primario o Secondario .. ecc.))
- Oggetto (tutte le materie nelle scuole)
- Classe (fondamentalmente programma-orario)
- Aula (ogni stanza e laboratorio della scuola (fondamentalmente strutture della scuola))
- Partecipazione (non ancora)
- Marchi (non ancora)
le relazioni tra le tabelle sono sufficienti o è necessario ridisegnarle? Qualche problema con questo schema di base? È sufficiente per il sistema? Come implementare i termini (semestre 1 e semestre 2) e gli anni? E quando finisce l'anno. Come trasferire gli studenti a un nuovo anno (come implementarlo)?
Spero di ottenere alcuni punti su miglioramenti o problemi con lo schema prima di iniziare a programmarlo.
Grazie
. . Modifica: implementazione dei suggerimenti di John Herbert . . .
L'implementazione di Giovanni punti tranne l'ultimo perché non ci sono dipartimenti nella scuola e il numero di studenti è davvero soggettivo all'anno.
- ha cambiato i nomi delle tabelle con prefissi per raggrupparli.
- Modificato alcuni campi come suggerito da John per una migliore ricerca e raggruppamento
- Aggiunto termine della tabella e collegato alla scuola (KG- Primary- Sec..etc)
- Dimensioni del campo modificate da Int (11) a qualcosa di più piccolo secondo necessità
Schema DB dopo la modifica
dopo aver implementato queste cose qualcuno non può fare a meno di vagare. Avrò bisogno di aggiungere indici per le prestazioni in futuro? Dove saranno eventualmente necessari gli indici?
Spero che questo possa avvantaggiare qualcuno che è interessato alla progettazione di DB.
Risposte
Tutto sommato penso che le tue relazioni chiave siano abbastanza dirette e abbastanza chiare da poter facilmente trovare la mia strada. Probabilmente troverai alcuni punti in cui cambiare mentre esegui il mock-up e alla fine codifichi le tue stored procedure e altri processi. Ecco i miei pensieri mentre lo guardavo.
- Sostituisci il genitore con qualcosa di più generico, come il tutore. Questo uso del linguaggio apre la porta ad altre figure autoritarie per lo studente, come i nonni e i genitori adottivi, oltre a consentire una bandiera che indica che la persona è un contatto di emergenza o è autorizzata a prendere il bambino.
- Separare il campo [Full_Name] in due campi; [Dato_Nome] e [Cognome]. Questo aiuta quando si ordina per nome durante la programmazione. (È meglio che le due sorelle Williams si presentino una accanto all'altra su un rapporto piuttosto che tutte le Mary's della scuola raggruppate insieme).
- Suggerisci di spostare il campo [termine] sotto la tabella [oggetto] nella tabella [classe]. Questo campo può essere utilizzato per indicare se Bobby Tables era in quella classe durante la primavera del 2010 o l'autunno del 2009, con quell'insegnante specifico in una stanza specifica. Avrei un'altra tabella con gli intervalli di date per quei termini. (Come nota a margine, INT (11) potrebbe essere un po 'eccessivo per questo. Cento anni di termini di una settimana risulterebbero davvero solo in 5000 termini, con sarebbe necessario solo INT (4))
- In tema di promozione degli studenti all'anno successivo, si potrebbe fare con un nuovo campo sotto la tabella [studenti], con un semplice INT (2) per indicare l'anno di istruzione. Una procedura memorizzata eseguita alla fine dell'anno scolastico potrebbe controllare i crediti guadagnati e spostarli verso l'alto.
- Si può anche considerare di includere nelle tabelle [soggetto] e [insegnante] un dipartimento, come matematica, scienze o inglese. Questo potrebbe essere usato per aiutare a raggruppare tutti gli insegnanti di scienze o mostrare tutte le classi di storia disponibili in quel periodo, specialmente se la scuola è abbastanza grande da avere più di una sessione di una particolare classe.