Algebra relazionale (1 di 2): considerazioni generali

  • Creatore
    Topic
  • #11887
    Up
    0
    Down
    ::


    Ciao a tutti,
    stavo pensando a come si potrebbero scrivere in LaTeX delle espressioni in algebra relazionale, un linguaggio di interrogazione procedurale e ad alto livello per le basi di dati.

    Il mio primo punto di partenza è una raccolta di esercizi scritta un po’ di tempo fa da uno dei miei professori, reperibile all’indirizzo <http://www.dimi.uniud.it/montana/exercise/Libro_AR.ps> [155 KiB].

    Ho provato a dare un’occhiata nel forum per vedere se l’argomento è già stato trattato, ma non mi sembra; con Google ho trovato una pagina in cui si parlava dei simboli usati per il linguaggio, <http://www.cs.indiana.edu/l/www/classes/b561/2004/aux_files/latex_for_b561.html>, reperibili comunque in parecchie altre guide dedicate a LaTeX, e un file di esempio (scritto da un’altra persona) su come si potrebbero scrivere espressioni complete, <http://www.cs.uleth.ca/~rice/latex/worksheet.pdf> [49,6 KiB].

    Partendo dalla raccolta scritta da questo mio professore e da quest’ultimo esempio trovato in rete, ho provato a scrivere qualcosa, e volevo sentire che cosa ne pensavate. In particolare, vorrei discutere dei seguenti problemi:

    1. nella raccolta, i simboli usati per le operazioni (es. «sigma» per la selezione, «pi greco» per la proiezione, ecc.) hanno un corpo maggiore rispetto al resto del testo; volevo capire se sia giusto o meno adottare questa pratica e, nel caso in cui lo sia, se la mia soluzione («\LARGE») va bene o se si può fare di meglio;

    2. può darsi, talvolta, che i nomi delle relazioni e degli attributi coinvolti non siano tipici nomi da insiemi, come «A» o «B», ma nomi comuni, come «GIOCATORE» e «nomeAutore»; pertanto, mi farebbe piacere sapere se qualcuno la pensa come me e quindi li inserirebbe come testi all’interno delle formule (es. «\[ … \text{nomeAutore} … \]») oppure se andrebbero inseriti direttamente all’interno di un ambiente matematico (es. «\[ … nomeAutore … \]»);

    3. se un’interrogazione è costituita da più espressioni, come si fa (un’espressione per riga?) e quale ambiente si usa (es. «align»?);

    4. l’ultimo problema è più generale, e quindi ne parlo in un altro post.

    Ora espando un po’ meglio questi punti e vi faccio vedere il codice che ho scritto, così ci capiamo meglio:

    1. ecco un sorgente minimale:
      `\documentclass{article}

      \usepackage{amsmath}

      \begin{document}

      Sia $R1$ definita sugli attributi $A, B$ e $C$ ($R1(A, B, C)$); la relazione
      $R2$ \`e data da:

      \[
      R2 \leftarrow \text{\LARGE{$\pi$}}_{B} (\text{\LARGE{$\sigma$}}_{C > 5} (R1))
      \]

      \end{document}
      `
      chiaramente, per migliorare la leggibilità, si potrebbero definire dei comandi appositi:
      `\documentclass{article}

      \usepackage{amsmath}

      \newcommand{\proiezioneSu}[1]{\text{\LARGE{$\pi$}}_{#1}}
      \newcommand{\selezioneSu}[1]{\text{\LARGE{$\sigma$}}_{#1}}

      \begin{document}

      Sia $R1$ definita sugli attributi $A, B$ e $C$ ($R1(A, B, C)$); la relazione
      $R2$ \`e data da:

      \[
      R2 \leftarrow \proiezioneSu{B} (\selezioneSu{C > 5} (R1))
      \]

      \end{document}
      `

    2. immaginiamo di avere la relazione GIOCATORE(nomeGiocatore,Squadra): così i nomi «comuni» delle relazioni e degli attributi verrebbero inseriti direttamente all’interno del testo matematico, come se fossero delle variabili…
      `\[
      R \leftarrow \proiezioneSu{nomeGiocatore}
      (\selezioneSu{Squadra = `Olanda'} (GIOCATORE))
      \]
      `
      … così, invece (come farei io), si enfatizzerebbe il fatto che si tratta di parole della lingua italiana, non della matematica:
      `\[
      R \leftarrow \proiezioneSu{\text{\emph{nomeGiocatore}}}
      (\selezioneSu{\text{\emph{Squadra = `Olanda'}}} (\text{\emph{GIOCATORE}}))
      \]
      `
      anche in questo caso, si potrebbero definire altri comandi per leggibilità:
      `\documentclass{article}

      \usepackage{amsmath}

      \newcommand{\attr}[1]{\text{\emph{#1}}}
      \newcommand{\rlz}[1]{\text{\emph{#1}}}
      \newcommand{\proiezioneSu}[1]{\text{\LARGE{$\pi$}}_{#1}}
      \newcommand{\selezioneSu}[1]{\text{\LARGE{$\sigma$}}_{#1}}

      \begin{document}

      \[
      R \leftarrow \proiezioneSu{\attr{nomeGiocatore}}
      (\selezioneSu{\attr{Squadra = `Olanda'}} (\rlz{GIOCATORE}))
      \]

      \end{document}
      `

    3. immaginiamo di avere un’interrogazione costituita da due espressioni; io la scriverei in questo modo:
      `\begin{align*}
      &\rlz{GIOCATORE\_OLANDA} \leftarrow \selezioneSu{\attr{Squadra = `Olanda'}}
      (\rlz{GIOCATORE})\\
      &R \leftarrow \proiezioneSu{\attr{nomeGiocatore}}
      (\rlz{GIOCATORE\_OLANDA})
      \end{align*}
      `
      ho usato «align*» al posto di «align» in quanto la numerazione non era rilevante, e ho preferito allineare («&») all’inizio della riga piuttosto che in concomitanza con la freccia che indica il risultato (in algebra relazionale si scrive da destra a sinistra).

    Ci terrei a sapere come scrivereste voi il tutto, tenendo conto di questi tre casi.

    Grazie e a presto!

    Saluti.

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #11888
      Up
      0
      Down
      ::

      Ciao a tutti,
      stavo pensando a come si potrebbero scrivere in LaTeX delle espressioni in algebra relazionale, un linguaggio di interrogazione procedurale e ad alto livello per le basi di dati.

      Il mio primo punto di partenza è una raccolta di esercizi scritta un po’ di tempo fa da uno dei miei professori, reperibile all’indirizzo <http://www.dimi.uniud.it/montana/exercise/Libro_AR.ps> [155 KiB].

      `\documentclass{article}

      \usepackage{amsmath}

      \begin{document}

      Sia $R1$ definita sugli attributi $A, B$ e $C$ ($R1(A, B, C)$); la relazione
      $R2$ \`e data da:

      \[
      R2 \leftarrow \text{\LARGE{$\pi$}}_{B} (\text{\LARGE{$\sigma$}}_{C > 5} (R1))
      \]

      \end{document}`

      Ci terrei a sapere come scrivereste voi il tutto, tenendo conto di questi tre casi.

      Le variabili indicate con parole vanno composte in carattere corsivo non matematico. I simboli \pi e \sigma ingranditi sono, francamente, orrendi. Ti riporto il modo “corretto” di scrivere l’esempio in uno dei documenti pdf che citi
      `\newcommand{\var}[2][]{\text{\itshape#2}#1}
      \noindent
      $\var[1]{temp} \leftarrow (\var{customer} \times \var{account}) $ \\
      $\var[2]{temp} \leftarrow \sigma_{\var{customer.sin} = \var{account.sin}}(\var[1]{temp})$ \\
      $\var{basic-cust-accts} \leftarrow \Pi_{(\var{name}, \var{customer.sin}, \var{account-number})}(\var[2]{temp})$`
      Il comando definito \var ha un argomento opzionale perché, a mio parere, i numeri vanno in carattere diritto. Occorre caricare amsmath.

      Il tuo esempio diventerebbe
      `R2 \leftarrow \Pi_{B} (\sigma_{C > 5} (R1))`
      Quanto all’andare a capo nei pedici, la troverei una soluzione poco adatta, se non c’è altro di meglio. Con amsmath puoi usare l’ambiente subarray
      `\Pi_{\begin{subarray}{l}(\var{name}, \var{customer.sin},\\ \var{account-number})\end{subarray}}`
      Ciao
      Enrico

    • #11889
      Up
      0
      Down
      ::

      Ma veramente lo faresti con
      `\noindent
      $ […] $ \\
      $ […] $ \\
      $ […] $`
      (mi ha colpito soprattutto l’andata a capo esplicita) piuttosto che con il sistema che ho suggerito io («align» o un ambiente basato su di esso costruito appositamente)?

      No che non lo farei così ❗ Era solo per riprodurre lo schema di quell’esempio (nota le virgolette attorno a “corretto”); la cosa più importante era il codice per scrivere i pedici, non la sistemazione finale delle formule.

      Ciao
      Enrico

    • #11890
      Up
      0
      Down
      ::

      Le variabili indicate con parole vanno composte in carattere corsivo non matematico.

      Molto bene, c’eravamo già arrivati nella seconda discussione dedicata a questo argomento (<http://www.guit.sssup.it/phpBB2/viewtopic.php?t=2188>), ma va sempre bene sentire cosa ne pensa qualcun altro 🙂

      I simboli \pi e \sigma ingranditi sono, francamente, orrendi.

      Ne prendo atto.

      Ti riporto il modo “corretto” di scrivere l’esempio in uno dei documenti pdf che citi

      Ma veramente lo faresti con
      `\noindent
      $ […] $ \\
      $ […] $ \\
      $ […] $
      `
      (mi ha colpito soprattutto l’andata a capo esplicita) piuttosto che con il sistema che ho suggerito io («align» o un ambiente basato su di esso costruito appositamente)?

      Il comando definito \var ha un argomento opzionale perché, a mio parere, i numeri vanno in carattere diritto.

      Molto bene. Prendo atto anche di questo.

      Quanto all’andare a capo nei pedici, la troverei una soluzione poco adatta, se non c’è altro di meglio.

      Già, anche di questo abbiamo parlato nell’altra discussione, e si è concluso di non adottare questa strada.

      Con amsmath puoi usare l’ambiente subarray

      Ho provato ad usarlo come suggerisci tu, ma non mi piace la resa grafica finale. Penso che il pedice rimarrà su un’unica riga. 🙂

      Grazie molte e a presto!

    • #11891
      admin
      Amministratore del forum
        Up
        0
        Down
        ::


        Forse è meglio mettere un po’ di spazio tra le lettere e il numero nel caso di attributo in corsivo che termina con un numero, altrimenti rimane troppo appiccicato.

        \newcommand{\var}[2][]{\text{\itshape#2}\hspace{0.08cm}#1}

        egreg9\n

        [code]\newcommand{\var}[2][]{\text{\itshape#2}#1}
        Il comando definito \var ha un argomento opzionale perché, a mio parere, i numeri vanno in carattere diritto. Occorre caricare amsmath.

      • #11892
        Up
        0
        Down
        ::

        Forse è meglio mettere un po’ di spazio tra le lettere e il numero nel caso di attributo in corsivo che termina con un numero, altrimenti rimane troppo appiccicato.
        `\newcommand{\var}[2][]{\text{\itshape#2}\hspace{0.08cm}#1}`

        Meglio ancora:
        `\newcommand{\var}[2][]{\text{\itshape#2\/}#1}`
        Ciao
        Enrico

      • #11893
        admin
        Amministratore del forum
          Up
          0
          Down
          ::


          Si, effettivamente è ancora meglio…
          grazie

          Meglio ancora:
          `\newcommand{\var}[2][]{\text{\itshape#2\/}#1}`
          Ciao
          Enrico

      Visualizzazione 5 filoni di risposte
      • Devi essere connesso per rispondere a questo topic.

      Go to top