Database calciatori

di
Anonimizzato11549
il
8 risposte

Database calciatori

Sto creando con access un database sulle carriere dei calciatori. L'ho strutturato in maniera da avere una tabella con i dati anagrafici (nome-cognome-data di nascita-luogo di nascita) e altre tabelle con dati relativi alle diverse stagioni, quindi una tabella per 2006-07 (presenze-reti), una per 2007-08 (presenze-reti) e così via. Voglio creare una query che mi dia la lista dei nomi contenuti della tabella "Anagrafica" e peschi poi per ciascun nome i dati dalle tabelle delle singole stagioni. Il problema è che se in una particolare tabella-stagione il nome non compare, nella query non camparirà anche se quello stesso nome compare in altre tabelle di altre stagioni. Come faccio ad avere nella query il nome con valori nulli per quella stagione per cui non ho dati nella tabella relativa?

8 Risposte

  • Re: Database calciatori

    JayJayOkocha ha scritto:


    altre tabelle con dati relativi alle diverse stagioni, quindi una tabella per 2006-07 (presenze-reti), una per 2007-08 (presenze-reti) e così via.
    Attento, stai commettendo un errore in partenza. Non è necessario creare molte tabelle per le diverse stagioni. Basta averne una sola e creare una campo Stagione che fa da discriminante. Opportune query possono stabilire se tu vuoi sapere tutti i dati di Antonio Cassano, solo di una stagione oppure di più stagioni.

    JayJayOkocha ha scritto:


    Come faccio ad avere nella query il nome con valori nulli per quella stagione per cui non ho dati nella tabella relativa?
    Questa domanda, dopo la nuova strutturazione, va da sè. Selezionando i dati di Antonio Cassano, troverai che non sarà presente nella stagione XXX perchè ad es. era infortunato.
  • Re: Database calciatori

    Tu dici che è meglio creare una sola tabella aggiungendo un campo stagione?
  • Re: Database calciatori

    Non è una sua invenzione... è una LOGICA che viene applicata come STANDARD usando i criteri di NORMALIZZAZIONE dei Database...

    Se li leggi, non potrai che convenire che il suggerimento di Osvaldolaviosa è da MANUALE.
  • Re: Database calciatori

    JayJayOkocha ha scritto:


    Tu dici che è meglio creare una sola tabella aggiungendo un campo stagione?
    Non vorrei essere frainteso. La tabella Anagrafica resta così come è. Poi hai bisogno di una sola tabella figlia (Carriere) che abbia in più il campo Stagione.
  • Re: Database calciatori

    Ok per la tabella anagrafica più la tabella carriera. Vorrei che la query che mi collega il nome da "anagrafica" a "carriere" mi restituisca un certo valore se non trova il nome del calciatore in carriere ma non so come specificarlo nei criteri. Per esempio vorrei che se in una stagione, ad esempio 2007-08, quel calciatore non ha presenze la query mi restituisca "infortunato" nel campo presenze. E' possibile?
  • Re: Database calciatori

    È possibile, ma allora devi fare in modo di contabilizzare l'assenza in modo esplicito. In pratica dovresti avere un campo Presente, mi immagino del tipo Sì/No. Questo significa che per ogni partita, per ogni calciatore, dovrai sempre raccontare qualcosa di lui, sia se è Presente o meno, sia se ha segnato reti ecc...
  • Re: Database calciatori

    HO un altro problema che vi esplicito usando un esempio. In una tabella ho una lista di clienti con i loro dati anagrafici. Collegate a questa tabella ce ne sono altre che contengono gli ordini che ciascun cliente ha fatto in un anno. Ogni tabella si riferisce ad un anno. In ognuna di queste tabella il nome di un cliente è ripetuto più volte perchè in un anno può aver fatto più ordini. Voglio una query che mi dia per ogni cliente la lista degli ordini nel corso degli anni (quindi che attinga a diverse tabelle).

    Ad esempio il cliente X nel 2006 ha fatto l'ordine 1,2,3 poi nel 2007 ha fatto l'ordine 1 e 2.

    Come posso strutturare la query?
  • Re: Database calciatori

    Ciao premesso che io in questo caso farei una sola tabella ORDINE con attributo aggiuntivo "Anno".
    Comunque la scelta progettuale sta a te.
    Con la tua scelta devi necessariamente fare N query quante sono le tabelle ORDINI che intendi memorizzare .

    Detto cio' , utilizzando la tua scelta progettuale e supponendo che : La tabella CLIENTE abbia almeno attributo "Nome". La tabella ad esempio ORDINE2006 avra almeno come campi "NomeCli" e "NomeOrdine".

    La query per risolvere il tuo problema dovrebbe avere una struttura SQL di questo genere:

    SELECT O.NOMEORDINE
    FROM ORDINE2006 O JOIN CLIENTE C ON(O.NOMECLI=C.NOME)

    Questa query fondamentalmente ti restituisce i nomi degli ordini che un cliente ha fatto nel 2006.
    Essendoci il join ti fara vedere solo gli ordini che sono stati effettuati da clienti effettivamente presenti nella tabella CLIENTE.

    Poiche la tua scelta e' stata di avere piu' tabelle per ordini, dovrai ripetere tale query per ogni tabella di ORDINI.

    La query scritta sopra e' scritta in sql standard. In access si utilizza Oracle se non sbaglio quindi dovrai avere delle piccole accortezze come quella di usare INNER JOIN al posto del semplice JOIN.

    Tuttavia access è un DBMS molto potente e che quindi ti consente di scrivere query in modalita struttura (non usare struttura guidata perche' limita le tue potenzialita) in pochi attimi avrai la tua query mettendo in join le 2 tabelle.
Devi accedere o registrarti per scrivere nel forum
8 risposte