Visualizzazione dei risultati da 1 a 1 su 1
  1. #1

    gestire campi diversi con eleganza

    Ciao a tutti

    In un gestionale per una scuola degli studenti devono prenotarsi gli esami (materia/data/ora)

    Amministrazione crea delle sessioni di esame con materia/giorno/orari disponibili

    Lo studente sceglie la materia, la data e l'ora di esame (dalle 9am alle 6pm, sessioni di un ora)

    C'è un numero massimo di utenti per sessione di esame diverso per ogni materia/giorno/ora che deve essere specificata tipo:

    10/10/2018
    ore9 - max 3 studenti
    ore 12 - max 1 studente
    etc

    Amministrazione deve poter visualizzare quanti studenti per materia/giorno/ora si sono iscritti e quali sono

    Lo studente deve poter vedere a che esami è iscritto e in quale orario.

    Ho pensato ad una tbl_esamiPre (allegata) in cu si specifica il numero max di studenti per ora (campo ore9. ore10 etc) ed un campo in cui incremento il n° iscritti per ora (campo ore9_book, ore10_book, etc)

    UPDATE esamiPre SET ore9_book + 1

    Potrei allo stessso tempo registrare (insert multiple) in una tbl_esamiStudente la sessione di esame passando materia/data/ora(varchar) collegati ad IDutente

    Però.. visualizzando i campi ore9 e ore9_book avrei il numero di studenti max e di quelli iscritti ma non quali sono (!) inoltre se si deve cancellare/modificare una prenotazione tocca farlo sia sulla tbl_esamiPre che sulla
    tbl_esamiStudente.

    Eliminare i campi ore9_book, ore 10_book e ricavare gli iscritti per sessione dalla tbl_esamiStudente sarebbe ok ma nella tbl_esamiPre i campi ora sono INT mentre in tbl_esamiStudente sono varchar... come confrontarli

    Un altra soluzione sarebbe di inserire come array l'idutente nel campo ore9_book ma non mi piace

    Qualche idea elegante ed illuminante ?
    Immagini allegate Immagini allegate

  2. #2
    Utente di HTML.it L'avatar di SkyLinx
    Registrato dal
    Jun 2017
    residenza
    Espoo, Finland
    Messaggi
    60
    Io creerei le seguenti tabelle:

    codice:
    materie { id, nome }
    
    studenti { id, nome }
    
    sessioni { id, id_materia, data, ora, max utenti }
    
    prenotazioni { id_studente, id_sessione }
    Poi....

    Amministrazione deve poter visualizzare quanti studenti per materia/giorno/ora si sono iscritti
    codice:
    SELECT m.nome AS "materia", data, ora, max_utenti, tot_studenti_sessione
    FROM sessioni s
    JOIN materie m ON m.id = s.id_materia
    JOIN (
      SELECT id_sessione, COUNT(*) AS tot_studenti_sessione
      FROM prenotazioni
      GROUP BY id_sessione 
    ) AS utenti_sessione su ON us.id_sessione = s.id
    e quali sono
    codice:
    SELECT m.nome AS "materia", data, ora, stu.nome AS "studente"
    FROM sessioni s
    JOIN materie m ON m.id = s.id_materia
    JOIN prenotazioni p ON p.id_sessione = s.id
    JOIN studenti stu ON stu.id = p.id_studente
    WHERE s.id = ...
    Lo studente deve poter vedere a che esami è iscritto e in quale orario.
    codice:
    SELECT stu.nome AS "studente", m.nome AS "materia", data, ora
    FROM studenti stu
    JOIN prenotazioni p on p.id_studente = stu.id
    JOIN sessioni s ON s.id = p.id_sessione
    JOIN materie m ON m.id = s.id_materia
    where stu.id = ...
    The only way to stay sane is to go a little crazy. - Susanna Kaysen

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.