خانه SQL Server Graph Database در پایگاه داده SQL Server SQL Server دستورات SQL نوشته شده توسط: تیم فنی نیک آموز تاریخ انتشار: ۰۲ مهر ۱۴۰۱ آخرین بروزرسانی: ۰۳ آبان ۱۴۰۲ زمان مطالعه: 20 دقیقه ۴.۵ (۲) مقدمه در این مقاله قصد دارم به بررسی ویژگی Graph Database در پایگاه داده SQL Server بپردازم. ویژگی Graph Database از ورژن SQL Server 2017 به این نرمافزار اضافه شده است و برای مدیریت روابط پیچیده و سلسله مراتبی ارائه شده است. میتوان گفت که Graph Database برای نمایش دادههای سلسله مراتبی پیچیدهای که در سیستمهای پایگاه داده رابطهای و پایگاه دادههای NoSQL وجود دارد، معرفی شده است. این ویژگی برای حذف مشکلات کارایی که در اثر تعداد سطوح رابطه و اندازه پایگاه داده به وجود میآید، مورد استفاده است. تعدادی از مواردی که میتوانیم از Graph Database استفاده کنیم عبارتند از: شبکه اجتماعی تشخیص تقلب سیستمهای پیشنهاد دهنده محصول آنالیز شبکه فناوری اطلاعات (IT) سیستمهای پیشنهاد دهنده اجتماعی قسمتهای Graph Database Node: موجودیتهای Graph Database را نشان میدهد. مانند مشتری در مقابل کارمند Edge: نشان دهنده رابطه میان موجودیتها (Node ها) است. پس از اطلاعات مختصری که در مورد Graph Database درSQL Server ارائه شد، برای درک بیشتر یک مثال آزمایشی در مورد استفاده از آن ارائه میدهیم. مثال: موجودیتهای Person, City, Team, Stat را در نظر بگیرید. روابط میان آنها را با Graph Database توصیف میکنیم. در اولین گام، یک پایگاه داده به نام DMCGraph با اجرای کد زیر ایجاد میکنیم تا سناریو را پیادهسازی کنیم. USE master; GO DROP DATABASE IF EXISTS DMCGraph; GO CREATE DATABASE DMCGraph; GO در گام دوم، جداول node را ایجاد میکنیم. ابتدا برای User اقدام میکنیم. USE DMCGraph; GO DROP TABLE IF EXISTS Users; GO CREATE TABLE Users ( UserID INT IDENTITY PRIMARY KEY, UserName NVARCHAR(100) NOT NULL, ) AS NODE; با نگاهی به کد بالا، متوجه میشوید که روال ایجاد node مشابه ایجاد جداول است با این تفاوت که عبارت AS NODE را به انتهای سینتکس ایجاد جدول اضافه کرده است. node با نام Users شامل UserID و Username است. توجه کنید همیشه باید یک کلید اصلی در node وجود داشته باشد. برای مشخص کردن اینکه یک جدول node یا edge است از ستونهای is_node و is_edge در جدول سسیستمی sys.tables استفاده میکنیم. کوئری زیر این اطلاعات را نشان میدهد: select name, is_node, is_edge from sys.tables همان طور که در تصویر بالا مشاهده میکنید، جدولی به نام Users یک node است. قبلاً گفتیم که هنگام تعریف یک node از عبارت AS NODE استفاده میکنیم. اکنون یک graph table به نام users داریم و میتوانیم دادهها را در آن درج کنیم. insert into Users values (‘Caglar’),(‘Baki’),(‘Contemporary’),(‘Musa’),(‘Sait’),(‘Burak’) با کوئری زیر محتوای node با نام users را دریافت میکنیم: select * from dbo.Users همان طور که مشاهده میکنید غیر از ستونهای UserID و UserName که تعریف کرده بودیم، ستون دیگری نیز نمایش داده شده است. این ستون شامل دادههای جیسون است و به صورت پیشفرض از صفر شروع میشود. مشابه روال ایجاد Users در اینجا node هایی به نام Team، Stat و city را ایجاد میکنیم. ایجاد Team USE DMCGraph; GO DROP TABLE IF EXISTS Teams; GO CREATE TABLE Teams ( TeamID INT IDENTITY PRIMARY KEY, TeamName NVARCHAR(100) NOT NULL, ) AS NODE; INSERT INTO Teams (TeamName) VALUES (‘Galatasaray’),(‘Fenerbahçe’),(‘Beşiktaş’),(‘Trabzonspor’),(‘Başakşehir’) ایجاد Stat USE DMCGraph; GO DROP TABLE IF EXISTS Stat; GO CREATE TABLE Stat ( StatID INT IDENTITY PRIMARY KEY, StatName NVARCHAR(100) NOT NULL, ) AS NODE; INSERT INTO Stat (StatName) VALUES (‘Türk Telekom Arena’),(‘Şükrüsaraçoğlu’),(‘Vodafone Arena’),(‘Avni Aker Stadı’),(‘Fatih Terim Stadı’) ایجاد city USE DMCGraph; GO DROP TABLE IF EXISTS Cities; GO CREATE TABLE Cities ( CityID INT IDENTITY PRIMARY KEY, CityName NVARCHAR(100) NOT NULL, ) AS NODE; INSERT INTO Cities (CityName) VALUES (‘İstanbul’),(‘Trabzon’) تا اینجا nodeهای مورد نیاز برای Graph Database را ایجاد کردیم. حالا یک edge ایجاد میکنیم. Edgeهایی به نام FavoriteTeam، WhichCityTeam و TeamsInStad ایجاد میکنیم. DROP TABLE IF EXISTS RetainedTeam; GO CREATE TABLE RetainedTeam AS EDGE; DROP TABLE IF EXISTS WhichCityTeam; GO CREATE TABLE WhichCityTeam AS EDGE; DROP TABLE IF EXISTS TeamsStad; GO CREATE TABLE TeamsStad AS EDGE; س از اجرای کد بالا، مقادیر is_node و is_edge را در sys.tables بررسی میکنیم. همان طور که در تصویر بالا مشاهده میکنید، Edge ها به درستی ایجاد شدهاند. Edge برای تعریف رابطه بین دو یا چند node به کار میرود. اکنون برای درج در Edgeاقدام میکنیم. با فرض اینکه کاربر ابزاری را در دست دارد، یک Edge به نام retainedteam را درج میکنیم. برای کاربر شماره ۱ اقدام میکنیم. رابطهای میان user #1 با team #1 برقرار میکنیم. insert into retainedteam($from_id, $to_id) values ((SELECT $node_id FROM Users WHERE UserID = 1), (SELECT $node_id FROM Teams WHERE TeamID = 1)); این عملیات را مجدد برای کاربر شماره ۱ انجام میدهیم. رابطهای میان user #1 با team #4 برقرار میکنیم. insert into retainedteam($from_id, $to_id) values ((SELECT $node_id FROM Users WHERE UserID = 1), (SELECT $node_id FROM Teams WHERE TeamID = 4)); این عملیات را برای کاربر شماره ۲ انجام میدهیم. رابطهای میان user #2 با team #3 برقرار میکنیم. insert into retainedteam($from_id, $to_id) values ((SELECT $node_id FROM Users WHERE UserID = 2), (SELECT $node_id FROM Teams WHERE TeamID = 3)); این عملیات را برای کاربر شماره ۳ انجام میدهیم. رابطهای میان user #3 با team #1 برقرار میکنیم. insert into retainedteam($from_id, $to_id) values ((SELECT $node_id FROM Users WHERE UserID = 3), (SELECT $node_id FROM Teams WHERE TeamID = 1)); یک رکورد برای whichCityTeam اضافه میکنیم. team شماره ۱ را برای شهر شماره ۱ اضافه کردم. insert into whichCityTeam($from_id, $to_id) values ((SELECT $node_id FROM Teams WHERE TeamId = 1), (SELECT $node_id FROM Cities WHERE CityId = 1)) team شماره ۴ را برای city شماره ۲ اضافه کردم. insert into whichCityTeam($from_id, $to_id) values ((SELECT $node_id FROM Teams WHERE TeamId = 4), (SELECT $node_id FROM Cities WHERE CityId = 2)) team شماره ۳ را برای city شماره ۱ اضافه کردم. insert into whichCityTeam($from_id, $to_id) values ((SELECT $node_id FROM Teams WHERE TeamId = 3), (SELECT $node_id FROM Cities WHERE CityId = 1)) یک رکورد برای TeamsStadium اضافه میکنم. team شماره ۱ را با stat شماره ۱ مرتبط کردم. insert into TeamsStadium($from_id, $to_id) values ((SELECT $node_id FROM Teams WHERE TeamId = 1), (SELECT $node_id FROM Stat WHERE StatId = 1)) team شماره ۲ را با stat شماره ۲ مرتبط کردم. insert into TeamsStadium($from_id, $to_id) values ((SELECT $node_id FROM Teams WHERE TeamId = 2), (SELECT $node_id FROM Stat WHERE StatId = 2)) من team شماره ۳ را با stat شماره ۳ مرتبط کردم. insert into TeamsStadium($from_id, $to_id) values ((SELECT $node_id FROM Teams WHERE TeamId = 3), (SELECT $node_id FROM Stat WHERE StatId = 3)) برای مشاهده دادهها در دستور select باید عبارت match را در شرط Where مشخص کنید. به عنوان مثال، برای نمایش team هایی که user در اختیار دارند، میتوانیم از کوئری زیر استفاده کنیم. SELECT u.UserName, t.TeamName FROM Users u, retainedteam tt, Teams t WHERE MATCH(u-(tt)->t); در مثال بالا، برای users node، retainedteam با نام مستعار tt و teams node را با نام مستعار t نام گذاری کردم. به همین ترتیب با روالی مشابه یک مثال دیگر میزنیم. شهرهایی که میزبان تیم هستند را با کوئری زیر به دست میآوریم. select t.TeamName,c.CityName from Teams as t, whichCityTeam as hst,Cities as c WHERE MATCH(t-(hst)->c); من از نام مستعار t برای Teams node، hst برای WhichCityTeam و c برای Cities استفاده کردم. خروجی کوئری زیر شامل تیمهای کاربران و شهرهای تیمها میشود. select u.UserName, t.TeamName,C.CityName from Users as u, Teams as t, Cities as c, TutulanTakim as tt, HangiSehirTakimi as hst where ۱=۱ and Match(u-(tt)->t) and Match(t-(hst)->c) برای حذف دادهها برای انجام عملیات Delete در Edge، باید مقادیر $from_id و $to_id را مشخص کنید. delete from retainedteam where ۱=۱ and $from_id = (select $node_id from users where UserId = 1 ) and $to_id = (select $node_id from Teams where TeamId =4 ) وقتی دوباره کوئری بالا را اجرا کنید، اطلاعات Trabzonspor را مشاهده نخواهید کرد. جمع بندی Graph database ها در حال تغییر روش اجرای بسیاری از عملیاتها از ساده تا پیچیده هستند. در این مقاله به طور خلاصه نحوه ایجاد node ها و edge ها در Graph database ها را بررسی کردیم. همچنین نحوه پیادهسازی روابط بین node های مختلف و چگونگی افزودن، خواندن و حذف edge ها را بررسی کردیم. چه رتبه ای میدهید؟ میانگین ۴.۵ / ۵. از مجموع ۲ اولین نفر باش دانلود مقاله Graph Database در پایگاه داده SQL Server فرمت PDF صفحه حجم مگابایت دانلود مقاله معرفی نویسنده مقالات 402 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده تیم فنی نیک آموز مقالات مرتبط ۰۲ آبان SQL Server ابزار Database Engine Tuning Advisor؛ مزایا، کاربردها و روش استفاده تیم فنی نیک آموز ۱۵ مهر SQL Server معرفی Performance Monitor ابزار مانیتورینگ SQL Server تیم فنی نیک آموز ۱۱ مهر SQL Server راهنمای جامع مانیتورینگ بکاپ ها در SQL Server تیم فنی نیک آموز ۰۸ مهر SQL Server Resource Governor چیست؟ آشنایی با نحوه پیکربندی و اهمیت های آن تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