Ho un dubbio durante la creazione di un DB, e vorrei sapere se ci sono argomenti oggettivi che potrebbero aiutarmi a prendere una decisione migliore.
Caso
Un progetto che può avere diverse revisioni, quindi ho creato l'entità Project
e Project_Rev
. Ogni revisione ha delle posizioni, quindi ho creato l'entità Position
. Ogni posizione ha elementi, quindi ho creato l'entità Element
. Fino a questo punto tutto è super-normale, da Project
a Element
entità per entità, è una relazione uno-a-molti, è possibile vedere nel grafico sottostante:
Ilproblemaèilseguente:%incrementodiProject_Rev
eincrementodiElements
,manonesisteun'associazionelogica!Potreiavere:
Project1_Rev1->Position1->Element1_Rev1,Element2_Rev1Project1_Rev2->Position1->Element1_Rev4,Element2_Rev2Project1_Rev3->Position1->Element1_Rev5,Element2_Rev2Project1_Rev4->Position1->Element1_Rev5,Element2_Rev10
Perquestomotivo,hopensatoinduesoluzioni:
Soluzione1
PerconnettereProject_Rev
conElement
,comel'immaginequisotto:
Questasoluzionefunziona,manonsembraquellagiustaperchéc'èridondanza,lostessoelementosaràreferenziatoduevolteneldatabaseperlostessoscopo!
Soluzione2
HopensatodicreareunatabelladiterradimezzoperProject_Rev
,Position
,Element
,doveperognicombinazioneProject_Rev
ePosition
c'èunList
diElements
.Comepuoivederenell'immaginequisotto:
L'immaginequisopranonècorretta,laseguenteè:
Questosembrapiùcorrettoperme,maacausadelledueconnessioniuno-a-uno"assaggia" come una vista per me! Tuttavia sembra più corretto, non c'è ridondanza come nella soluzione 1 di cui sopra!
Qual è il tuo consiglio al riguardo, dovrei usare la soluzione 1, la soluzione 2 o un'altra che non sto menzionando?