Fusione delle base extension


La fase di esecuzione delle Basic Query prevede due passi successivi:
  1. Ricostruzione di ogni base extension
    Questa attivita' avviene mediante l'uso di join fra i risultati provenienti dalle classi locali appartenenti alla base extension che si sta considerando.
  2. Fusione delle base extension
    Eseguito il passo precedente abbiamo ottenuto delle base extension popolate. Se la base extension selezionata e' unica, sugli oggetti ottenuti viene posta la query assemblatrice ed il risultato costituisce il risultato della basic query, in caso contrario deve essere effettuata la fusione dei singoli risultati seguendo le indicazioni del plan. Gli elementi PEBaseExtJoin contengono le indicazioni necessarie, stabilendo per ogni coppia di base extension il tipo di operazione da effettuare: unione o outer join.
    • Outer join
      I problemi di possibili ridondanze sono dovuti a sovrapposizioni fra base extension che si verificano quando due base extension ne dominano una terza. L'esempio seguente mostra un caso di questo tipo:
      Le base extension iniziali sono 4, 5, 6.Durante la fase di definizione del query plan la base extension 5 viene scartata in quanto e' dominata sia dalla 4 che dalla 5, ma questo non e' sufficiente per eliminare completamente le duplicazioni. La ricostruzione delle base extension 4 e 6 genera infatti insiemi di entita' parzialmente sovrapposti e la sovrapposizione e' rappresentata proprio dall'estensione della base extension eliminata.In questo caso quindi e' necessario un outer join fra i risultati delle due base extension, ma per fare cio' bisogna riuscire ad identificare all'interno dei due risultati restituiti dalla ricostruzione delle base extension gli elementi comuni, cioe' quegli elementi appartenenti alla base extension 5.
      Una proposta per risolvere il problema e' basata sull'uso delle istanze appartenenti alla classe JoinMap che stabilisce per ogni coppia di classi locali l'insieme di attributi su cui effettuare il join. Questi attributi identificano in modo univoco gli elementi all'interno di entrambe le classi e costituiscono quindi una chiave comune utilizzabile per fondere le classi locali in modo da rappresentare una sola volta le istanze comuni.
      Per quanto riguarda la fusione di base extension nel caso di outer join, e' possibile individuare un identificatore unico all'interno dei due risultati utilizzando gli elementi della classe JoinMap contenenti una classe locale di una base extension e una classe locale dell'altra.
      Nell'esempio precedente il risultato della base extension 4 e' fornito dal join tra le classi A e C, mentre la base extension 6 dal join fra B e C. In questo caso quindi le chiavi utilizzabili per l' outer join fra le due sono:
      • k1 (classe A, classe B)
      • k2 (classe A,classe C)
      • k3 (classe C, classe B)
      Avendo a disposizione l'informazione della chiave identificativa di una singola classe locale, sarebbe possibile, nel caso di presenza di una stessa classe in entrambe le base extension, utilizzare l'identificatore della classe per effettuare il join.
    • Union
      In tutti i casi in cui non si ha dominazione di due base extension su una terza, si puo' procedere all'unione dei risultati senza rischi di ridondanze, avendo eliminato le base extension dominate.

Query Manager - Sviluppi Futuri
The MOMIS Home Page