Il modo migliore per implementare un database unificato di diversi database condivisi

0

Sto implementando un servizio di sincronizzazione che memorizza il database di un dispositivo in un altro. In questo momento, il sistema di origine utilizza uno schema di tabella molto semplice: il PK è sempre un varchar (40).

Per eseguire la sincronizzazione, ho semplicemente duplicato la struttura del database nel sistema di destinazione.

Ora, dobbiamo sincronizzare diversi dispositivi con diversi database nello stesso sistema di destinazione.

Esempio:

Table "GROUP: {
code varchar(40) not null PK,
name varchar(400)
}

Il dispositivo A ha una tabella chiamata GROUP con una riga con ID 0001, Nome: "Raggruppa nel dispositivo A"

Il dispositivo B ha anche una tabella chiamata GROUP con una riga con ID 0001, Nome: "Group in device B"

(stesso valore PK, valori diversi)

Quindi, per sincronizzare questo nel database master, ho aggiunto una colonna STRING denominata BUSINESS_KEY, quindi, nella tabella master il PK è BS_KEY + CODE:

Table "GROUP: {
    bs_key varchar(40) not null,
    code varchar(40) not null,
    name varchar(400),
    primary key (bs_key,code)
}

Quindi le righe finali sarebbero:

bs_key      code     name
======================================
device_A    0001     Group in device A
device_B    0001     Group in device B

Questo sembra soddisfacente, ma sto usando anche JPA ed è diventato più disordinato perché ho bisogno di usare gli ID compositi. Il problema è che non posso aggiornare i record perché l'FK condivide un valore con PK:

@OneToOne(fetch = FetchType.EAGER, optional = true)
    @JoinColumns({
            @JoinColumn(updatable = false, insertable = false, name = "BUSINESS_KEY", referencedColumnName = "BUSINESS_KEY"),
            @JoinColumn(updatable = false, insertable = false, name = "DETAIL_CODE", referencedColumnName = "CODE")
    })
    @Expose
    private TestDetail detail;

Ora, la mia domanda è: dovrei spingere fordward questa progettazione del database e cercare una soluzione alternativa in JPA o dovrei cambiare la progettazione del database per raggiungere questo obiettivo? Ad esempio, utilizzando un numero intero autogenerato come PK e utilizzando l'indice Univoco per BS_KEY e CODE?

    
posta Mariano L 16.01.2018 - 18:37
fonte

0 risposte

Leggi altre domande sui tag