<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" type="topic" id="virtual-connections" xml:lang="el">
  <info>
    <title type="sort">1</title>
    <link type="guide" xref="features"/>
    <link type="guide" xref="index#connections"/>
  </info>
  <title>Συσχέτιση συνδέσεων (δηλ. εικονικές συνδέσεις)</title>
  <p>Η συσχέτιση σύνδεσης είναι ένα γνώρισμα που επιτρέπει τη "συσχέτιση" πολλών συνδέσεων και/ή εισαγόμενων συνόλων δεδομένων σε μια μοναδική σύνδεση, που μπορεί να χρησιμοποιηθεί σχεδόν όπως η κανονική σύνδεση.</p>
  <p>Αυτό το γνώρισμα είναι χρήσιμο όταν κάποιος χρειάζεται την εκτέλεση μιας εντολής SQL (για παράδειγμα εξαγωγή δεδομένων) λαμβάνοντας υπόψη δεδομένα αποθηκευμένα στην πραγματικότητα σε διαφορετικές βάσεις δεδομένων. Χωρίς αυτό το γνώρισμα, ο τρόπος εκπλήρωσης του ίδιου αποτελέσματος είναι με εξαγωγή των απαραίτητων δεδομένων από κάθε βάση δεδομένων και επεξεργασία στα δεδομένα έξω από τις βάσεις δεδομένων.</p>
  <p>Για δημιουργία μιας νέας "δεσμευμένης" σύνδεσης (ή "εικονικής" σύνδεσης), χρησιμοποιήστε το μενού <guiseq><gui>σύνδεση</gui><gui>συσχέτιση σύνδεσης</gui></guiseq>, ή τη συντόμευση <keyseq><key>Ctrl</key><key>i</key></keyseq>. Αυτό αναδύει ένα νέο παράθυρο διαλόγου από το οποίο μπορούν να οριστούν στοιχεία για συμπερίληψη στην "δεσμευμένη" σύνδεση όπως φαίνεται παρακάτω.</p>
  <figure>
    <title>Διάλογος για δημιουργία μιας νέας εικονικής σύνδεσης</title>
    <desc>Εδώ η τρέχουσα σύνδεση (c1) θα δεσμευτεί στο σχήμα "c1"</desc>
    <media type="image" mime="image/png" src="figures/virtual-cnc.png"/>
  </figure>
  <p>Χρησιμοποιήστε το κουμπί <guiseq><gui>προσθήκη συσχέτισης</gui></guiseq> για είτε:</p>
  <list>	
    <item><p>συσχέτιση μιας σύνδεσης για συμπερίληψη όλων των πινάκων αυτής της σύνδεσης: χρήση της επιλογής <guiseq><gui>συσχέτιση μιας σύνδεσης</gui></guiseq>. Αυτή η επιλογή προσθέτει απλά ένα νέο στοιχείο στο διάλογο, για ορισμό ονόματος σχήματος και επιλογή μιας υφιστάμενης σύνδεσης</p></item>
    <item><p>συσχέτιση ενός συνόλου δεδομένων για εισαγωγή δεδομένων από αρχείο κειμένου ως μοναδικού πίνακα: χρήση της επιλογής <guiseq><gui>συσχέτιση συνόλου δεδομένων</gui></guiseq>. Δείτε την παρακάτω ενότητα για περισσότερες πληροφορίες.</p></item>
  </list>

  <section id="vcnc-use-case">
    <title>Χρήση περίπτωσης για εικονικές συνδέσεις</title>
    <p>Για επεξήγηση της χρήσης εικονικής σύνδεσης, ας ορίσουμε την περίπτωση απλής χρήσης και ας δούμε τη χρησιμότητά της. Ας υποθέσουμε ότι έχετε μια βάση δεδομένων που περιέχει τη λίστα των εξυπηρετητών για τους οποίους είσαστε υπεύθυνος. Για απλοποίση, ας υποθέσουμε ότι η βάση δεδομένων περιέχει έναν πίνακα με όνομα "εξυπηρετητή" με τον παρακάτω ορισμό:</p>
    <code>Εξυπηρετητές CREATE TABLE (συμβολοσειρά ονόματος, συμβολοσειρά θέσης)·</code>
    <p>Ας υποθέσουμε ότι αυτός ο πίνακας περιέχει την παρακάτω πληροφορία:</p>
    <code>
