Come devo impostare un database per la gestione della scuola?

1

Sto facendo fatica a creare un database da usare nel mio sistema scolastico accademico che dovrebbe registrare tutti i punteggi degli studenti e quindi essere in grado di preparare un rapporto che mostri i ranghi degli studenti.

La parte più difficile è che se ho molti studenti e molti corsi / materie e gli studenti eseguono 2 test ogni semestre, come faccio a configurare le tabelle db per registrarli in modo tale da poter utilizzare in seguito le istruzioni SQL SELECT per capire i punteggi totali dello studente così come i ranghi?

Al momento ho tabelle per dati demografici, corsi, classi e amp; punteggi come visto nella foto allegata

Grazie.

    
posta Frank Lema 22.07.2016 - 22:50
fonte

2 risposte

1

La tua tabella dei punteggi corrente (con 4 punteggi dei test al suo interno) non funzionerà. Cosa succede se hai cinque punteggi? O nessuno?

Le tabelle del database hanno sempre un record per entità. Nel caso di una tabella Scores, ciò significa che hai un punteggio per record. Fatelo e penso che troverete che è possibile scrivere una query SQL per qualsiasi cosa si voglia, compreso il voto, la media e i totali, che possono essere calcolati al volo in una query.

    
risposta data 22.07.2016 - 23:22
fonte
1

È davvero difficile darti una risposta che risolva sufficientemente la tua domanda. La realtà è che il punto di utilizzo di un database relazionale è quello di modellare le relazioni del mondo reale tra entità.

Un database scolastico può essere piuttosto complesso. Deve tener conto molto di più di pochi corsi, studenti, ecc. E la normalizzazione dei dati (rimozione della ridondanza) è complessa!

Ad esempio, ecco come potrebbero essere alcune di queste relazioni:

# (middle initial is last for optimization)
-person
    - id
        +- int
        +- primary key, unique, not null
    - type
        +- [foreign key] => position_id
    - gender
        +- enum (Male/Female)
        +- not null
    - dob
        +- can be a date, a string, etc
        +- not null
    - address
        +- [foreign key] => address_id
    - first_name
        +- varchar
        +- not null
    - last_name
        +- varchar
        +- not null
    - middle_initial
        +- char
        +- can be null

# the position table tells you the type of person
# everytime a new position is created, it's added here
# this can be simple w/ 2 records:
#   1. student
#   2. faculty
# but it can also have administrative staff, etc and grow
# rather large
-position
    - position_id
        +- primary key, not null, unique
    - psition
        +- varchar


# holds all addresses.. these can be shared by faculty and students...
-addresses
    - address_id
        +- can be a hashsum, an int, etc... but it can also be
           a composite key, made up of every other field in this table
    - street_number
        +- int
    - street_name
        +- varchar
    - municipality
        +- [foreign key] => municipality_id
    - county
        +- [foreign key] => county_id
    - country
        +- [foreign key] => country_id

-municipality
    ...contains attributes of all municipalites that
    the school serves. new ones can be added, old ones
    can be removed...

-county
    ...same as municipality

# list of departments
-department
    -department_id
    ...etc, more attributes of a department

# list of available courses
-course
    - course_id
    - department
        +- [foreign key] => department_id

# current semester and all previous semesters
-semester
    ...this is where the semesters are stored

# grade
-grade
    - grade_id
    - foreign key for course_id
    - foreign key for semester_id
    - foreign key for student person record
    - foreign key for teacher person record

Ora, questo non è perfetto in nessun modo. È piuttosto incompleto! Fornire uno schema di database completamente normalizzato e a tenuta stagna va oltre lo scopo di questo post (a meno che tu non sia disposto ad assumere un appaltatore, wink).

Il punto che stavo cercando di fare con lo schema schema che ho fornito è che vuoi memorizzare le entità in tabelle univoche e collegare queste tabelle per mostrare le relazioni.

La tabella person è un buon esempio perché quella tabella può avere diverse relazioni. Ad esempio, più persone possono vivere allo stesso indirizzo e quindi abbiamo aggiunto una tabella address . Dobbiamo descrivere type / function / role di quella persona - sono uno studente? facoltà? impiegato amministrativo? volontario? Consiglio scolastico? contatto di emergenza? Un nonno che è autorizzato a raccogliere un bambino? ecc. ecc.

Inoltre, si potrebbe sostenere che gender è condivisa su più record e dovrebbe essere invece una chiave esterna - sarebbe una decisione sbagliata. Poiché esiste un numero così basso di risposte possibili, è più efficiente utilizzare un tipo di enum di database incorporato. Il motore del database ottimizzerà enum s per te.

Se non si separano le entità, le prestazioni del database ne risentiranno. Immagina di avere le stesse contee e comuni duplicati migliaia di volte nella tabella degli indirizzi! I comuni e le contee sono finiti - di solito una scuola può limitarli a una certa area geografica, ad esempio entro 100 miglia dalla scuola.

In questo modo, in futuro è facile aggiungere nuove contee, se una nuova persona ha un indirizzo che risiede in un comune o in una contea che non ha un record corrispondente.

Potresti anche voler creare una tabella nazionale se hai anche il motivo più banale per credere che gli studenti che risiedono permanentemente in un altro paese saranno nel database. Pensa allo studente straniero o uno studente che studia all'estero.

Come puoi vedere, queste relazioni sono complesse e devi pensare di conseguenza al tuo database.

Ad esempio, ci sono un numero piuttosto elevato di entità che saranno rappresentate nel database. Ne elencherò alcuni sotto e ti consentirò di prenderlo da qui:

  • Dipartimenti
  • semestri
  • Corsi
  • Course_materials
  • Gradi
    • Tieni presente che gli studenti possono prendere due volte la stessa classe se falliscono

Ci sono altre cose da tenere a mente, che possono essere nel databse:

  • Tenere traccia dei venditori utilizzati dalla scuola
  • Ricezione di lezioni, fatturazione, ecc.
  • Tenere traccia di chi ha borse di studio
  • Tenere traccia di quali sono gli studenti su quali squadre sportive
  • Tenere traccia dei GPA e mettere in difficoltà gli studenti in prova accademica
  • Monitoraggio di infrazioni, detenzioni, sospensioni
  • Tenere traccia degli studenti trasferiti, ecc.
risposta data 23.07.2016 - 05:58
fonte

Leggi altre domande sui tag