Unire database relazionali

di il
9 risposte

Unire database relazionali

Sono a capo di un piccolo gruppo di lavoro per dei rilievi sul territorio. In pratica ho strutturato un database di access, con più tabelle in relazione tra loro; ho dato una copia identica e vuota a 3 rilevatori; ciascuno ha compilato la sua e ora devo riunirle in un solo database per fare dei report.
Struttura, nome degli oggetti, nome dei campi sono uguali, cambiano solo i record contenuti.
Se faccio una query di accodamento per ciascuna tabella correlata, mi funziona poi tutto magicamente nel nuovo database o succedono macelli con le relazioni?
Le tabelle hanno come chiavi dei contatori automatici.
grazie

9 Risposte

  • Re: Unire database relazionali

    Ciao, dipende da come sono strutturati i contatori, ecc.
    Non ho capito se hai dato 3 database che vuoi unire in uno, oppure i ldatabase è uno e ogni utente compila una differente tabella.
  • Re: Unire database relazionali

    Ho dato 3 database uguali, ciascuno con più tabelle correlate con relazioni 1 a 1 o 1 a molti.
    per capirci: tutto fa capo ad una tabellona generale "segnalazioni"; ogni segnalazione ha una o più tipologie di dissesto (tabella tipologie dissesto), una cartina (tabella cartografie), più foto (tabella foto con memorizzati i path delle immagini), ecc. Il tutto si combina in un form unico che fa da interfaccia per i rilevatori. Ora devo prendere i 3 lavori e unirli in uno solo, ma le strutture dei database sono identiche in tutto.
    Come dicevo le chiavi sono contatori automatici e in genere le relazioni hanno impostata l'integrità referenziale, in modo che cancellando una segnalazione si cancellano anche tutti i record correlati.
    Il mio problema è spostare le "segnalazioni" da un file all'altro portandomi dietro tutto il resto.
  • Re: Unire database relazionali

    Capito, le chiavi collidono sicuramente.
    due db access uguali usati in parallelo creano gli stessi indici...

    ne potresti uscire comunque facendo dei lavoretti nei database.
    disattivi l'integrità referenziale, aggiungi un numero alle chiavi esterne e poi a quelle primarie (per traslare gli indici)
    Ti faccio un esempio che magari è più semplice
    ipotizza che nel primo db gli indici variano da 1 a 1000 e nel secondo da 1 a 1290

    aggiungi al primo database il numero 1000 in modo da portare gli indici da 1000 a 2000 e aggiungi al secondo databse il numero 10000 in modo da portare gli indici del secondo da 10000 a 11290

    cosi facendo avrai separato il range dei due db ed eliminato le collisioni,
    Dopo di che potrai farli confluire in un db unico senza integrità e in cui forzerai tu gli indici ina base ai dati dei vari db.
  • Re: Unire database relazionali

    Grazie. spero di aver capito.
    considerando che attualmente le chiavi primarie sono dei numeratori automatici, devo creare un campo numerico nuovo per ciascuna tabella, compilarlo come hai detto tu, e farlo diventare poi la chiave primaria?

    in ogni caso come andava impostato secondo te il database sapendo che avrei dovuto poi unirli? mi capiterà ancora in futuro...
  • Re: Unire database relazionali

    Come prima cosa fatti delle copie dei database originali cosi puoi lavorarci serenamente.

    Hai due possibilità: o ricicli i campi chiave attuale, ma disabiliti vincoli, integrità ecc in modo che puoi updatarli, oppure crei dei campi "paralleli a quelli chiave" sempre senza vincoli

    per quanto riguarda la domanda su come andava impostato il database, ci sono diverse soluzioni...
    avresti potuto ad esempio non utilizzare il campo contatore di access e gestire tu i valori degli indici.
    Tra l'altro avresti dovuto creare indici testuali in modo da poterci inserire valori tipo:

    Primo db
    A1
    A2
    A3
    ...
    An
    secondo db
    B1
    B2
    B3
    .....
    Bn
    cosi facendo avresti poi potuti farli confluire in un unici database senza il problema delle collisioni.

    Se hai bisogno di altri consiglio dimm pure
  • Re: Unire database relazionali

    Intanto grazie per la disponibilità estrema
    provo e vedo che succede

    quello che mi ha sorpreso è che il programma non sia in grado di unire due database che prevedono tabelle correlate (come avviene nel 99% dei casi) aggiornando in automatico gli indici in modo da conservare le relazioni; in fondo un caso come il mio si può verificare ogni volta che appendo una tabella ad un'altra e sono presenti relazioni. le tabelle correlate possono facilmente avere chiavi che si sovrappongono. il risultato è che mi pare che nel 99% dei casi, con un database un minimo strutturato, non posso appendere una tabella ad un'altra usando una procedura standard senza grossi problemi
    o sbaglio?
  • Re: Unire database relazionali

    Toki ha scritto:


    Hai due possibilità: o ricicli i campi chiave attuale, ma disabiliti vincoli, integrità ecc in modo che puoi updatarli, oppure crei dei campi "paralleli a quelli chiave" sempre senza vincoli
    Abbi pazienza
    nel secondo caso, una volta creati e compilati a manovella i campi paralleli, devo farli diventare le mie chiavi primarie, giusto?
  • Re: Unire database relazionali

    Fregatene delle chiavi, usali come campi semplici, ti servono solo per permetterne l'importazione sul database definitivo.
  • Re: Unire database relazionali

    Scusa l'ignoranza, ma ho bisogno di capire per reimpostare in futuro il database per renderlo in grado di unire più copie derivanti da più rilevatori diversi
    quello che mi dici di fare in realtà l'avevo fatto, perché le singole segnalazioni erano state denominate con codici che non sono duplicati tra i vari gruppi.
    Ma prendiamo gli ID dei record delle tabelle dipendenti da quella principale, es. la classificazione dei dissesti presenti in una data segnalazione, è una relazione uno-a-molti (in ogni segnalazione possono essere presenti più dissesti). Io ho creato una maschera per le segnalazioni con una sottomaschera "dissesti" che fa riferimento ad una relazione uno a molti tra la tabella "segnalazioni" e la tabella "dissesti". Prima inputo la segnalazione con il suo ID che decido io e va bene. Quando inputo uno o più dissesti all'interno della segnalazione, la sottomaschera crea nuovi record nella tabella "dissesti" generando automaticamente ID nella tabella dissesti. Io posso controllare l'ID della segnalazione, ma non quello dei dissesti. O sbaglio?
Devi accedere o registrarti per scrivere nel forum
9 risposte