Progettazione tabelle Chiave primaria ed esterna

di il
14 risposte

Progettazione tabelle Chiave primaria ed esterna

L’obiettivo principale di questo Database è la creazione di un report trimestrale da inviare ai consulenti per i rimborsi delle accise del carburante.
Di seguito lo schema delle tabelle
ANAGRAFICA AUTISTI
ID
Nome
Cognome

POSSESSO
ID
Codice
Descrizione

CLASSE
ID
Classe €

TIPO DI CARBURANTE
ID
Tipo di Carburante

ANAGRAFICA CISTERNE
ID
Cisterna
Località
IDCarburante

RILEVAZIONE KM MENSILE
ID
Mese
IDTarga
Km Mensili

ANAGRAFICA MEZZI
ID
Targa
IDAutista
IDTessera Carburante
IDSocietà - Locatore
IDSocietà - Locatario
IDPossesso
IDClasse
Allegato Carta di circolazione
Allegato Contratto di Noleggio

ANAGRAFICA SOCIETA'
ID
Regione Sociale Società
Indirizzo
Cap
Città
Provincia
Partita Iva
Indirizzo mail
IDTipo (Fornitore/Cliente)

REGISTO FATTURE
ID
Data Fattura
N. Fattura
IDSocietà - Fornitore
IDSocietà - Cliente
Allegato

ANAGRAFICA TESSERE
ID
N. Tessera
Descrizione
IDSocietà - Fornitore
IDSocietà - Cliente
IDTarga
IDAutista
Codice Pin
Data Rilascio
Data Restituzione
Motivo
Massimale Giornaliero
Massimale Mensile
Note

REGISTRO CARBURANTE
ID
Data
IDTarga
IDAutista
IDTessera
Km
Litri
IDCisterna

TIPO SOCIETA'
ID
Tipo società


Nella classe € veicoli è corretto avere un ID come chiave primaria o sarebbe meglio avere solo la Classe € come chiave primaria? Oppure inserire il campo direttamente nell’anagrafica mezzi?
Nell’anagrafica cisterna ho inserito IDCarburante che viene dalla tabella Tipo di carburane è corretto o visto che ogni cisterna ha il suo carburante è meglio mettere tutto in un'unica tabella?
Nell’anagrafica società ho inserito un IDTipo società che dipende dall’omonima tabella, visto che clienti e fornitori sono inseriti in più tabelle, è meglio specificarli in due anagrafiche diverse?
Le IDTarga è presente nelle tabelle Anagrafica tessere e Registro carburante, IDTessera nell’anagrafica mezzi e Registro carburante e IDAutista è presente nelle tabelle anagrafica mezzi, anagrafica tessere e Registro carburante. In teoria ogni mezzo è associato ad una sola tessera ed a un solo autista, ma capita non di rado che un autista con la tessera a lui associata faccia rifornimento ad un mezzo differente, come anche venga effettuato un rifornimento ad un mezzo con la tessera a lui associato da un autista differente. E’ corretta l’impostazione?

Ultima domanda, per la parte tecnica devo aprire un altro post o posso fare qui la domanda?

Grazie

