Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017

Πριν την έναρξη του μαθήματος "Προγραμματιστής MS SQL Server" Ετοιμάσαμε άλλη μια χρήσιμη μετάφραση για εσάς.

Οι βάσεις δεδομένων γραφημάτων είναι μια σημαντική τεχνολογία για τους επαγγελματίες βάσεων δεδομένων. Προσπαθώ να συμβαδίζω με τις καινοτομίες και τις νέες τεχνολογίες σε αυτόν τον τομέα και, αφού δουλέψω με σχεσιακές βάσεις δεδομένων και βάσεις δεδομένων NoSQL, βλέπω ότι ο ρόλος των βάσεων δεδομένων γραφημάτων γίνεται όλο και πιο σημαντικός. Όταν εργάζεστε με πολύπλοκα ιεραρχικά δεδομένα, όχι μόνο οι παραδοσιακές βάσεις δεδομένων είναι αναποτελεσματικές, αλλά και η NoSQL. Συχνά, καθώς αυξάνεται ο αριθμός των επιπέδων σύνδεσης και το μέγεθος της βάσης δεδομένων, η απόδοση μειώνεται. Και καθώς οι σχέσεις γίνονται πιο περίπλοκες, αυξάνεται και ο αριθμός των JOIN.

Φυσικά, το σχεσιακό μοντέλο έχει λύσεις για την εργασία με ιεραρχίες (για παράδειγμα, χρησιμοποιώντας αναδρομικά CTE), αλλά αυτές εξακολουθούν να είναι λύσεις. Ταυτόχρονα, η λειτουργικότητα των βάσεων δεδομένων γραφημάτων του SQL Server σάς επιτρέπει να χειρίζεστε εύκολα πολλαπλά επίπεδα ιεραρχίας. Τόσο το μοντέλο δεδομένων όσο και τα ερωτήματα είναι απλοποιημένα και επομένως η αποτελεσματικότητά τους αυξάνεται. Η ποσότητα του κωδικού μειώνεται σημαντικά.

Οι βάσεις δεδομένων γραφημάτων είναι μια εκφραστική γλώσσα για την αναπαράσταση πολύπλοκων συστημάτων. Αυτή η τεχνολογία χρησιμοποιείται ήδη ευρέως στον κλάδο της πληροφορικής σε τομείς όπως τα κοινωνικά δίκτυα, τα συστήματα καταπολέμησης της απάτης, η ανάλυση δικτύων πληροφορικής, οι κοινωνικές συστάσεις, οι συστάσεις προϊόντων και περιεχομένου.

Η λειτουργικότητα της βάσης δεδομένων γραφημάτων στον SQL Server είναι κατάλληλη για σενάρια όπου τα δεδομένα είναι πολύ διασυνδεδεμένα και έχουν σαφώς καθορισμένες σχέσεις.

Μοντέλο δεδομένων γραφήματος

Ένα γράφημα είναι ένα σύνολο κορυφών (κόμβων) και ακμών (σχέσεις, ακμή). Οι κορυφές αντιπροσωπεύουν οντότητες και οι ακμές αντιπροσωπεύουν σχέσεις των οποίων τα χαρακτηριστικά μπορεί να περιέχουν πληροφορίες.

Μια βάση δεδομένων γραφημάτων μοντελοποιεί οντότητες ως γράφημα όπως ορίζεται στη θεωρία γραφημάτων. Οι δομές δεδομένων είναι κορυφές και ακμές. Τα χαρακτηριστικά είναι ιδιότητες κορυφών και ακμών. Μια σύνδεση είναι μια σύνδεση κορυφών.

Σε αντίθεση με άλλα μοντέλα δεδομένων, οι βάσεις δεδομένων γραφημάτων δίνουν προτεραιότητα στις σχέσεις μεταξύ οντοτήτων. Ως εκ τούτου, δεν υπάρχει λόγος να υπολογιστούν οι σχέσεις χρησιμοποιώντας ξένα κλειδιά ή οποιοδήποτε άλλο μέσο. Είναι δυνατή η δημιουργία σύνθετων μοντέλων δεδομένων χρησιμοποιώντας μόνο αφαιρέσεις κορυφών και ακμών.

Στον σύγχρονο κόσμο, η μοντελοποίηση σχέσεων απαιτεί όλο και πιο πολύπλοκες τεχνικές. Για τη μοντελοποίηση σχέσεων, ο SQL Server 2017 προσφέρει δυνατότητες βάσης δεδομένων γραφημάτων. Οι κορυφές και οι ακμές του γραφήματος αντιπροσωπεύονται ως νέοι τύποι πινάκων: NODE και EDGE. Τα ερωτήματα γραφήματος χρησιμοποιούν μια νέα συνάρτηση T-SQL που ονομάζεται MATCH(). Δεδομένου ότι αυτή η λειτουργικότητα είναι ενσωματωμένη στον SQL Server 2017, μπορεί να χρησιμοποιηθεί στις υπάρχουσες βάσεις δεδομένων σας χωρίς την ανάγκη μετατροπής.

