Basi di Dati XML

Si consideri il seguente schema ER:

  1. Tracciare il grafo delle relazioni funzionali, ove i nodi sono le entità e esiste un arco orientato da X a Y se esiste una relazione funzionale totale Z che coinvolge le entità X e Y tale che Y partecipa a Z con vincolo (1,1). L'arco è etichettato con la corrispondente relazione.
  2. Tradurre lo schema ER in uno schema XML in tutti i modi possibili considerando il grafo delle relazioni funzionali tracciato al punto precedente (ogni soluzione si ottiene interrompendo il ciclo del grafo delle relazioni funzionali rimuovendo un arco e traducendo di conseguenza). Includere nello schema XML anche i vincoli di integrità referenziale (chiavi primarie e chiavi esterne). Per lo schema XML si usi la notazione sintetica proposta durante il corso (Target Language).
    // Schema 1 (rimuovo l'arco C -> A nel grafo delle relazioni funzionali)
    db(A*)
    A(KA, R*, T)
      R(B)
        B(KB, S*)
          S(C)
            C(KC)
      T(KC)     
            
    // Vincoli referenziali
    KEY(A.KA)
    KEY(B.KB)
    KEY(C.KC)
    KEYREF(T.KC -> C.KC)       
    
    // Schema 2 (rimuovo l'arco B -> C nel grafo delle relazioni funzionali)
    db(C*)
    C(KC, T*, S)
      T(A)
        A(KA, R*)
          R(B)
            B(KB)
      S(KB)               
    
    // Vincoli referenziali
    KEY(A.KA)
    KEY(B.KB)
    KEY(C.KC)
    KEYREF(S.KB -> B.KB)   
    
    // Schema 3 (rimuovo l'arco A -> B nel grafo delle relazioni funzionali)
    db(B*)
    B(KB, S*, R)
      S(C)
        C(KC, T*)
          T(A)
            A(KA)
      R(KA)          
            
    // Vincoli referenziali
    KEY(A.KA)
    KEY(B.KB)
    KEY(C.KC)
    KEYREF(R.KA -> A.KA)