Algoritmo


Algoritmo di riconoscimento

/* Input:

  1. cluster che da' origine alla classe globale GC
  2. assiomi estensionali definiti sulle classi del cluster dal progettista
  3. Mapping Table
  4. */


begin procedure



for each coppia (Ch,Cj) in lista do begin
  • seleziona le chiavi di Ch
  • ricava dalla Mapping Table gli attributi globali corrispondenti e inseriscili nel vettore Kh
  • seleziona le chiavi di Cj
  • ricava dalla Mapping Table gli attributi globali corrispondenti e inseriscili nel vettore Kj
  • ricava le rule estensionali che interessano (Ch,Cj) e inseriscile in un vettore Ehj
if Ehj vuoto then ricava eventuali rule estensionali implicite e inseriscile in Ihj

switch Ehj contiene (ASSIOMA ESTENSIONALE)
{
case DISGIUNZIONE:"non c'e' necessita' di join"
case EQUIVALENZA:
if Kh non vuoto and Kj non vuoto then confronta le "chiavi globali" e inserisci quelle uguali in Ris

if Ris non vuoto then Ris contiene gli attributi di join
else /*siamo nel caso di chiavi disomogenee o di assenza di chiavi*/
if Kh vuoto and Kj non vuoto then
  • ricava gli attributi globali di Ch e mettili nel vettore Ah
  • confronta Ah con Kj
  • inserisci eventuali corrispondenze in Ris1
  • if Ris1 non vuoto then Ris1 contiene gli attributi di join
    else intervento del progettista

else if Kh non vuoto and Kj vuoto then
  • ricava gli attributi globali di Cj e mettili nel vettore Aj
  • confronta Aj con Kh
  • inserisci eventuali corrispondenze in Ris2
  • if Ris2 non vuoto then Ris2 contiene gli attributi di join
    else intervento del progettista

else if Kh non vuoto and Kj non vuoto then
  • ricava gli attributi globali di Cj e mettili nel vettore Aj
  • confronta Aj con Kh
  • inserisci eventuali corrispondenze in Ris1
  • ricava gli attributi globali di Ch e mettili nel vettore Ah
  • confronta Ah con Kj
  • inserisci eventuali corrispondenze in Ris2
  • if Ris1 non vuoto or Ris2 non vuoto then Ris1 o Ris 2 contiene gli attributi di join
    else intervento del progettista

case INCLUSIONE: /*(Ch isa Cj)*/
if Kh non vuoto and Kj non vuoto then confronta le "chiavi globali" e inserisci quelle uguali in Ris

if Ris non vuoto then Ris contiene gli attributi di join
else /*siamo nel caso di chiavi disomogenee o di assenza di chiavi*/
if Kh vuoto and Kj non vuoto then
  • ricava gli attributi globali di Ch e mettili nel vettore Ah
  • confronta Ah con Kj
  • inserisci eventuali corrispondenze in Ris1
  • if Ris1 non vuoto then Ris1 contiene gli attributi di join
    else intervento del progettista

else if Kh non vuoto and Kj non vuoto then
  • ricava gli attributi globali di Ch e mettili nel vettore Ah
  • confronta Ah con Kj
  • inserisci eventuali corrispondenze in Ris2
  • if Ris2 non vuoto then Ris 2 contiene gli attributi di join
    else intervento del progettista

case NULL:
switch Ihj contiene (ASSIOMA ESTENSIONALE)
{
case DISGIUNZIONE:"non c'e' necessita' di join"
case EQUIVALENZA: ripeti analisi precedenti
case INCLUSIONE: ripeti analisi precedenti
case NULL:
  • caso di SOVRAPPOSIZIONE
  • necessario l'intervento del progettista

}

}


end.