Πλεονεκτήματα του μοντέλου γραφήματος

Σήμερα, οι επιχειρήσεις και οι χρήστες απαιτούν εφαρμογές που χειρίζονται όλο και περισσότερα δεδομένα, ενώ αναμένουν υψηλή απόδοση και αξιοπιστία. Η αναπαράσταση δεδομένων ως γράφημα προσφέρει ένα βολικό μέσο χειρισμού περίπλοκων σχέσεων. Αυτή η προσέγγιση λύνει πολλά προβλήματα και βοηθά στην απόκτηση αποτελεσμάτων σε ένα δεδομένο πλαίσιο.

Φαίνεται ότι πολλές εφαρμογές θα ωφεληθούν από τη χρήση βάσεων δεδομένων γραφημάτων στο μέλλον.

Μοντελοποίηση δεδομένων: από σχεσιακό σε γραφικό μοντέλο

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017
Παράδειγμα

Ας δούμε ένα παράδειγμα μιας οργανωτικής δομής με μια ιεραρχία εργαζομένων: ένας υπάλληλος αναφέρεται σε έναν διευθυντή, ένας διευθυντής αναφέρει σε έναν ανώτερο διευθυντή και ούτω καθεξής. Ανάλογα με τη συγκεκριμένη εταιρεία, μπορεί να υπάρχει οποιοσδήποτε αριθμός επιπέδων σε αυτήν την ιεραρχία. Αλλά καθώς ο αριθμός των επιπέδων αυξάνεται, ο υπολογισμός των σχέσεων σε μια σχεσιακή βάση δεδομένων γίνεται όλο και πιο περίπλοκος. Είναι αρκετά δύσκολο να φανταστεί κανείς την ιεραρχία των εργαζομένων, την ιεραρχία στο μάρκετινγκ ή τις συνδέσεις στα κοινωνικά δίκτυα. Ας δούμε πώς το SQL Graph μπορεί να λύσει το πρόβλημα του χειρισμού διαφορετικών επιπέδων ιεραρχίας.

Για αυτό το παράδειγμα θα φτιάξουμε ένα απλό μοντέλο δεδομένων. Ας δημιουργήσουμε έναν πίνακα εργαζομένων EMP με ταυτότητα ΕΜΠΝΟ και στήλη M.G.R., αναφέροντας το αναγνωριστικό του προϊσταμένου (διευθυντή) του υπαλλήλου. Όλες οι πληροφορίες σχετικά με την ιεραρχία αποθηκεύονται σε αυτόν τον πίνακα και μπορούν να αναζητηθούν χρησιμοποιώντας στήλες ΕΜΠΝΟ и M.G.R..

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017
Το παρακάτω διάγραμμα δείχνει το ίδιο μοντέλο οργανωτικής δομής με τέσσερα επίπεδα ένθεσης σε μια πιο οικεία μορφή. Οι εργαζόμενοι είναι οι κορυφές ενός γραφήματος από έναν πίνακα EMP. Η οντότητα «υπάλληλος» συνδέεται με τον εαυτό της μέσω της σύνδεσης «υποβάλλει» (ReportsTo). Με όρους γραφήματος, ένας σύνδεσμος είναι ένα άκρο (EDGE) που συνδέει κόμβους (NODE) ​​υπαλλήλων.

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017

Ας δημιουργήσουμε έναν κανονικό πίνακα EMP και προσθέστε τις τιμές εκεί σύμφωνα με το παραπάνω διάγραμμα.

CREATE TABLE EMP
(EMPNO INT NOT NULL,
ENAME VARCHAR(20),
JOB VARCHAR(10),
MGR INT,
JOINDATE DATETIME,
SALARY DECIMAL(7, 2),
COMMISIION DECIMAL(7, 2),
DNO INT)
 