&gt; select * from servers ·
name     | location
---------+---------
moon     | room1   
darkstar | room2   
flag     | room3   
alf      | room2   
vador    | room3   
(5 rows)
&gt;
    </code>
    <p>Τώρα ας υποθέσουμε ότι έχετε ένα πρόγραμμα τρίτου που δίνει μια λίστα εξυπηρετητών για τους οποίους ίσως υπάρχει πρόβλημα, η έξοδος αυτού του προγράμματος είναι ένα αρχείο CSV με μια στήλη για το όνομα του εξυπηρετητή, μια στήλη για τον κώδικα σφάλματος και μια στήλη που περιγράφει το πρόβλημα. Ας υποθέσουμε ότι το αρχείο CSV έχει τα παρακάτω περιεχόμενα:</p>
    <code>
$ cat problems.csv 
Server name,Error code,Error description
darkstar,0,file system full
vador,1,outdated AV signature
darkstar,2,overloaded
flag,0,file system full
$
    </code>
    <p>Ας υποθέσουμε τώρα ότι θέλετε να μάθετε για όλους τους εξυπηρετητές, πού βρίσκονται, πού υπάρχει πρόβλημα με κώδικα σφάλματος 0. Η λύση είναι η συσχέτιση της σύνδεσης με τη βάση δεδομένων (για παράδειγμα στο σχήμα "c1"), εισαγωγή του αρχείου CSV προβλημάτων (για παράδειγμα στον πίνακα "καρτέλα") και εκτέλεση της παρακάτω εντολής SQL:</p>
    <code>
SELECT 
  "server name", 
  location
FROM tab
  INNER JOIN c1.servers AS s ON (tab."server name" = s.name)
WHERE "Error code"=0
    </code>
    <p>που επιστρέφει τα αναμενόμενα αποτελέσματα όπως φαίνονται στην παρακάτω εικόνα:</p>
    <figure>
      <title>Αναμενόμενα αποτελέσματα από εικονική σύνδεση</title>
      <media type="image" mime="image/png" src="figures/virtual-cnc-4.png"/>
    </figure>
  </section>


  <section id="vcnc-import-dataset">
    <title>Εισαγωγή συνόλου δεδομένων στην εικονική σύνδεση</title>
    <p>Για εισαγωγή ενός συνόλου δεδομένων σε έναν πίνακα στην εικονική σύνδεση (για παράδειγμα για εισαγωγή του αρχείου "problems.csv" από τη χρησιμοποιούμενη περίπτωση), χρησιμοποιήστε την επιλογή <guiseq><gui>συσχέτιση συνόλου δεδομένων</gui></guiseq> από τον διάλογο δημιουργίας εικονικής σύνδεσης:</p>
    <figure>
      <title>Εισαγωγή συνόλου δεδομένων στην εικονική σύνδεση -1</title>
      <media type="image" mime="image/png" src="figures/virtual-cnc-5.png"/>
    </figure>
    <p>Από εκεί χρησιμοποιήστε το κουπί <guiseq><gui>εισαγωγή</gui></guiseq> που επιτρέπει την επιλογή αρχείου για εισαγωγή και ορίστε επίσης κάποιες επιλογές εισαγωγής (κωδικοποίηση αρχείου, τύπο αρχείου, ...). Μετά από αυτό το βήμα, η εικονική σύνδεση είναι έτοιμη για χρήση:</p>
    <figure>
      <title>Εισαγωγή συνόλου δεδομένων στην εικονική σύνδεση -2</title>
      <media type="image" mime="image/png" src="figures/virtual-cnc-2.png"/>
    </figure>
    <p>Η τελική εικονική σύνδεση, ταυτοποιούμενη ως "c2" εδώ είναι ανοικτή στο δικό της νέο παράθυρο:</p>
    <figure>
      <title>Νέα ανοικτή εικονική σύνδεση</title>
      <media type="image" mime="image/png" src="figures/virtual-cnc-3.png"/>
    </figure>
  </section>

  <section id="virtual-ddl-sql">
    <title>Χρήση SQL με εικονικές συνδέσεις</title>
    <p>Μπορείτε να χρησιμοποιήσετε το SQL που εννοείται από το <link href="http://sqlite.org/lang.html">SQLite</link> σε κάθε εικονική σύνδεση. Να γνωρίζετε όμως ότι εάν ορίσετε αντικείμενα βάσης δεδομένων (έξω από το εκτεταμένο SQL που παρουσιάζεται στην επόμενη ενότητα), θα χαθούν την επόμενη φορά που η εικονική σύνδεση θα ανοίξει.</p>
    <p>Δείτε την ενότητα <link xref="sql-sqlite">SQL που εννοείται από συνδέσεις LDAP και εικονικές συνδέσεις</link> για περισσότερες πληροφορίες.</p>
  </section>
</page>
