Progettazione Database: quantità delle tabelle

di il
4 risposte

Progettazione Database: quantità delle tabelle

Buongiorno a tutti,
è la prima discussione che apro, ma vi seguo da un pò di tempo e colgo l'occasione per farvi i complimenti per il forum, che è davvero bello e utile.
Avrei un problema (più che problema è una discusione aperta con un mio collega di lavoro) sull'impostazione della struttura di un database che devo realizzare.
Entro di più nei dettagli per spiegarmi meglio.
Mi occupo di gestione della manutenzione di macchinari industriali "speciali" che richiedono manutenzione periodica (escludiamo da subito la manutenzione a seguito di guasto). Proprio come avviene con un automobile, ogni tot periodo di tempo di attività deve essere svolta una manutenzione con, in funzione della cadenza di manutenzione, la possibilità di sostituire dei componenti.
Il mio ruolo consiste nel creare un database nel quale vengano riportate tutte le cadenze di ispezione, per ogni cadenza descrivere le attività da eseguire, le attrezzature necessarie per la sicurezza e per la manutenzione, le parti di ricambio necessarie.
Il Database che era stato creato prima che iniziassi a prendere in mano io la situazione consisteva:
- una grande tabella importata all'interno di access da un foglio excel (contiene all'incirca 8000 righe), che conteneva le cadenze manutentive e la descrizione delle manutenzioni
- una tabella importata all'interno di access da un foglio excel che conteneva le attrezzature per le varie manutenzioni (all'incirca 2000 righe)
- una tabella importata all'interno di access da un foglio excel che conteneva le parti di ricambio per le varie manutenzioni (all'incirca 2000 righe).
da queste tre tabelle, all'interno di access, venivano create altre tabelle, più compatte che in qualche modo raggruppavano meglio i dati (non ho capito come abbiano fatto perchè i passaggi erano veramente complicati e a volte anche aasurdi!). Queste ultime tabelle poi venivano usate come base per strutturare le query di interrogazione ed avere così un dettaglio della manutenzione ad una determinata cadenza con relativo dettaglio delle attrezzature e ricambi.
Ripeto quando ho iniziato a mettere mano io a questo database era parecchio incasinato tanto che non esisteva neanche una chiave primaria, non esisteva un indicizzazione che aiutasse nella ricerca (quando si faceva una richiesta di dettaglio di manutenzione ci voleva anche un quarto d'ora per avere risposta da access).
Io diversamente ho iniziato a filtrare i dati dalle tre tabelle di partenza lavorandole su excel e creando tante tabelle ma con i dati essenziali. Mi spiego meglio
- ho preso la tabella delle cadenze manutentive e delle descrizioni delle manutenzioni e l'ho suddivisa in due tabelle: una tabella contenente le cadenze manutentive a cui ho assegnato un codice univoco ad ogni cadenza manutentiva, e una tabella contenente la descrizione della manutenzione a cui ho assegnato un codice univoco ad ogni manutenzione. così facendo ho ridotto la dimensione della tabella da (8000) righe, perchè nelle mie due tabelle non avrò mai una cadenza manutentiva che si ripete e non avrò mai una descrizione di manutenzione che si ripete.
Queste due tabelle le ho collegate con relazioni molti a molti mediante una tabella di appoggio (molte cadenze di manutenzioni possono avere la stessa manutenzione, ma anche una cadenza di manutenzione può avere diverse descrizioni di manutenzione). Queste tabelle sono entrambe con una chiave primaria indicizzata.
- analogo discorso ho fatto per le due tabelle delle attrezzature e delle parti di ricambio; creando delle tabelle dove vengono riportate solamente una volta al loro interno le attrezzature con un codice univoco (chiave primaria). Lo stesso per le parti di ricambio. Queste ultime due tabelle vengono collegate poi alla descrizione di manutenzione con relazioni molti a molti mediante tabelle di appoggio.

Il problema è questo, il mio database è più veloce e (penso anche più affidabile) di quello creato in precedenza, ma il mio collega sostiene che sia meglio gestire all'interno di access tre grosse tabelle, suddividerle e fare le query per il "filtraggio" dei dati (come sostanzialmente ha fatto lui creando però circa 30 query), mentre io sostengo che sia meglio suddividere già le tre tabelle grosse sfruttando il vba di excel e importarle all'interno di access, dargli delle relazioni, delle chiavi primarie e se serve delle indicizzazioni, così da rendere la ricerca semplice ed efficente e soprattutto sicura.
Ora io non sono proprio un grande esperto di access e di database, ma penso che la mia sia la soluzione migliore.
Chiedo dunque a voi un parere: meglio sfruttare tabelle con un enormità di dati, oppure gestire tutto con tante tabelle ma più compatte?


Le tabelle che ho sviluppato io hanno questa struttura:
Tabella cadenze manutenzioni:
- id cadenza (chiave primaria)
- cadenza manutenzione in gg o mesi o anni
Tabella descrizione manutenzione
- id descrizione manutenzione (chiave primaria)
- descrizione manutenzione
Tabella di colegamento tra le due
-id cadenza
- id descrizione manutenzione
Analoga struttura per le altre tabelle delle attrezzature e dei ricambi.
Se ho dimenticato qualcosa (può anche essere dato che le cose sono tante) chiedete pure.
Grazie mille a tutti

4 Risposte

  • Re: Progettazione Database: quantità delle tabelle

    Benvenuto nel forum.
    Intanto direi di dare un'occhiata anche a questa discussione che sto seguendo nelle stesse ore:
    https://www.iprogrammatori.it/forum-programmazione/progettazione-database/database-per-manutenzioni-t23363.html
    mi sembrano ci siano alcuni punti in comune.

    Sicuramente quando entrante nella logica Access, Excel dovete SCORDARVELO. I database vantano la caratteristica di poter RELAZIONARE tutto in più tabelle con valori OMOGENEI, con vantaggi di logica, efficienza e ovviamente velocità (quindi 1 a 0 per te rispetto al tuo collega).
    La descrizione dell'intero scenario è piuttosto complessa, quasi quanto il database su citato. Vorrei farvi notare di non confondere le tabelle con le query. Secondo me il fatto che UN QUALCOSA (Macchinario) ha bisogno di MANUTENZIONE PERIODICA non implica necessariamente il rispetto di tali termini a livello tabellare. È giusto indicare da qualche parte tali scadenze. Opportune query devono indagare su DataInstallazione e DataCorrente e verificare il tempo previsto di manutenzione del MacchinarioX. In base a tale verifica, si può pensare di progettare qualche FinestraMessaggio (MsgBox) che avvisa di tutti i Macchinari che hanno bisogno di manutenzione. Dopo di che, solo dopo avvenuta manutenzione, occorre aggiornare una apposita tabella Manutenzioni e la Data indicata diventa un nuovo punto di riferimento per la query precedente.
    Ho scritto tutto in termini logici e teorici. Per i dettagli tecnici ho bisogno di cogliere meglio il vostro campo professionale.
  • Re: Progettazione Database: quantità delle tabelle

    Grazie della risposta e per avermi segnalato la discussione. La seguirò sicuramente.
    Per quanto riguarda il mio problema, il fatto che io mi appoggi su excel prima di lavorare con access è dovuto al fatto che purtroppo la mole di dati di cui ho bisogno non sempre è disponibile in una formattazione tale per cui possa gestirla fin da subito con access.
    I dati che io utilizzo non arrivano direttamente dal mio ufficio, ma presi da un software aziendale gestito da un altro ufficio il cui formato principale è il pdf o html per la visione mediante browser. Riusciamo a ottenere una conversione in un formato excel che però comporta una perdita di formattazione. Ho programmato una macro excel apposita che ci permette di portare i dati in un formato che va bene con le nostre esigenze. Da qui (e dalla mia poca esperienza col vba di access) nasce il fatto di aver fatto la creazione delle tabelle su excel e poi averle importate in access.
    Il mio intento è però quello di andare verso il rpogressivo abbandonò di excel, per questo database, e l'utilizzo totale di access per la modifica futura dei dati, il loro aggiornamento.
    Rimango comunque aperto ad eventuali consigli e critiche che possano aiutarmi a imparare di più su questa materia molto interessante.
    Grazie mille di nuovo
    Buona serata a tutti
  • Re: Progettazione Database: quantità delle tabelle

    Abbastanza simili il mio e il tuo DB anche se in settori diversi..
    Tabella cadenze manutenzioni:
    - id cadenza (chiave primaria)
    - cadenza manutenzione in gg o mesi o anni
    Tabella descrizione manutenzione
    - id descrizione manutenzione (chiave primaria)
    - descrizione manutenzione
    Forse non ho capito bene, ma come fai a non legare la frequenza/cadenza alla manutenzione nella stessa tabella? Per intenderci, una certa manutenzione (pe lubrificazione organi meccanici) dovrà essere eseguita ogni certo periodo di tempo (pe annualmente).
    A questo punto dovresti avere la tabella manutenzioni:
    Manutenzione: descrizione attività da eseguire (lubrificazione organi meccanici);
    Frequenza: ogni quanto deve essere fatta (annuale);
    Tipo di macchinario: potresti identificare con una tipologia tutti i macchinari che necessitano di quella manutenzione;
    Poi dovresti avere la tabella dei macchinari che se identificati per tipologia potresti associarli alla manutenzione da eseguire (frequenza compresa) attraverso una semplice query.
    Da qui poi puoi aggiungere le tabelle delle parti di ricambio necessarie e delle attrezzature che contengono sempre un campo come la tipologia che le possa legare alle altre tabelle.
    Questo è quello che farei io e che ho fatto con il mio DB, considera che capisco molto più di manutenzione che di Database...
    Se non ho frainteso credo anche di avere tradotto quello che suggerisce Osvaldo... anche se al posto di una msgbox io sto usando un report (l'idea della box però mi piace un sacco!).
  • Re: Progettazione Database: quantità delle tabelle

    ruud.crews ha scritto:


    Grazie della risposta e per avermi segnalato la discussione. La seguirò sicuramente.
    Per quanto riguarda il mio problema, il fatto che io mi appoggi su excel prima di lavorare con access è dovuto al fatto che purtroppo la mole di dati di cui ho bisogno non sempre è disponibile in una formattazione tale per cui possa gestirla fin da subito con access.
    I dati che io utilizzo non arrivano direttamente dal mio ufficio, ma presi da un software aziendale gestito da un altro ufficio il cui formato principale è il pdf o html per la visione mediante browser. Riusciamo a ottenere una conversione in un formato excel che però comporta una perdita di formattazione. Ho programmato una macro excel apposita che ci permette di portare i dati in un formato che va bene con le nostre esigenze. Da qui (e dalla mia poca esperienza col vba di access) nasce il fatto di aver fatto la creazione delle tabelle su excel e poi averle importate in access.
    Il mio intento è però quello di andare verso il rpogressivo abbandonò di excel, per questo database, e l'utilizzo totale di access per la modifica futura dei dati, il loro aggiornamento.
    Rimango comunque aperto ad eventuali consigli e critiche che possano aiutarmi a imparare di più su questa materia molto interessante.
    Grazie mille di nuovo
    Buona serata a tutti
    Questo è un problema assai serio. Altri utenti hanno provato a chiedere informazioni similari in passato, anche molto più semplificate e ti assicuro che non è affatto una barzelletta far rimbalzare tutti quei dati da un'applicazione a un'altra. Occorre un'alta conoscenza di codice VBA e tanto altro ancora. Da questo punto di vista io mi fermo e non sono in grado di darti una mano.
    Il mio contributo in questa sezione può essere utile solo nel riuscire a individuare il corretto scenario di tabelle per il tuo database. Per me stai facendo bene a progettarlo...in un altro thread (che potresti proporre direttamente nella sezione Access) si può discutere nei minimi dettagli di quello che hai descritto sopra.

    cridema ha scritto:


    Forse non ho capito bene, ma come fai a non legare la frequenza/cadenza alla manutenzione nella stessa tabella? Per intenderci, una certa manutenzione (pe lubrificazione organi meccanici) dovrà essere eseguita ogni certo periodo di tempo (pe annualmente).
    A questo punto dovresti avere la tabella manutenzioni:
    Manutenzione: descrizione attività da eseguire (lubrificazione organi meccanici);
    Frequenza: ogni quanto deve essere fatta (annuale);
    Tipo di macchinario: potresti identificare con una tipologia tutti i macchinari che necessitano di quella manutenzione;
    In verità non ho affatto guardato queste tabelle. Sicuramente sono ancora poche. Preferisco anche qui, come nell'altro thread, di essere raccontata la vita aziendale...ossia:
    - Avete Clienti? Direi di sì, quindi una tabella Clienti.
    - Sicuramente una tabella Macchinari
    - Ogni Macchinario avrà una serie di Componenti....qui ho bisogno di sapere se vale la pena di contabilizzare i singoli Componenti oppure bastano solo delle semplici manutenzioni pediodiche.
    Puoi raccontarmi cosa succede dopo che il MacchinarioX (indica il Nome con la Marca e il Modello) va nella mani del Cliente Rossi Mario?
Devi accedere o registrarti per scrivere nel forum
4 risposte