INSERT INTO EMP VALUES
(7369, 'SMITH', 'CLERK', 7902, '02-MAR-1970', 8000, NULL, 2),
(7499, 'ALLEN', 'SALESMAN', 7698, '20-MAR-1971', 1600, 3000, 3),
(7521, 'WARD', 'SALESMAN', 7698, '07-FEB-1983', 1250, 5000, 3),
(7566, 'JONES', 'MANAGER', 7839, '02-JUN-1961', 2975, 50000, 2),
(7654, 'MARTIN', 'SALESMAN', 7698, '28-FEB-1971', 1250, 14000, 3),
(7698, 'BLAKE', 'MANAGER', 7839, '01-JAN-1988', 2850, 12000, 3),
(7782, 'CLARK', 'MANAGER', 7839, '09-APR-1971', 2450, 13000, 1),
(7788, 'SCOTT', 'ANALYST', 7566, '09-DEC-1982', 3000, 1200, 2),
(7839, 'KING', 'PRESIDENT', NULL, '17-JUL-1971', 5000, 1456, 1),
(7844, 'TURNER', 'SALESMAN', 7698, '08-AUG-1971', 1500, 0, 3),
(7876, 'ADAMS', 'CLERK', 7788, '12-MAR-1973', 1100, 0, 2),
(7900, 'JAMES', 'CLERK', 7698, '03-NOV-1971', 950, 0, 3),
(7902, 'FORD', 'ANALYST', 7566, '04-MAR-1961', 3000, 0, 2),
(7934, 'MILLER', 'CLERK', 7782, '21-JAN-1972', 1300, 0, 1)

Η παρακάτω εικόνα δείχνει τους εργαζόμενους:

  • υπάλληλος με ΕΜΠΝΟ 7369 υπακούει 7902;
  • υπάλληλος με ΕΜΠΝΟ Το 7902 υπακούει στο 7566
  • υπάλληλος με ΕΜΠΝΟ Το 7566 υπακούει στο 7839

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017
Τώρα ας δούμε μια αναπαράσταση γραφήματος των ίδιων δεδομένων. Η κορυφή EMPLOYEE έχει πολλά χαρακτηριστικά και συνδέεται με τον εαυτό της μέσω της σχέσης «υποτελείς» (EmplReportsTo). EmplReportsTo είναι το όνομα της σχέσης.

Ο πίνακας ακμών (EDGE) μπορεί επίσης να περιέχει χαρακτηριστικά.

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017
Ας δημιουργήσουμε έναν πίνακα κόμβων EmpNode

Η σύνταξη για τη δημιουργία ενός κόμβου είναι αρκετά απλή: στην έκφραση Δημιουργία πίνακα προστίθεται στο τέλος "ΩΣ ΚΟΜΒΟΣ".

CREATE TABLE dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) AS NODE;

Τώρα ας μετατρέψουμε τα δεδομένα από έναν κανονικό πίνακα σε ένα γράφημα. Επόμενο ΕΝΘΕΤΟ εισάγει δεδομένα από έναν σχεσιακό πίνακα EMP.

INSERT INTO EmpNode(EMPNO,ENAME,MGR,DNO) select empno,ename,MGR,dno from emp

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017
Στον πίνακα των κόμβων σε μια ειδική στήλη $node_id_* το αναγνωριστικό κόμβου αποθηκεύεται ως JSON. Οι υπόλοιπες στήλες αυτού του πίνακα περιέχουν τα χαρακτηριστικά του κόμβου.

Δημιουργία ακμών (EDGE)

Η δημιουργία ενός πίνακα ακμών μοιάζει πολύ με τη δημιουργία ενός πίνακα κόμβων, εκτός από το ότι χρησιμοποιείται η λέξη-κλειδί "ΩΣ ΑΚΡΗ".

CREATE TABLE empReportsTo(Deptno int) AS EDGE

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017

Τώρα ας ορίσουμε τις συνδέσεις μεταξύ των εργαζομένων χρησιμοποιώντας στήλες ΕΜΠΝΟ и M.G.R.. Το διάγραμμα οργανωτικής δομής δείχνει ξεκάθαρα πώς να γράψετε ΕΝΘΕΤΟ.

INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 1),
   	(SELECT $node_id FROM EmpNode WHERE id = 13),20);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 2),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),10);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 3),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),10)
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 4),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 5),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 6),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 7),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 8),
   	(SELECT $node_id FROM EmpNode WHERE id = 4),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 9),
   	(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 10),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 11),
   	(SELECT $node_id FROM EmpNode WHERE id = 8),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 12),
   	(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 13),
   	(SELECT $node_id FROM EmpNode WHERE id = 4),30);
INSERT INTO empReportsTo  VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 14),
   	(SELECT $node_id FROM EmpNode WHERE id = 7),30);

Ο προεπιλεγμένος πίνακας άκρων αποτελείται από τρεις στήλες. Πρώτα, $edge_id — αναγνωριστικό άκρου σε μορφή JSON. Τα άλλα δύο ($from_id и $to_id) αντιπροσωπεύουν τη σύνδεση μεταξύ κόμβων. Επιπλέον, οι άκρες μπορούν να έχουν πρόσθετες ιδιότητες. Στην περίπτωσή μας είναι Deptno.

Προβολές συστήματος

Σε προβολή συστήματος sys.tables εμφανίστηκαν δύο νέες στήλες:

  1. είναι_άκρη
  2. είναι_κόμβος

SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%'

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017

ssms

Τα αντικείμενα που σχετίζονται με γραφήματα βρίσκονται στο φάκελο Graph Tables. Το εικονίδιο του πίνακα κόμβων επισημαίνεται με μια τελεία και το εικονίδιο του πίνακα άκρων σημειώνεται με δύο συνδεδεμένους κύκλους (λίγο σαν γυαλιά).

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017

Έκφραση ΜΑΤΣ

Έκφραση MATCH λαμβάνονται από CQL (Cypher Query Language). Αυτός είναι ένας αποτελεσματικός τρόπος για να αναζητήσετε τις ιδιότητες ενός γραφήματος. Η CQL ξεκινά με μια έκφραση MATCH.

σύνταξη

MATCH (<graph_search_pattern>)
 
<graph_search_pattern>::=
    {<node_alias> {
                 	{ <-( <edge_alias> )- }
               	| { -( <edge_alias> )-> }
             	<node_alias>
             	}
 	}
 	[ { AND } { ( <graph_search_pattern> ) } ]
 	[ ,...n ]
 
<node_alias> ::=
    node_table_name | node_alias
 
<edge_alias> ::=
    edge_table_name | edge_alias

παραδείγματα

Ας δούμε μερικά παραδείγματα.

Το παρακάτω ερώτημα εμφανίζει τους υπαλλήλους στους οποίους αναφέρεται ο Smith και ο διευθυντής του.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR
FROM
    empnode e, empnode e1, empReportsTo m
WHERE
    MATCH(e-(m)->e1)
and e.ENAME='SMITH'

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017
Το ακόλουθο ερώτημα αφορά την εύρεση υπαλλήλων και διευθυντών δεύτερου επιπέδου για τη Smith. Αν αφαιρέσετε την πρόταση ΠΟΥ, τότε το αποτέλεσμα θα εμφανίσει όλους τους εργαζόμενους.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR
FROM
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2
WHERE
    MATCH(e-(m)->e1-(m1)->e2)
and e.ENAME='SMITH'

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017
Και τέλος, αίτημα για τριτοβάθμιους υπαλλήλους και διευθυντές.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
FROM
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
WHERE
    MATCH(e-(m)->e1-(m1)->e2-(m2)->e3)
and e.ENAME='SMITH'

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017
Τώρα ας αλλάξουμε κατεύθυνση για να πάρουμε τα αφεντικά του Smith.

SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
FROM
    empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
WHERE
    MATCH(e<-(m)-e1<-(m1)-e2<-(m2)-e3)

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017

Συμπέρασμα

Ο SQL Server 2017 έχει καθιερωθεί ως μια ολοκληρωμένη επιχειρηματική λύση για διάφορες επιχειρηματικές εργασίες πληροφορικής. Η πρώτη έκδοση του SQL Graph είναι πολλά υποσχόμενη. Ακόμη και παρά ορισμένους περιορισμούς, υπάρχει ήδη αρκετή λειτουργικότητα για να εξερευνήσετε τις δυνατότητες των γραφημάτων.

Η λειτουργικότητα SQL Graph είναι πλήρως ενσωματωμένη στο SQL Engine. Ωστόσο, όπως αναφέρθηκε ήδη, ο SQL Server 2017 έχει τους ακόλουθους περιορισμούς:

Χωρίς υποστήριξη πολυμορφισμού.

  • Υποστηρίζονται μόνο συνδέσεις μονής κατεύθυνσης.
  • Οι άκρες δεν μπορούν να ενημερώσουν τις στήλες $from_id και $to_id μέσω UPDATE.
  • Τα μεταβατικά κλεισίματα δεν υποστηρίζονται, αλλά μπορούν να ληφθούν χρησιμοποιώντας CTE.
  • Η υποστήριξη για αντικείμενα OLTP στη μνήμη είναι περιορισμένη.
  • Δεν υποστηρίζονται προσωρινοί πίνακες (Πίνακας με έκδοση συστήματος), προσωρινοί τοπικοί και καθολικοί πίνακες.
  • Οι τύποι και οι μεταβλητές πίνακα δεν μπορούν να δηλωθούν ως NODE ή EDGE.
  • Τα ερωτήματα μεταξύ βάσεων δεδομένων δεν υποστηρίζονται.
  • Δεν υπάρχει άμεσος τρόπος ή οδηγός για τη μετατροπή κανονικών πινάκων σε πίνακες γραφημάτων.
  • Δεν υπάρχει GUI για την εμφάνιση γραφημάτων, αλλά μπορείτε να χρησιμοποιήσετε το Power BI.

Εισαγωγή στις βάσεις δεδομένων γραφημάτων SQL Server 2017

Διαβάστε περισσότερα:

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο