مقدمة إلى قواعد بيانات SQL Server 2017 Graph

قبل بدء الدورة مطور خادم MS SQL لقد قمنا بإعداد ترجمة أخرى مفيدة لك.

قواعد بيانات الرسم البياني هي تقنية مهمة لمحترفي قواعد البيانات. أحاول متابعة الابتكارات والتقنيات الجديدة في هذا المجال وبعد العمل مع قواعد البيانات العلائقية و NoSQL ، أرى أن دور قواعد بيانات الرسم البياني أصبح أكثر فأكثر. عند العمل باستخدام البيانات الهرمية المعقدة ، لا تكون قواعد البيانات التقليدية فحسب ، بل أيضًا NoSQL غير فعالة. في كثير من الأحيان ، مع زيادة عدد مستويات الارتباط وحجم قاعدة البيانات ، هناك انخفاض في الأداء. وكلما أصبحت العلاقات أكثر تعقيدًا ، يزداد أيضًا عدد الروابط المشتركة.

بالطبع ، في النموذج العلائقي ، توجد حلول للعمل مع التسلسلات الهرمية (على سبيل المثال ، استخدام CTE العودية) ، لكن هذه الحلول لا تزال قائمة. في الوقت نفسه ، تعمل وظائف قواعد بيانات مخطط SQL Server على تسهيل التعامل مع مستويات متعددة من التسلسل الهرمي. يتم تبسيط نموذج البيانات والاستعلامات ، وبالتالي يتم زيادة كفاءتها. يقلل بشكل كبير من كمية التعليمات البرمجية.

قواعد بيانات الرسم البياني هي لغة تعبيرية لتمثيل الأنظمة المعقدة. تُستخدم هذه التقنية بالفعل على نطاق واسع في صناعة تكنولوجيا المعلومات في مجالات مثل الشبكات الاجتماعية وأنظمة مكافحة الاحتيال وتحليل شبكة تكنولوجيا المعلومات والتوصيات الاجتماعية وتوصيات المنتج والمحتوى.

تعد وظيفة قاعدة بيانات الرسم البياني في SQL Server مناسبة للسيناريوهات التي تكون فيها البيانات شديدة الترابط ولها علاقات محددة جيدًا.

نموذج بيانات الرسم البياني

الرسم البياني عبارة عن مجموعة من الرؤوس (العقد ، العقدة) والحواف (العلاقات ، الحافة). تمثل الرؤوس كيانات ، وتمثل الحواف الروابط التي يمكن أن تحتوي سماتها على معلومات.

نماذج قاعدة بيانات الرسم البياني الكيانات كرسم بياني كما هو محدد في نظرية الرسم البياني. هياكل البيانات هي رؤوس وحواف. السمات هي خصائص الرؤوس والحواف. الاتصال هو اتصال القمم.

بخلاف نماذج البيانات الأخرى ، تعطي قواعد بيانات الرسم البياني الأولوية للعلاقات بين الكيانات. لذلك ، ليست هناك حاجة لحساب العلاقات باستخدام مفاتيح خارجية أو بطريقة أخرى. من الممكن إنشاء نماذج بيانات معقدة باستخدام تجريدات الرأس والحافة فقط.

في عالم اليوم ، تتطلب علاقات النمذجة المزيد والمزيد من التقنيات المتطورة. لنمذجة العلاقات ، يوفر SQL Server 2017 إمكانيات قاعدة بيانات الرسم البياني. يتم تمثيل رؤوس وحواف الرسم البياني كأنواع جديدة من الجداول: NODE و EDGE. تستخدم استعلامات الرسم البياني وظيفة T-SQL جديدة تسمى MATCH (). نظرًا لأن هذه الوظيفة مضمنة في SQL Server 2017 ، يمكن استخدامها في قواعد البيانات الموجودة لديك دون الحاجة إلى أي تحويل لقاعدة البيانات.

فوائد نموذج الرسم البياني

في الوقت الحاضر ، تتطلب الشركات والمستخدمون تطبيقات تعمل مع المزيد والمزيد من البيانات ، مع توقع الأداء العالي والموثوقية. يوفر التمثيل البياني للبيانات وسيلة ملائمة للتعامل مع العلاقات المعقدة. هذا النهج يحل العديد من المشاكل ويساعد في الحصول على نتائج ضمن سياق معين.

يبدو أن العديد من التطبيقات ستستفيد من قواعد بيانات الرسم البياني في المستقبل.

نمذجة البيانات: من نمذجة الارتباط إلى نمذجة الرسم البياني

مقدمة إلى قواعد بيانات SQL Server 2017 Graph
مثال

لنلقِ نظرة على مثال للهيكل التنظيمي مع تسلسل هرمي للموظفين: موظف يقدم تقاريره إلى مدير ، ومدير يقدم تقاريره إلى مدير كبير ، وما إلى ذلك. اعتمادًا على الشركة المحددة ، يمكن أن يكون هناك أي عدد من المستويات في هذا التسلسل الهرمي. ولكن مع زيادة عدد المستويات ، يصبح حساب العلاقات في قاعدة البيانات العلائقية أكثر صعوبة. من الصعب جدًا تخيل التسلسل الهرمي للموظفين أو التسلسل الهرمي في التسويق أو اتصالات وسائل التواصل الاجتماعي. دعونا نرى كيف يمكن لـ SQL Graph حل مشكلة التعامل مع مستويات مختلفة من التسلسل الهرمي.

في هذا المثال ، لنقم بعمل نموذج بيانات بسيط. قم بإنشاء جدول للموظفين EMP مع معرف إبنو والعمود MGRأ يشير إلى معرف رئيس (مدير) الموظف. يتم تخزين جميع المعلومات المتعلقة بالتسلسل الهرمي في هذا الجدول ويمكن الاستعلام عنها باستخدام الأعمدة إبنو и MGR.

مقدمة إلى قواعد بيانات SQL Server 2017 Graph
يُظهر الرسم التخطيطي التالي أيضًا نفس نموذج مخطط المؤسسة مع أربعة مستويات من التداخل في شكل مألوف أكثر. الموظفون هم رؤوس الرسم البياني من الجدول EMP. الكيان "الموظف" مرتبط بنفسه من خلال العلاقة "يرسل" (ReportsTo). من حيث الرسم البياني ، الرابط هو حافة (EDGE) تربط العقد (NODEs) للموظفين.

مقدمة إلى قواعد بيانات SQL Server 2017 Graph

لنقم بإنشاء جدول عادي 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 Graph
لنلق نظرة الآن على تمثيل نفس البيانات في شكل رسم بياني. تحتوي عقدة الموظف على العديد من السمات وترتبط بنفسها بعلاقة "عمليات الإرسال" (EmplReportsTo). EmplReportsTo هو اسم العلاقة.

قد يحتوي جدول الحافة (EDGE) أيضًا على سمات.

مقدمة إلى قواعد بيانات SQL Server 2017 Graph
قم بإنشاء جدول عقدة 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;

الآن دعنا نحول البيانات من جدول عادي إلى رسم بياني واحد. التالي INSERT يدرج البيانات من جدول علائقية EMP.

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

مقدمة إلى قواعد بيانات SQL Server 2017 Graph
في جدول العقد في عمود خاص $node_id_* يتم تخزين معرف المضيف على هيئة JSON. تحتوي الأعمدة المتبقية من هذا الجدول على سمات العقدة.

إنشاء الحواف (EDGE)

يشبه إنشاء جدول حافة إلى حد كبير إنشاء جدول عقدة ، باستثناء الكلمة الأساسية كما إيدج.

CREATE TABLE empReportsTo(Deptno int) AS EDGE

مقدمة إلى قواعد بيانات SQL Server 2017 Graph

الآن دعنا نحدد العلاقات بين الموظفين باستخدام الأعمدة إبنو и MGR. يوضح مخطط المؤسسة بوضوح كيفية الكتابة INSERT.

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) تمثل العلاقة بين العقد. بالإضافة إلى ذلك ، يمكن أن تحتوي الحواف على خصائص إضافية. في حالتنا ، هذا ديبتنو.

طرق عرض النظام

في عرض النظام sys.tables يوجد عمودين جديدين:

  1. is_edge
  2. is_node

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

مقدمة إلى قواعد بيانات SQL Server 2017 Graph

ssms

توجد الكائنات المتعلقة بالرسوم البيانية في مجلد جداول الرسم البياني. يتم تمييز رمز جدول العقدة بنقطة ، ويتم تمييز رمز جدول الحافة بدائرتين متصلتين (تشبه إلى حد ما النظارات).

مقدمة إلى قواعد بيانات SQL Server 2017 Graph

تعبير المطابقة

التعبير MATCH مأخوذة من CQL (لغة Cypher Query). هذه طريقة فعالة للاستعلام عن خصائص الرسم البياني. يبدأ 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

أمثلة

لنلقِ نظرة على بعض الأمثلة.

يعرض الاستعلام أدناه الموظفين الذين يتبعهم سميث ومديره.

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 Graph
الاستعلام التالي للبحث عن موظفين ومدراء من المستوى الثاني لـ Smith. إذا قمت بإزالة العرض WHERE، ثم سيتم عرض جميع الموظفين كنتيجة لذلك.

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 Graph
وأخيرًا ، طلب موظفين ومديرين من المستوى الثالث.

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 Graph
الآن دعونا نغير الاتجاه للحصول على رؤساء سميث.

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 Graph

اختتام

أثبت SQL Server 2017 نفسه كحل متكامل للمؤسسات لمجموعة متنوعة من احتياجات تكنولوجيا المعلومات للأعمال. يعد الإصدار الأول من SQL Graph واعدًا للغاية. على الرغم من بعض القيود ، هناك بالفعل وظائف كافية لاستكشاف إمكانيات الرسوم البيانية.

تم دمج وظائف SQL Graph بالكامل في SQL Engine. ومع ذلك ، كما ذكرنا سابقًا ، يحتوي SQL Server 2017 على القيود التالية:

لا يوجد دعم لتعدد الأشكال.

  • يتم دعم الروابط أحادية الاتجاه فقط.
  • لا يمكن لـ Edges تحديث أعمدة $ from_id و $ to_id عبر UPDATE.
  • لا يتم دعم عمليات الإغلاق المتعدية ، ولكن يمكن الحصول عليها باستخدام CTEs.
  • دعم محدود لكائنات OLTP في الذاكرة.
  • لا يتم دعم الجداول الزمنية (جدول زمني بإصدار النظام) والجداول المؤقتة المحلية والعامة.
  • لا يمكن التصريح عن أنواع الجدول ومتغيرات الجدول على أنها NODE أو EDGE.
  • الاستعلامات عبر قواعد البيانات غير مدعومة.
  • لا توجد طريقة مباشرة أو نوع من المعالج (معالج) لتحويل الجداول العادية إلى جداول الرسم البياني.
  • لا توجد واجهة مستخدم رسومية لعرض الرسوم البيانية ، ولكن يمكن استخدام Power BI.

مقدمة إلى قواعد بيانات SQL Server 2017 Graph

اقرأ أكثر:

المصدر: www.habr.com

إضافة تعليق