14 Risposte

  • Re: Progettazione tabelle Chiave primaria ed esterna

    "Pare" tu sia stato relativamente chiaro, quasi come piace a me, ma sebbene quando mi trovo davanti a così tante tabelle preferisco scrivere tutto a mano su carta e relazionare di seguito...non riesco a seguirti. Vediamo di correggere qualcosa di formale prima, poi pensiamo alla sostanza.
    1. Abituati a nominare anche i campi chiave primaria ESPLICITAMENTE, quindi IDAutista, IDClasse...
    2. Abituati a nominare le tabelle sempre al PLURALE, quindi Possessi, Classi...
    3. Osservo alcuni campi ripetuti su più tabelle...talvolta ci può stare, ma dietro congrua motivazione. Non credo sia il tuo caso.

    Monster88 ha scritto:


    Nella classe € veicoli è corretto avere un ID come chiave primaria o sarebbe meglio avere solo la Classe € come chiave primaria?
    Se vuoi essere ortodosso fino in fondo è sempre preferibile usare un campo ID. Io, in molti casi, solo quando la tabella è mono-campo, decido che quest'ultimo possa essere la chiave primaria.

    Ti chiederei di riscrivere tutte le tabelle e i campi secondo le indicazioni dei punti 1. e 2.
    Fai attenzione anche al punto 3.
    Poi ne riparliamo.
  • Re: Progettazione tabelle Chiave primaria ed esterna

    Cerco di rispondere ai tuoi quesiti sulla struttura dati.

    Monster88 ha scritto:


    Nella classe € veicoli è corretto avere un ID come chiave primaria o sarebbe meglio avere solo la Classe € come chiave primaria? Oppure inserire il campo direttamente nell'anagrafica mezzi?
    Non descrivi cosa intendi per "classe € veicoli" comunque il concetto da tenere presente è quello di valutare la sua dipendenza funzionale e se la tabella (ANAGRAFICA MEZZI) abbia necessità di una tabella di riferimento (CLASSE), quest'ultima possa contenere l'intero set di valori che possono essere determinati in base all'insieme dei valori noti.

    Monster88 ha scritto:


    Nell’anagrafica cisterna ho inserito IDCarburante che viene dalla tabella Tipo di carburane è corretto o visto che ogni cisterna ha il suo carburante è meglio mettere tutto in un'unica tabella?
    Visto che indichi "che ogni cisterna ha il suo carburante" la soluzione individuata è quella corretta.

    Monster88 ha scritto:


    Nell'anagrafica società ho inserito un IDTipo società che dipende dall'omonima tabella, visto che clienti e fornitori sono inseriti in più tabelle, è meglio specificarli in due anagrafiche diverse?
    Le anagrafiche clienti e fornitori potrebbero essere unite in una unica tabella ma se le se le vuoi gestire separate valuta che siano mutuamente esclusive altrimenti avresti lo stesso soggetto presente in entrambe le tabelle.

    Monster88 ha scritto:


    Le IDTarga è presente nelle tabelle Anagrafica tessere e Registro carburante, IDTessera nell’anagrafica mezzi e Registro carburante e IDAutista è presente nelle tabelle anagrafica mezzi, anagrafica tessere e Registro carburante. In teoria ogni mezzo è associato ad una sola tessera ed a un solo autista, ma capita non di rado che un autista con la tessera a lui associata faccia rifornimento ad un mezzo differente, come anche venga effettuato un rifornimento ad un mezzo con la tessera a lui associato da un autista differente. E’ corretta l’impostazione?
    Se l'autista, con la tessera a lui associata, effettua rifornimento su diversi mezzi, la tabella "REGISTRO CARBURANTE" ha gli attributi necessari (IDTarga, IDAutista, IDTessera) per contraddistinguere ciascuna occorrenza.
    In base a questa considerazione, appare ridondante la tabella "ANAGRAFICA TESSERE" per gli aspetti degli attributi (IDSocietà - Fornitore. IDSocietà - Cliente, IDTarga, IDAutista).

    Monster88 ha scritto:


    Ultima domanda, per la parte tecnica devo aprire un altro post o posso fare qui la domanda?
    Come previsto dal regolamento del forum, va posto un quesito per ogni thread.
  • Re: Progettazione tabelle Chiave primaria ed esterna

    OsvaldoLaviosa ha scritto:


    "Pare" tu sia stato relativamente chiaro, quasi come piace a me, ma sebbene quando mi trovo davanti a così tante tabelle preferisco scrivere tutto a mano su carta e relazionare di seguito...non riesco a seguirti. Vediamo di correggere qualcosa di formale prima, poi pensiamo alla sostanza.
    1. Abituati a nominare anche i campi chiave primaria ESPLICITAMENTE, quindi IDAutista, IDClasse...
    2. Abituati a nominare le tabelle sempre al PLURALE, quindi Possessi, Classi...
    3. Osservo alcuni campi ripetuti su più tabelle...talvolta ci può stare, ma dietro congrua motivazione. Non credo sia il tuo caso.

    Monster88 ha scritto:


    Nella classe € veicoli è corretto avere un ID come chiave primaria o sarebbe meglio avere solo la Classe € come chiave primaria?
    Se vuoi essere ortodosso fino in fondo è sempre preferibile usare un campo ID. Io, in molti casi, solo quando la tabella è mono-campo, decido che quest'ultimo possa essere la chiave primaria.

    Ti chiederei di riscrivere tutte le tabelle e i campi secondo le indicazioni dei punti 1. e 2.
    Fai attenzione anche al punto 3.
    Poi ne riparliamo.
    Grazie mille, seguirò le indicazioni e riposto tutto, magari con una foto delle tabelle su carta e le relative relazioni.
  • Re: Progettazione tabelle Chiave primaria ed esterna

    Monster88 ha scritto:


    Grazie mille, seguirò le indicazioni e riposto tutto, magari con una foto delle tabelle su carta e le relative relazioni.
    No, per carità, non intendevo dovessi farlo tu. Volevo dire che, quando gli utenti ci postano il loro scenario tabelle, è una mia necessità riscrivere tutto su carta. In alternativa alla descrizione testuale, puoi allegare una immagine della Finestra Relazioni.

    Non sottovalutare le osservazioni di willy55.
  • Re: Progettazione tabelle Chiave primaria ed esterna

    willy55 ha scritto:


    Cerco di rispondere ai tuoi quesiti sulla struttura dati.

    Monster88 ha scritto:


    Nella classe € veicoli è corretto avere un ID come chiave primaria o sarebbe meglio avere solo la Classe € come chiave primaria? Oppure inserire il campo direttamente nell'anagrafica mezzi?
    Non descrivi cosa intendi per "classe € veicoli" comunque il concetto da tenere presente è quello di valutare la sua dipendenza funzionale e se la tabella (ANAGRAFICA MEZZI) abbia necessità di una tabella di riferimento (CLASSE), quest'ultima possa contenere l'intero set di valori che possono essere determinati in base all'insieme dei valori noti.

    Monster88 ha scritto:


    Nell’anagrafica cisterna ho inserito IDCarburante che viene dalla tabella Tipo di carburane è corretto o visto che ogni cisterna ha il suo carburante è meglio mettere tutto in un'unica tabella?
    Visto che indichi "che ogni cisterna ha il suo carburante" la soluzione individuata è quella corretta.

    Monster88 ha scritto:


    Nell'anagrafica società ho inserito un IDTipo società che dipende dall'omonima tabella, visto che clienti e fornitori sono inseriti in più tabelle, è meglio specificarli in due anagrafiche diverse?
    Le anagrafiche clienti e fornitori potrebbero essere unite in una unica tabella ma se le se le vuoi gestire separate valuta che siano mutuamente esclusive altrimenti avresti lo stesso soggetto presente in entrambe le tabelle.

    Monster88 ha scritto:


    Le IDTarga è presente nelle tabelle Anagrafica tessere e Registro carburante, IDTessera nell’anagrafica mezzi e Registro carburante e IDAutista è presente nelle tabelle anagrafica mezzi, anagrafica tessere e Registro carburante. In teoria ogni mezzo è associato ad una sola tessera ed a un solo autista, ma capita non di rado che un autista con la tessera a lui associata faccia rifornimento ad un mezzo differente, come anche venga effettuato un rifornimento ad un mezzo con la tessera a lui associato da un autista differente. E’ corretta l’impostazione?
    Se l'autista, con la tessera a lui associata, effettua rifornimento su diversi mezzi, la tabella "REGISTRO CARBURANTE" ha gli attributi necessari (IDTarga, IDAutista, IDTessera) per contraddistinguere ciascuna occorrenza.
    In base a questa considerazione, appare ridondante la tabella "ANAGRAFICA TESSERE" per gli aspetti degli attributi (IDSocietà - Fornitore. IDSocietà - Cliente, IDTarga, IDAutista).

    Monster88 ha scritto:


    Ultima domanda, per la parte tecnica devo aprire un altro post o posso fare qui la domanda?
    Come previsto dal regolamento del forum, va posto un quesito per ogni thread.
    Grazie mille willy55; scusami ma necessito di chiarimenti
    Non descrivi cosa intendi per "classe € veicoli" comunque il concetto da tenere presente è quello di valutare la sua dipendenza funzionale e se la tabella (ANAGRAFICA MEZZI) abbia necessità di una tabella di riferimento (CLASSE), quest'ultima possa contenere l'intero set di valori che possono essere determinati in base all'insieme dei valori noti.
    Per Classe € veicoli intendo la classe ambientale di inquinamento (Euro 6, Euro 5, etc).
    Non mi è chiaro cosa intendi per dipendenza funzionale.
    Il mio ragionamento è stato questo: l'anagrafica mezzi conterrà all'incirca una sessantina di veicoli e ogni veicolo ha una sua classe ambientale che va da Euro 0 a Euro 6 al momento, ma che sicuramente in futuro crescerà, quindi è meglio inserire il dato in una tabella separata con relazione uno a molti o inserire il campo direttamente nel anagrafica mezzi?
    Visto che indichi "che ogni cisterna ha il suo carburante" la soluzione individuata è quella corretta.
    Quale intendi per quella corretta? La tabella Tipi Carburanti che poi si relazione con la tabella Cisterne?
    Le anagrafiche clienti e fornitori potrebbero essere unite in una unica tabella ma se le se le vuoi gestire separate valuta che siano mutuamente esclusive altrimenti avresti lo stesso soggetto presente in entrambe le tabelle.
    Ecco, qui il dubbio è di due tipi: il primo è che ho società che possono essere sia fornitori che clienti e quindi mettendole in un unica tabella ci sarebbero dati ridondanti. Il secondo è che in alcune tabelle, come nell'anagrafica mezzi, ho necessità di avere in molti casi il cliente e il fornitore, creando una tabella unica avrei IDsocietà nella tabella Anagrafica mezzi doppia, questo non crea problemi?
    Se l'autista, con la tessera a lui associata, effettua rifornimento su diversi mezzi, la tabella "REGISTRO CARBURANTE" ha gli attributi necessari (IDTarga, IDAutista, IDTessera) per contraddistinguere ciascuna occorrenza.
    In base a questa considerazione, appare ridondante la tabella "ANAGRAFICA TESSERE" per gli aspetti degli attributi (IDSocietà - Fornitore. IDSocietà - Cliente, IDTarga, IDAutista).
    Per chiarire, nella tabella Anagrafica Tessera, IDSocietà - Fornitore e IDSocietà - Cliente sono rispettivamente il fornitore del carburante e la società a cui verrà intestata la fattura. Pensandoci bene, IDSocietà - Cliente potrebbe essere rimossa in quanto è uguale al cliente del mezzo. Invece per quanto riguarda IDTarga, IDAutista sono ridondanti in quanto la tessera è già associata a mezzo e autista tramite l'anagrafica mezzi, corretto?

    Spero di essere stato più chiaro possibile.

    Effetto le correzioni suggerite da te e OsvaldoLaviosa e riposto, sperando di non fare errori grossolani.

    Intanto grazie mille
  • Re: Progettazione tabelle Chiave primaria ed esterna

    OsvaldoLaviosa ha scritto:


    Monster88 ha scritto:


    Grazie mille, seguirò le indicazioni e riposto tutto, magari con una foto delle tabelle su carta e le relative relazioni.
    No, per carità, non intendevo dovessi farlo tu. Volevo dire che, quando gli utenti ci postano il loro scenario tabelle, è una mia necessità riscrivere tutto su carta. In alternativa alla descrizione testuale, puoi allegare una immagine della Finestra Relazioni.

    Non sottovalutare le osservazioni di willy55.
    Già preso appunti sui tuoi suggerimenti e su quelli di willy55.
    spero entro sera di sistemare il tutto e rimandare per verifica.

    Grazie mille ancora
  • Re: Progettazione tabelle Chiave primaria ed esterna

    Come da indicazioni di OsvaldoLaviosa e willy55 ho fatto le seguenti correzioni:
    - Esplicitato la chiave primaria
    - Rinominato le tabella al plurale

    Visto alcuni punti non ancora chiari ho:
    - lasciato la tabella Classi
    - rimosso la tabella Tipi di società e creato due tabelle differenti, Anagrafica Clienti e Anagrafica Fornitori
    - corretto la denominazione delle chiavi esterne da IDTarga a IDMezzo
    - Nell'Anagrafica Tessere ho lasciato IDFornitore e IDCliente e rimosso IDMezzo e IDAutista in quanto già associati

    In allegato schema delle relazioni
  • Re: Progettazione tabelle Chiave primaria ed esterna

    Per me è arrivato il momento di capire come funziona il tuo ambito di lavoro...perchè non sono un addetto ai tuoi lavori.
    Mie domande:
    A) Tu cosa devi tracciare?
    B) Perchè ci sono così tanti Soggetti: Autisti, Clienti, Fornitori? E perchè non li possiamo accorpare in unica tabella Soggetti? Considera che tutti hanno Denominazione, Indirizzo, Telefono, Cellulare, e-mail...tutti dati omogenei...
    C) A cosa serve la tabella Cisterne?
    D) A cosa serve la tabella Possessi?
    E) Che nesso c'è o ci dovrebbe essere tra Fatture e KmPercorsi (ammesso che ci sia)?
    F) Cosa sono le Tessere?
    G) Un Mezzo può essere guidato da un AutistaX, ma non essere suo: giusto? Per questo ha senso parlare di Possessi?

    Se le mie domande sono "fuori luogo", allora racconta passo passo con un esempio concreto come tu vorresti comportarti nella compilazione di questo database.
  • Re: Progettazione tabelle Chiave primaria ed esterna

    Scusami OsvaldoLaviosa, nel primo post ho tralasciato lo scopo completo del database che qui ti riporto insieme alle risposte delle domande

    Lo scopo del database del progetto è la realizzazione di un report da inviare al consulente per il recupero delle accise sul carburante.
    Più semplicemente l'agenzia delle entrate riconosce per ogni litro di carburante acquistato un tot di € di rimborso che vengono compensate con altre tasse che l'azienda deve versare alla stessa.
    Questo report va prodotto trimestralmente e i dati che ti riporto sotto servono all'agenzia delle entrate per valutare che il mezzo/i per cui si richiede il rimborso accise abbia un consumo consono al veicolo e che il carburante sia stato acquistato realmente.

    Poi ci sono anche degli scopi secondari come il controllo del consumo dei veicoli per esempio

    E' da precisare che dentro il database raccolgo i dati di più società che devono realizzare questo report
    A) Tu cosa devi tracciare?
    Per ogni mese del trimestre e per ogni mezzo devo tracciare:
    - La targa
    - Il possesso (se il veicolo è di proprietà, in leasing, a noleggio, etc)
    - la quantità di litri riforniti per ogni mese del trimestre
    - il totale dei km percorsi per ogni mese del trimestre
    - indicare il numero della fattura/e relativa/e a tale rifornimenti per ogni mese del trimestre
    - il totale dei km percorsi nel trimestre
    - il totale dei litri riforniti nel trimestre
    - i km che il mezzo segna sul contachilometri alla fine del trimestre attuale e di quello precedente
    B) Perchè ci sono così tanti Soggetti: Autisti, Clienti, Fornitori? E perchè non li possiamo accorpare in unica tabella Soggetti? Considera che tutti hanno Denominazione, Indirizzo, Telefono, Cellulare, e-mail...tutti dati omogenei...
    QUESTO E' UN PUNTO IMPORTANTE CHE VORREI CAPIRE

    Ci potrebbe essere una tabella Soggetti che ha un campo che definisce il tipo di soggetto (cliente, fornitore, autista), ma il dubbio poi è di tipo tecnico.
    Nella Anagrafica Mezzi, ogni mezzo deve avere il campo Locatrice e Locatario (fornitore e cliente) in quanto capita spesso che un veicolo in un trimestre possa essere noleggiato ad altre società. Se avessi La tabella Soggetti, nella tabella Anagrafica Mezzi dovrei avere due campi IDSoggetto ma non potrei creare la doppia relazione giusto?

    C) A cosa serve la tabella Cisterne?
    La tabella cisterne serve perchè uno dei fornitori di carburante ha più di una località in cui rifornirsi e più cisterne che hanno differenti carburanti. Questo fornitore mi manda un report giornaliero in cui riporta la data, il n. della tessera, i km che l'autista segna sul self, il litri erogati e il numero identificativo della cisterna, questo numero mi serve per separare il carburante che si può dichiarare per il recupero delle accise dalla AdBlue che è l'additivo che serve per la riduzione dei gas di scarico
    D) A cosa serve la tabella Possessi?
    La tabella possessi serve perchè l'agenzia delle entrate ha stabilito un codice per ogni tipo di possesso e nel report è richiesto il codice specifico
    E) Che nesso c'è o ci dovrebbe essere tra Fatture e KmPercorsi (ammesso che ci sia)?
    L'ho già scritto in testata
    F) Cosa sono le Tessere?
    Le tessere sono in parole povere carte carburante con cui un autista può rifornire il veicolo senza dover pagare, e il fornitore emette la fattura alla fine del mese per il carburante erogato.
    Anche questo è un punto richiesto dall'agenzia delle entrate, la fattura deve riportare il numero di tessera e la targa associata
    G) Un Mezzo può essere guidato da un AutistaX, ma non essere suo: giusto? Per questo ha senso parlare di Possessi?
    La tabella possessi è fatta per quanto riportato sopra. Ad ogni autista generalmente è assegnato un mezzo, a volte capita che a causa di manutenzioni, ferie o altro un autista debba utilizzare un mezzo diverso

    Spero di aver fatto un po più di chiarezza
  • Re: Progettazione tabelle Chiave primaria ed esterna

    Ho ancora le mie seguenti confusioni sulla tua azienda.
    A) La tua azienda si occupa di noleggi mezzi.
    B) Tu sei un commercialista che traccia tutti i noleggi di molte Società di noleggi mezzi.

    Se sono fuori strada, ho bisogno di una "narrazione" di qualche caso tipico con nomi propri inventati.
  • Re: Progettazione tabelle Chiave primaria ed esterna

    Le mie aziende si occupano di trasporti conto terzi, e collaboro con altre per abbassare il costo dei veicoli noleggiando quando serve il veicolo
    Il report è per il commercialista
    Il database ha lo scopo di farmi risparmiare tempo sulla redazione
  • Re: Progettazione tabelle Chiave primaria ed esterna

    Domanda:
    • il Mezzo nel caso non sia di proprietà deve indichiare a chi appartiene ?
    comunque secondo me, da quanto ho capito la struttura potrebbe essere la seguente:
    Relazioni.png
    Relazioni.png

    e non c'è necessità di creare una tabella per i resoconti mensili, questi potranno essere creati tramite query.
  • Re: Progettazione tabelle Chiave primaria ed esterna

    Grazie Stifone per la tua risposta.
    Si, devo indicare a chi appartiene il mezzo per allegare il contratto di noleggio.
    In merito alla tabella resoconti mensili, serve per registrare i km che il veicolo segna sul contachilometri l'ultimo giorno del mese in quanto il mezzo potrebbe effettuare rifornimento un paio di giorni prima o dopo questo.
    Tieni conto che stiamo parlando di camion che percorrono mediamente tra i 200 e 600 km al giorno e hanno un consumo medio di 3 km al litro quindi lo scostamento potrebbe essere importante.
    Un ultima cortesia, l'immagine delle relazioni è molto piccola e risulta sfuocata e illeggibile, potresti postarne una più grande?
    Grazie
  • Re: Progettazione tabelle Chiave primaria ed esterna

    Il file, con una risoluzione maggiore, lo puoi vedere qui https://www.dropbox.com/s/ycu53skh2xlqmb0/Relazioni.png?dl=0
Devi accedere o registrarti per scrivere nel forum
14 risposte