Problema Java, Postgres e codifica delle associazioni

di il
4 risposte

Problema Java, Postgres e codifica delle associazioni

Salve sto lavorando ad un progetto universitario che consiste nello sviluppo di un'applicazione gestionale dotata di interfaccia grafica e connessa ad un database dal quale vengono prese le informazioi necessarie o inserite delle nuove.
Il database, implementato in PostgresSQL, si basa su un determinato class diagram che si potrebbe dire in comune, ovviamente, sia per Java che per il db. Il problema è che mentre nel database sono state usate in alcune tabelle delle chiavi surrogate (ossia quelle chiavi primarie create ad hoc quando è difficile trovare chiavi candidate con gli attributi già in nostro possesso), come ad esempio "codiceQualcosa", in Java il discorso cambia: il professore infatti ci ha spiegato durante il corso di programmazione ad oggetti che non ha senso portare questi codici creati nei database nelle classi Java, in quanto ogni oggetto è distinto già univocamente dal suo indirizzo di memoria e chiaramente in Java non si usano chiavi primarie e chiavi esterne per codificare associazioni.
Il problema nasce quando devo eseguire query dalla mia applicazione Java (che usa delle classi DAO comunicanti col database) che necessitano di queste chiavi primarie, altrimenti nel database non riuscirei a distinguere i duplicati. Come bisogna fare in questi casi? è o non è necessario portarsi queste chiavi primarie nelle classi Java? Come potrei interrogare il database diversamente?

4 Risposte

  • Re: Problema Java, Postgres e codifica delle associazioni

    Il prof ha ragione/torto (ma bisogna vedere il CONTESTO in cui ha detto quello che ha detto !!!):

    1) ogni oggetto java e' univocamente identificato dal fatto di avere un indirizzo di memoria univoco (perche' anche su tu l'indirizzo non lo vedi, comunque sempre un PC con della memoria che stai utilizzando)

    MA

    2) due oggetti Java, benche distinti, possono rappresentare LO STESSO OGGETTO. In questo caso l'uso di un ID di qualche genere e' molto comodo/fondamentale

    Quando accedi ai record in un DB, ti devi portare dietro ANCHE l'id del record, perche' l'ID del record e' il suo ""indirizzo in memoria"" (nel DBMS, OVVIAMENTE!!!)
    E tale ID e' NECECSSARIO quando devi fare un'update, altrimenti quale record aggiorni/cancelli?
  • Re: Problema Java, Postgres e codifica delle associazioni

    migliorabile ha scritto:


    Il prof ha ragione/torto (ma bisogna vedere il CONTESTO in cui ha detto quello che ha detto !!!):

    1) ogni oggetto java e' univocamente identificato dal fatto di avere un indirizzo di memoria univoco (perche' anche su tu l'indirizzo non lo vedi, comunque sempre un PC con della memoria che stai utilizzando)

    MA

    2) due oggetti Java, benche distinti, possono rappresentare LO STESSO OGGETTO. In questo caso l'uso di un ID di qualche genere e' molto comodo/fondamentale

    Quando accedi ai record in un DB, ti devi portare dietro ANCHE l'id del record, perche' l'ID del record e' il suo ""indirizzo in memoria"" (nel DBMS, OVVIAMENTE!!!)
    E tale ID e' NECECSSARIO quando devi fare un'update, altrimenti quale record aggiorni/cancelli?
    Hai ragione e concordo con quanto hai detto.
    Il prof però ritiene che portare dietro questi codici appunto snaturi quella che è la definizione di classe Java, che deve rappresentare un oggetto del mondo reale. Se ho la classe "tavolo" ad esempio non vuole vedere "int codiceTavolo" perchè nella realtà è una cosa insolita.
    Non do torto al prof, ci mancherebbe, e infatti se utilizzassi solo l'appicativo Java senza database non mi sognerei di mettere "codiceTavolo", ma con un databse srutturato in questo modo che soluzioni ho? Avevo anche pensato di ricavare questi codici nelle classi dao sfruttanto l' insieme di attributi che già ho, ma a quel punto cosa ho fatto a fare le chiavi surrogate?
  • Re: Problema Java, Postgres e codifica delle associazioni

    Se una così ti serve ti serve, non ha senso farci questioni filosofiche sopra. C'è l'attributo private. Nel mondo reale il codice tavolo non lo vedi ma ce lo mettono dentro nell'imballaggio
  • Re: Problema Java, Postgres e codifica delle associazioni

    Puoi provare a creare una sequenze per gestire la chiave primaria
Devi accedere o registrarti per scrivere nel forum
4 risposte