Aiuto nella creazione di un database

di il
15 risposte

Aiuto nella creazione di un database

Salve a tutti utenti:)
Dovrei creare un database per l'attività di un mio amico ma non so esattamente come strutturarlo.
Lui ha un negozio dove vende e affitta del materiale per atre aziende.
Il database da che lui vorrebbe dovrebbe funzionare nel seguente modo: può afittare o vendere prodotti solo se il cliente è munito di tessera (data ad una registrazione precedente), deve poter controllare cosa c'è in magazzino, deve ottenere un report con le vendite e uno con gli affitti in corso, deve poter vedere un numero variabile di prodotti meno affittati, deve visualizzare in una query dei prodotti affittati da più di 10 giorni, deve poter calcolare cosa spende un cliente (somma di tutti i pagamenti effettuati), il numero dei prodotti affittati dal cliente negli anni ed altre funzioni che mi deve ancora specificare.

Ovviamente ogni prodotto ha il suo fornitore. Access lo so usare discretamente e non è la prima volta che mi viene chiesto di creare un database ma in questo caso sono un po in crisi per il numero di tabelle richieste e le relazioni che ci devono essere (più che altro non so come effettuare correttamente le relazioni)

Spero che mi possiate aiutare, vi ringrazio in anticipo:)

15 Risposte

  • Re: Aiuto nella creazione di un database

    Stai chiedendo una cosa molto GROSSA da affrontare in un Forum partendo da ZERO...!
    Non credo sia possibile affrontarlo in questo modo, ingegnerizzare bene un DB è una cosa che richiede conoscenza del lavoro, conoscenza del mezzo e tempo.

    Se vuoi provare a pensarci sopra ed iniziare a sviluppare proponendo le tue idee e/o le tue perplessità magari riusciamo a dare un piccolo contributo.
  • Re: Aiuto nella creazione di un database

    Forse mi sono spiegato male io.
    più o meno so come creare il database, infatti ho creato le tabelle con i relativi attributi (tabelle: magazzino, clienti, affitti, vendite, fornitori) il problema che per ora mi blocca sono le relazioni tra le tabelle.
    Sicuramente devo relazionare il codice fornitore della tabella magazzino con il codice fornitore (chiave primaria) della tabella fornitori.
    poi mi blocco perchè, secondo la mia logica (evidetemente sbagliata), mi verrebbe da collegare il codice del prodotto sia nella tabella affitti che vendite (cosa che non funziona) e stesso ragionamento lo avevo fatto per il cliente.
    In realtà su google avevo trovato un progetto simile con qesto tipo di relazione ma scaricato il file access non funziona.

    Spero di essermi spiegato meglio
  • Re: Aiuto nella creazione di un database

    Concordo con @Alex quando dice che hai chiesto una cosa un po' grossa, dando pochi indizi "tecnici" affinchè gli altri utenti possano capire a pieno dove sta il tuo problema. Proviamo a procedere passo passo, perchè è così che si fa "sempre".
    1. Dovresti elencare tutti i campi di tutte le tue tabelle, specificandone il tipo almeno per quelli più significativi. Indica pure tutte le chiavi primarie.
    2. Secondo me Vendite e Affitti potrebbero essere una sola tabella perchè "tutto sommato" parlando lo stesso linguaggio ossia dentro vorresti elencare i Prodotti associati ai Clienti. Ci sarebbe solo da aggiungere un campo che discrimina se si tratta di Vendita oppure Affitto.
    3. La tabella Magazzino non l'ho capita...dovremmo chiarirci in base al punto 1.
    4. Le query sono un passo successivo
    5. Lascia perdere un eventuale progetto che avresti visto su Google. È molto più importante analizare il TUO PROGETTO e come intendi svilupparlo.
  • Re: Aiuto nella creazione di un database

    Allora cominciamo...
    Tabella "Magazzino":
    -ID_Prodotto: chiave primaria tipo numerico
    -Nome_Prodotto: tipo stringa
    -ID_Fornitore: tipo numerico
    -Data_Produzione: tipo data/ora

    Tabella "Fornitori":
    -ID_Fornitore: chiave primaria tipo numerico
    -Nome_Fornitore: tipo stringa
    -P_IVA: tipo numerico
    -Indirizzo: tipo stringa
    -Telefono: tipo stringa
    -Varie

    Tabella "Clienti"
    -ID_Cliente: chiave primaria tipo numerico
    -N_Tessere: tipo stringa
    -Nome: tipo stringa
    -Cognome: tipo stringa
    -Varie

    Tabella "Prestiti":
    -ID_Prodotto: tipo numerico
    -ID_Cliente: tipo numerico
    -N_Tessera: tipo stringa

    Tabella "Vendite":
    -ID_Prodotto: tipo numerico
    -ID_Cliente: tipo numerico
    -N_Tessera: tipo stringa
    -Data_Prestito: tipo numerico

    e poi, visto che il cliente deve possedere una tessera, pensavo di fare anche la tabella "Tessere":
    -N_Tessera: chiave primaria tipo stringa
    -ID_Cliente: tipo numerico


    Spero che queste indicazioni vi possano essere utili per aiutarmi con il mio casino
  • Re: Aiuto nella creazione di un database

    E questo cosa c'entra?

    Visual Basic e Access - Piccolo progetto - Visual Basic Tips and Tricks - Forum - .NET Framework - Windows Forms
    http://www.visual-basic.it/Forum/tabid/151/aft/42057/Default.aspx#.VKG2j7D8IA
  • Re: Aiuto nella creazione di un database

    gibra ha scritto:


    E questo cosa c'entra?

    Visual Basic e Access - Piccolo progetto - Visual Basic Tips and Tricks - Forum - .NET Framework - Windows Forms
    http://www.visual-basic.it/Forum/tabid/151/aft/42057/Default.aspx#.VKG2j7D8IA
    Scusa mi spieghi cosa centra quel link che hai inserito?
  • Re: Aiuto nella creazione di un database

    La tabella Magazzino potevi nominarla tranquillamente Prodotti (così si usa di solito)...ma non sarebbe rilevante.
    Tutti i campi chiave primaria ti consiglio di usare tipo Contatore (o Numerazione automatica).
    Il campo P_IVA dovrebbe essere stringa. È come un numero telefonico (anch'esso giustamente stringa).
    Ribadisco che Vendite e Prestiti potrebbero essere in una sola tabella Operazioni con l'aggiunta di un campo di discriminazione (Vendita o Prestito).
    Non è chiaro se un Cliente può avere molti N_Tessera. Se è vero ha senso la tabella Tessere. Se è falso io includerei un campo N_Tessera direttamente in tabella Clienti.
    È vero che la tabella Operazioni non necessita di una chiave primaria su un solo campo. Io però sono dell'avviso di metterla sempre (quindi ID_Operazione)...è una mia paranoica formamentis...tu scegli come meglio credi.
    Relazioni:
    Fornitori.ID_Fornitore uno-a-molti con Prodotti.ID_Fornitore
    Prodotti.ID_Prodotto uno-a-molti con Operazioni.ID_Prodotto
    Clienti.ID_Cliente uno-a-molti con Operazioni.ID_Cliente
    Quando crei le relazioni abbi cura di mettere sempre la spunta su "Applica integrità referenziale".

    Penso vada bene così...non conosciamo come avviene la provenienza dei Prodotti. La tua relazione può essere giusta, ma esistono anche casi in cui è vero che un Fornitore eroga molti Prodotti, ma anche uno stesso Prodotto potrebbe essere fornito da molti Fornitori. In questo caso Prodotti e Fornitori sono in relazione molti-a-molti.
  • Re: Aiuto nella creazione di un database

    Grazie OsvaldoLaviosa forse ho capito... Ormai ho spento il PC ma appena riesco provo subito:)
  • Re: Aiuto nella creazione di un database

    Ho seguito il tuo consiglio è funziona molto bene, mi rimane ancora un problema da risolvere: come faccio nella tabella Operazioni e dire che il cliente può efettuare l'operazone solo se in Clienti.N_Tessera è presente un valore?
    E' fattibile?
  • Re: Aiuto nella creazione di un database

    Mate13 ha scritto:


    gibra ha scritto:


    E questo cosa c'entra?

    Visual Basic e Access - Piccolo progetto - Visual Basic Tips and Tricks - Forum - .NET Framework - Windows Forms
    http://www.visual-basic.it/Forum/tabid/151/aft/42057/Default.aspx#.VKG2j7D8IA
    Scusa mi spieghi cosa centra quel link che hai inserito?
    Perché a me pare che la discussione sia la stessa, o sbaglio?
  • Re: Aiuto nella creazione di un database

    OsvaldoLaviosa ha scritto:


    La tabella Magazzino potevi nominarla tranquillamente Prodotti (così si usa di solito)...ma non sarebbe rilevante.
    Direi che invece è rilevante: il Magazzino è una cosa, i Prodotti (anche se io preferisco più genericamente chiamarli Articoli) sono un'altra.

    OsvaldoLaviosa ha scritto:


    Ribadisco che Vendite e Prestiti potrebbero essere in una sola tabella Operazioni con l'aggiunta di un campo di discriminazione (Vendita o Prestito).
    Non è detto, un Prestito dovrebbe avere dei campi (es. DataInizio, Durata, ...) che non hanno nulla a che vedere con una Vendita. Bisogna analizzare bene come devono essere gestite entrambe, e quali campi hanno in comune e quali no.

    OsvaldoLaviosa ha scritto:


    Non è chiaro se un Cliente può avere molti N_Tessera. Se è vero ha senso la tabella Tessere. Se è falso io includerei un campo N_Tessera direttamente in tabella Clienti.
    Anche qui la risposta è NI.
    Perché la Tessera potrebbe avere dei campi propri come Numero, DataEmissione, Datascadenza, ... Inoltre si può ipotizzare che in futuro si possano creare tessere di tipi differenti: scontate, promozionali, ricaricabili.
  • Re: Aiuto nella creazione di un database

    C'entra eccome perché qui il crossposting é vietato
  • Re: Aiuto nella creazione di un database

    Mate13 ha scritto:


    come faccio nella tabella Operazioni e dire che il cliente può efettuare l'operazone solo se in Clienti.N_Tessera è presente un valore?
    Mi stai facendo capire che hai Clienti senza N_Tessera...mi suona un po' anomalo. Comprendo che probabilmente tu hai già inserito molti dati e, avendo commesso errori qua e là, ora ti ritrovi in questa situazione. Per me l'assegnazione di una N_Tessera dovrebbe essere un valore da assegnare sempre ogni volta che inserisci un nuovo Cliente.
    La tua domanda non è assurda, ma direi che ti serve una macro o codice VBA che gestisca questa CONDIZIONE...ma mi sembra che stiamo parlando di concetti di Access molto più elevati, a mio parere lontani dalla fase di progettazione iniziale.
  • Re: Aiuto nella creazione di un database

    OsvaldoLaviosa ha scritto:


    Mi stai facendo capire che hai Clienti senza N_Tessera...mi suona un po' anomalo. Comprendo che probabilmente tu hai già inserito molti dati e, avendo commesso errori qua e là, ora ti ritrovi in questa situazione. Per me l'assegnazione di una N_Tessera dovrebbe essere un valore da assegnare sempre ogni volta che inserisci un nuovo Cliente.
    In realtà non ho inserito ancora nessun dato per mia fortuna, comunque alla fine ho creato una nuova tabella nella quale gestisco le tessere perché è permesso il possedimenti di più di una tessera (ognuna delle quali permette sconti diversi).

    OsvaldoLaviosa ha scritto:


    La tua domanda non è assurda, ma direi che ti serve una macro o codice VBA che gestisca questa CONDIZIONE...ma mi sembra che stiamo parlando di concetti di Access molto più elevati, a mio parere lontani dalla fase di progettazione iniziale.
    Purtroppo per me sono molto elevati, infatti non conosco il VBA (e nemmeno in vb.net) e mi devo arrangiare solo con access. comunque alla fine ho ottenuto un risultato decente e sembra anche funzionare.

    Quasi completate le tabelle ho cominciato con l'interfaccia grafica (ovviamente usando le maschere) e anche li cominciano a sorgere alcuni problemi.
    Ho creato una Query che mi visualizzi tutti i prodotti venduti (ID_Cliente, ID_Prodotto e Data_Operazone) e in una maschera con una casella di riepilogo visualizzo i dati della query, ora se volessi visualizzare in un'altra maschera la scheda completa del cliente che seleziono (ID_Cliente) dalla casella di riepilogo come devo fare? Esiste un modo?

    Mi spiego meglio che forse non ho scritto chiaro, nella casella di riepilogo ho la lista dei prodotti venduti con ID_Cliente, ID_Prodotto e Data_Operazione e vorrei cliccando un bottone all'interno della maschera, visualizzare in un'altra maschera la scheda completa del cliente.
Devi accedere o registrarti per scrivere nel forum
15 risposte