Ho un'applicazione che funziona con prodotti provenienti da varie fonti di dati esterne (in DataSourceProduct) e mantiene anche la propria versione del prodotto (in MasterProduct). Ecco lo schema DB:
Nota:DataSourceProducthadiecialtrecolonnenonmostrateneldiagramma.IlMasterProducthadiecialtrecolonnenonmostrateneldiagramma.Adesempio,questecolonnehannolostessonomeinognitabella.chehannolostessonomemaperbrevitànonsonomostratineldiagramma.LecolonnecomuninonsitrovanonellatabellaProduct,masonopresentiinDataSourceProduct
Ognioriginedatiesternapuòfornirelapropriarappresentazionediundeterminatoprodotto.IlproductId(cioèProduct.id)èunIDgeneratoautomaticamente(incrementale)neldatabase.Èunachiavesurrogata.Unprodottodovrebbefareriferimentoa1&solo1prodottodelmondoreale.OgnioriginedatipuòavereipropridatisuquelprodottoeilDBdevecatturarlo.Supponiamodiavereunaportadiferro.SeèilprimoprodottoinseritonelDB,verràassegnatounIDprodotto1.Ora,l'originedatiApuòfornireunadescrizionedi"porta fine". La fonte di dati B può dare alla stessa porta di ferro una descrizione di "vecchia porta di ferro". Quindi, DataSourceProduct avrà 2 righe (1 riga per ogni origine dati). Entrambe le righe avranno productId = 1 in modo che possiamo sapere che entrambe le fonti di dati si riferiscono effettivamente allo stesso prodotto.
Sfortunatamente, non ci sono dati (come SKU) che possono determinare che un prodotto dall'origine dati A e dall'origine dati B si riferiscano allo stesso prodotto. Gli utenti mapperanno manualmente i prodotti come se fossero gli stessi. ProductId della tabella Product serve allo scopo di archiviare la mappatura utente (ad esempio, i prodotti di varie origini dati si riferiscono allo stesso prodotto).
L'applicazione deve anche avere una propria versione dei dati di prodotto che è memorizzata nella tabella MasterProduct. Differisce da DataSourceProduct perché
- Deve conservare la cronologia delle modifiche dei dati a un prodotto
- Deve conservare i dati del fornitore
Il prodotto dell'applicazione (ad esempio MasterProduct) verrà utilizzato estesamente in tutta l'applicazione mentre il prodotto dell'origine dati esterna (ovvero DataSourceProduct) viene utilizzato solo in una piccola parte dell'applicazione.
Come dovrei progettare le entità JPA corrispondenti? Le tre tabelle che rappresentano i prodotti possono (?) Avere un senso da una prospettiva DB. In OOP, tuttavia, sembra che esista una relazione di ereditarietà.