Consiglio gestione tabelle anagrafiche

di il
10 risposte

Consiglio gestione tabelle anagrafiche

Sto costruendo un database per una scuola.
Ho due tabelle anagrafiche una per gli alunni ed un'altra per l'insegnanti.
Alcune delle volte un alunno poi in futuro è anche nella tabella insegnati e quindi si duplicano i dati.
Mi hanno sempre insegnato a non duplicare i dati, ma in questo caso voi cosa fareste?

10 Risposte

  • Re: Consiglio gestione tabelle anagrafiche

    A rigore di normalizzazione devi avere una sola tabella Persone. Puoi aggiungere un campo di discriminazione che specifica se "a tutt'oggi" si tratta di Alunno o Insegnante. 2 query di selezione possono occuparsi di dividere le 2 categorie.
    L'ipotesi di avere 2 tabelle...potrebbe avere senso se (per esempio) in una (Alunni) indichi anche Indirizzo, Città...tutti i dati anagrafici, mentre per Insegnanti ti interessa solo Cognome Nome, o semplicemente Insegnante.
  • Re: Consiglio gestione tabelle anagrafiche

    OsvaldoLaviosa ha scritto:


    L'ipotesi di avere 2 tabelle...potrebbe avere senso se (per esempio) in una (Alunni) indichi anche Indirizzo, Città...tutti i dati anagrafici, mentre per Insegnanti ti interessa solo Cognome Nome, o semplicemente Insegnante.
    Cosa intendi?
    Nel mio caso Alunno e Insegnante potrebbero avere indirizzo differenti.
  • Re: Consiglio gestione tabelle anagrafiche

    lucavalentino ha scritto:


    Nel mio caso Alunno e Insegnante potrebbero avere indirizzo differenti.
    Allora ti serve una tabella per gli indirizzi e poi imposti la relazione: Persone 1-M Indirizzi.

    In teoria ci starebbe anche un M-M, anche perché chiunque potrebbe cambiare indirizzo ad un certo punto della sua carriera scolastica, oppure ci sono due allievi che son fratelli e quindi l'indirizzo p lo stesso, o magari ancora padre e figlio che son docente ed allievo. Ma penso sia un po' troppo sofisticato come sistema e non credo che valga la pena implementarlo per quel che deve fare.
  • Re: Consiglio gestione tabelle anagrafiche

    Hm...
    Non sono d accordo sul fatto di avere una unica tabella per le persone, perche alunni ed insegnanti hanno dei dati completamente diversi tra di loro.
    Un alunno segue i corsi e l insegnante li fa. Un alunno ha una carriera scolastica, un insegnante una carriera lavorativa, che sono due cose completamente diverse.
    Con una unica tabella dove indichi cambiando lo stato "alunno/insegnante", e per rutti gli altri dati, non avrai mai uno storico e nessun dato sulla loro carriera come scolari e come insegnanti. O meglio potresti averla, ma avresti una accozzaglia di dati mischiati che poi dovresti continuamente discriminare in fase di ricerca.
    In un database commerciale non si metterebbero mai clienti e fornitori in un unica tabella, anche se alcuni fornitori, possono essere anche clienti.
    Per quanto riguarda gli indirizzi se ti serve avere uno storico, potresti aggiungere una tabella a parte , ma la cosa la trovo superflua.
    Primo perché ti interessa solo l ultimo indirizzo valido, secondo perché se uno studente x abita in via y, è archiviato nell anagrafica dello studente e se poi si sposa e diventa insegnante ed abita in via zz , l avrai archiviato nella tabella degli insegnanti.
    Inoltre sarà tutto molto piu semplice, perche gl li insegnanti saranno collegati ai corsi che insegnano, alle classi dove insegnano e di conseguenza agli alunni a cui insegnano. Di contro gli alunni saranno collegati ai corsi che seguono, le classi che frequentano e gli insegnati che hanno e gli esami che hanno superato. Con un unica tabella anagrafica, rischi di avere dei valori null in alcuni campi. Ed i valori null non piacciono alle query.
  • Re: Consiglio gestione tabelle anagrafiche

    Non sono d'accordo. Un'anagrafica è un'anagrafica. Forse ragiono troppo OOP ma se dovessi scrivere una classe per gli alunni ed una per gli insegnato, la classica classe base Persone me la farei.
    Applicando la logica alle tabelle, creerei l'anagrafica con i dati immutabili, e poi assocerei in tabelle apposite 1-M i dati relativi ad allievo e/o insegnante.
  • Re: Consiglio gestione tabelle anagrafiche

    Sgrubak ha scritto:


    Non sono d'accordo. Un'anagrafica è un'anagrafica. Forse ragiono troppo OOP ma se dovessi scrivere una classe per gli alunni ed una per gli insegnato, la classica classe base Persone me la farei.
    Applicando la logica alle tabelle, creerei l'anagrafica con i dati immutabili, e poi assocerei in tabelle apposite 1-M i dati relativi ad allievo e/o insegnante.
    In questo modo ragioni sui dati e non sulla categoria. Qui abbiamo due categorie, alunni ed insegnati, e come per clienti, fornitori, amio avviso le anagrafiche ed i relativi movimenti devono viaggiare separati.
    Suddividendo in categorie, anche modifiche successive, saranno piu agevoli, tipo aggiungere un campo ad una categoria non andrà ad influire sull intera struttura, ma solo su una parte.
    Se si pone la necessità di modificare ad esempio qualcosa agli insegnati, ma che non interessa gli alunni, bisognerebbe modificare, oltre alle tabelle, anche le query preesistenti, in modo invasivo., i front end ed i report.
    Per non parlare poi della possibilità di dover creare query kilometriche, che devono interrogare tutto il database, solo per trovare un valore atomico.
    Inoltre non verrebbe intaccata nemmeno la normalizzazione del database, visto che non si sta parlando di dati ridondanti, ma di un altra categoria.
    Che poi, per avere un database veramente normalizzato, alla fine bisognerebbe anche creare una tabella nomi ed una tabella cognomi, visto che, per assurdo, ci fossero 6 figli che frequentano la stessa scuola, ed il padre ex studente, ora fosse insegnate, ci troveremmo di fronte a 7 cognomi ripetuti. Se poi arriva un omonimo dei 7, siamo punto e a capo. Stesso discorso per gli indirizzi e le città. ( tra parentesi trovo utile una tabella città, indirizzo, perché questa è una categoria che veramente, verrebbe ripetuta per centinaia di utenti)
    Comunque, a mio avviso naturalmente, se anche fosse intaccata la normalizzazione, in questo caso la quantità di dati ripetuti sarebbe comunque ininfluente sulle prestazioni del database, visto che tra migliaia di studenti, sicuramente pochi ritornerebbero ad insegnare in quella scuola. Quindi è uno dei casi dove si può violare la regola, in favore di un database più snello e performante.
  • Re: Consiglio gestione tabelle anagrafiche

    Mumble mumble...
    Dati fissi:
    Nome, cognome, data di nascita, codice fiscale, luogo di nascita.
    Dati variabili: indirizzo, qualifica ecc..
    Ergo, ti consiglio la tabella curriculum...
    Magari memorizzi i dati che servono...
    Per la duplicazione dati ha senso solo per risparmiare spazio su server.
    Per l'esempio cliente/fornitore bastano due boolean cliente(y/n) fornitore(y/n). Nel tuo caso non serve, basta movimentare il diario del curriculum formato cosi:
    Id riga, Data, codicefiscale, qualifica(studente/docente), ecc...
    La residenza la metti su una tabella a parte
    Id, codicefiscale, data, indirizzo...
    Poi lavori di relazioni tra tabelle.
  • Re: Consiglio gestione tabelle anagrafiche

    sihsandrea ha scritto:



    Per l'esempio cliente/fornitore bastano due boolean cliente(y/n) fornitore(y/n).
    Su tutte le atre cose, posso anche essere d accordo, anche se per qualsiasi tipo di ricerca si devono sviluppare query con join, anche quando non ci sarebbe bisogno se le anagrafiche fossero distinte.
    Ma sull uso di boolean per determinare la tipologia non sono d accordo, perché viola la normalizzazione.
    Cliente/fornitore, rappresenta la tipologia, quindi
    Ci dovrebbe essere una tabella di servizio distinta, in cui si trovano le varie tipologie, selezionabili modificabili dall utente
    Con il metodo da te proposto, se bisognasse aggiungere altre tipologie, tipo rappresentante, intermediario, etc etc, bisognerebbe ogni volta modificare la struttura delle tabelle e le query.
  • Re: Consiglio gestione tabelle anagrafiche

    fratac ha scritto:


    Ma sull uso di boolean per determinare la tipologia non sono d accordo, perché viola la normalizzazione.
    Cliente/fornitore, rappresenta la tipologia, quindi
    Ci dovrebbe essere una tabella di servizio distinta, in cui si trovano le varie tipologie, selezionabili modificabili dall utente
    Con il metodo da te proposto, se bisognasse aggiungere altre tipologie, tipo rappresentante, intermediario, etc etc, bisognerebbe ogni volta modificare la struttura delle tabelle e le query.
    [/quote]
    Clienti e fornitori appartengono al ciclo attivo e passivo rispettivamente in un'azienda. Ti collega, in altre parole, a fatture emesse e fatture ricevute, il che determina iva a debito o a credito, merci c/vendite o merci c/acquisto... La p.iva o il codice fiscale è lo stesso ma a seconda di come si identifica il soggetto determina un acquisto o una vendita. Il personale, che sia agente o impiegato determina i costi. Un dipendente non può essere cococo e operaio allo stesso tempo. O paghi contributi inps o paghi enasarco o altri enti...
    L'impiegato alimenta il costo a prescindere dal fatturato, un agente varia la paga e i contributi in base al fatturato. Se un agente supera la soglia enasarco, essa non viene più calcolata in fattura. Le fatture relative all'agente determinano la provvigione non la busta paga.
    Comunque, io ho fatto un esempio rispondendo a chi accorpa clienti e fornitori in unica tabella...
    Per i lavoratori si alimenta la tabella "personale". Li puoi distinguere quadri, operai e collaboratori...
    Ma questo va tutto fuori tema... Il post chiede consiglio su un curriculum scolastico o professionale. Quindi nessuna fattura fai ad uno studente e nessuno studente fattura alla scuola...
    Serve un diario sul quale annotare data e condizione. Il giorno 01/01/20 sei studente, il giorno 01/01/22 sei docente o non hai più rapporti con la scuola...
  • Re: Consiglio gestione tabelle anagrafiche

    sihsandrea ha scritto:




    Comunque, io ho fatto un esempio rispondendo a chi accorpa clienti e fornitori in unica tabella...
    Per i lavoratori si alimenta la tabella "personale". Li puoi distinguere quadri, operai e collaboratori...
    Ma questo va tutto fuori tema... Il post chiede consiglio su un curriculum scolastico o professionale. Quindi nessuna fattura fai ad uno studente e nessuno studente fattura alla scuola...
    Serve un diario sul quale annotare data e condizione. Il giorno 01/01/20 sei studente, il giorno 01/01/22 sei docente o non hai più rapporti con la scuola...
    Non voglio fare polemiche ed apro questa parentesi e poi la chiudo immediatamente.
    In realtà non sta chiedendo consigli su curriculum scolastici, ma proprio sulla gestione della scuola (dai voti degli studenti, alle assenze, e dei professori). Questo database (frontend access, su base sql) è svariati mesi che doveva essere nato. Ha riempito tutte le sezione dei vari fourm con le richieste. Nella sezione di access ci ha fatto tondi, sia nelle domande, nelle risposte, e soprattutto con prese di posizione che alla fine finiscono per far innervosire qualche utente. Quindi cambia sezione del forum. Ora è toccata alla sezione progettazione database.
    Comunque io sostengo che le anagrafiche devono essere separate, esattamente come si separano le anagrafiche di fornitori e clienti. Non c'è violazione della normalizzazione ed è tutto più gestibile.
    E visto le competenze che ha dimostrato in fatto di database, tenere separate le cose è la via più semplice, per non imbarcarsi in un ginepraio di query piene di join e di maschere piene di filtri per discernere ad ogni interrogazione del database, gli studenti e gli insegnanti. Mio pensiero personale. Poi ognuno è libero di fare quello che più desidera.
    Tra parentesi, come in tutti gli altri post, non risponderà, non darà informazioni se è riuscito a fare quello che chiede.
    L'unica cosa che farà è di aprire un ulteriore post chiedendo in modo diverso sempre le stesse cose.

    COmunque se da giugno e dopo tutti i consigli che ha ricevuto su come fare, ancora siamo alla tabella Anagrafica, non so cosa pensare.
Devi accedere o registrarti per scrivere nel forum
10 risposte