• Category
      No categories were found that matched your criteria.
      • Manufacturer
        No manufacturers were found that matched your criteria.
      • Products
        No products were found that matched your criteria.
          • Blog
            No blog posts were found that matched your criteria.

          پایگاه داده گراف در Sql Server - قسمت شش: پرس و جو از یک پایگاه داده گراف SQL Server

          پرس و جو از همه چیز در جدول گره به آسانی ABC است:

          SELECT * from Restaurants

          خودشه! و می توانید همین کار را در جدول های لبه ای انجام دهید.

          با این وجود ، پرس و جو از 2 جدول گره مربوطه برای استفاده از عملکرد MATCH در بند WHERE نیاز به 2 جدول گره و 1 جدول لبه دارد. با آنچه که ما از JOIN ها استفاده نخواهیم کرد کاملاً متفاوت است. بیایید با یک پرس و جو ساده با استفاده از MATCH شروع کنیم. با این کار تمام رستوران ها و غذایی که آنها سرو می کنند نمایش داده می شود.

          مثال 1: استفاده از MATCH

          SELECT Restaurants.Name, FoodBeverages.Name, FoodBeverages.Amount
          FROM Restaurants, isServed, FoodBeverages
          WHERE MATCH(FoodBeverages<-(isServed)-Restaurants)

          بیایید کوئری را تفکیک کنیم:

          رستوران ها را انتخاب کنید. نام ، FoodBeverages. نام ، FoodBeverages. مقدار

          - این به سادگی مشخصات (ستون ها) گره را لیست می کند. برای ارجاع به خصوصیات می توانید از نام جدول یا نام مستعار جدول استفاده کنید.

          از رستوران ها ، سرویس خوراکی ، نوشیدنی های غذایی

          - بند FROM شامل تمام جداول گره و لبه مورد نیاز شما در پرس و جو است. در این حالت ، جداول گره رستوران ها و FoodBeverages و جدول لبه isServe. اگر مدت زمان زیادی است که عبارات SQL را برنامه نویسی می کنید ، به نظر می رسد نحوه استاندارد شبیه SQL-89 می باشد:

          SELECT.

          WHERE MATCH(FoodBeverages<-(isServed)-Restaurants)

          - اگر قبلاً به پایگاه داده های گراف نرفته باشید ، این قسمت همان بخشی است که باید به آن عادت کند. اگر بخواهم این را به صورت گرافیکی نمایش دهم ، به صورت زیر خواهد بود:

           پرس و جو از یک پایگاه داده گراف SQL Server

          همانطور که می بینید ، پرس و جو دقیقاً از گراف مفهومی که قبلاً برای رستوران ها و غذاهای آشپزی تهیه کردیم پیروی می کند. و جداول لبه همیشه داخل پرانتز قرار می گیرند. در این حالت ، از جدول لبه isServe برای ارتباط رستوران به FoodBeverages استفاده می شود.

          اکنون ، به پیکان ها توجه کنید. هنگامی که سوابق را در جدول لبه وارد می کنید ، تعریف می کنید که  from_id$ و  to_id $چیست. این از جایی شروع می شود که پیکان شروع و پایان یابد.

          استعلام پایگاه داده های گراف ساده تر و طبیعی تر است زیرا اساساً از مدل مفهومی پیروی می کند.

          قبل از اینکه با این مثال به پایان برسیم ، در زیر مجموعه نتایج آمده است:

          پرس و جو از یک پایگاه داده گراف SQL Server

          مثال 2: استفاده از MATCH

          این بار ، بیایید مثال دیگری را امتحان کنیم که ممکن است در وب سایت سیستم تحویل غذا مشترک باشد. تصور کنید که مشتری برای اولین بار غذا سفارش می دهد. از آنجا که گرسنه است ، دوست دارد از نزدیکترین رستوران غذا سفارش دهد.

          در این مثال ، مشتری Fletcher (CustomerID = 3) در دانشکده پزشکی دانشگاه آتنئو مانیل است (LocationID = 7). او باید از رستوران های مجاور واقع در فاصله 1000 متری او مطلع شود. این همان چیزی است که از پرس و جو ایجاد خواهد شد:

          -- this will be used to store Fletcher's location - the place where the
          -- order will be delivered
          DECLARE @deliveryLocation GEOGRAPHY-- Get the location of Fletcher. We assume that Fletcher defined his location from his account with a map.
          SELECT @deliveryLocation = Locations.GeoLocation
          FROM Customers, willReceiveIn, Locations
          WHERE MATCH(Customers-(willReceiveIn)->Locations)
          AND Customers.CustomerID = 3-- Get the restaurants within 1000m from Fletcher's location
          SELECT
           Restaurants.Name
          ,Restaurants.Description
          ,Restaurants.Opening
          ,Restaurants.Closing
          ,Locations.Description
          ,ROUND(Locations.GeoLocation.STDistance(@deliveryLocation),2) AS Distance
          FROM Restaurants, isLocated, Locations
          WHERE MATCH(Restaurants-(isLocated)->Locations)
          AND locations.GeoLocation.STDistance(@deliveryLocation) <= 1000
          ORDER BY Distance

          پرس و جو از یک پایگاه داده گراف SQL Server

          خوب است ، نه؟

          از آنجا که هم از محل رستوران و هم از مشتری اطلاع داریم ، می توانیم فاصله بین آنها را با استفاده از نوع داده جغرافیایی و عملکرد STDistance اندازه گیری کنیم. من در پست بعدی بیشتر در مورد نوع داده جغرافیایی توضیح خواهم داد.

          مثال 3: پاسخ دادن به "افرادی که <food item> سفارش دادند نیز سفارش دادند ..."

          اکنون ، از آنجا که این سیستم از یک توصیه در زمان واقعی استفاده می کند ، بیایید کمی پیچیده تر مانند برگرداندن نتیجه برای "افرادی که <ماده غذایی> نیز سفارش داده اند ..."

          در این مثال ، ما می خواهیم بدانیم که افراد هنگام سفارش Berry Pomegranate Power (FoodBeverageID = 16) از آب جامبا چه چیز دیگری سفارش می دهند.

          SELECT
          fb2.Name
          FROM Orders o1, isIncluded ii1, OrderDetails od1, includes i1, FoodBeverages fb1
          ,isIncluded ii2, OrderDetails od2, includes i2, FoodBeverages fb2
          WHERE MATCH(fb1<-(i1)-od1<-(ii1)-o1-(ii2)->od2-(i2)->fb2)
          AND fb1.FoodBeverageID = 16
          AND fb2.FoodBeverageID <> 16

          بیایید کوئری را تفکیک کنیم.

          از سفارشات o1 ، شامل ii1 ، سفارش جزئیات od1 ، شامل i1 ، FoodBeverages fb1

          ، isIncluded ii2 ، OrderDetails od2 ، شامل i2 ، FoodBeverages fb2 است

          برای رسیدن به نتیجه مورد نظر ما 2 چیز وجود دارد:

          سفارشات حاوی توت بری انار (FoodBeverageID = 16). این امر با ذکر جدول های Order o1، isIncluded ii1، OrderDetails od1، شامل i1، FoodBeverages fb1 انجام می شود.

          همین سفارشات حاوی موارد دیگری غیر از Berry Pomegranate Power (FoodBeverageID <> 16) است. این کار با اضافه کردن isIncluded ii2 ، OrderDetails od2 ، شامل i2 ، FoodBeverages fb2 انجام می شود.

          ما دو برابر جدول گره و لبه را اضافه کردیم تا 2 شرط بالا را برآورده کنیم.

          WHERE MATCH (fb1 <- (i1) -od1 <- (ii1) -o1- (ii2) -> od2- (i2) -> fb2)

          این مسیر رسم گراف از FoodBeverages است <- OrderDetails <- Order -> OrderDetails -> FoodBeverages. این در گراف زیر نشان داده شده است:

          پرس و جو از یک پایگاه داده گراف SQL Server

          بند WHERE با MATCH برای عبور از گراف به این ترتیب ساخته شده است. برای فیلتر کردن بیشتر شرایط و بدست آوردن سوابق دقیق مورد نظر ما ، شرایط لازم به بند WHERE پیوست می شود:

          AND fb1.FoodBeverageID = 16 - برای سفارشات با Berry Pomegranate Power

          AND fb2.FoodBeverageID <> 16 - برای همان سفارشات با موارد دیگری به غیر از Berry Pomegranate Power

          و نتیجه؟ لطفا پایین را ببینید:

          پرس و جو از یک پایگاه داده گراف SQL Server

          مثال 4: پاسخ دادن به "افرادی که از <Restaurant> سفارش دادند نیز از .. سفارش دادند"

          بیایید توصیه دیگری را امتحان کنیم.

          در این مثال ، ما پاسخ خواهیم داد "افرادی که از Jamba Juice سفارش دادند نیز از from سفارش دادند".

          بیایید با استفاده از گره ها و لبه های مختلف از همان منطق استفاده کنیم. در اینجا می رود:

          SELECT DISTINCT
          r1.Name
          ,r1.Description
          ,r1.Opening
          ,r1.Closing
          FROM Restaurants r1, received rcv1, Orders o1, ordered ord1, Customers c
          ,Restaurants r2, received rcv2, Orders o2, ordered ord2
          WHERE MATCH(r1-(rcv1)->o1<-(ord1)-c-(ord2)->o2<-(rcv2)-r2)
          AND r1.RestaurantID <> 4
          AND r2.RestaurantID = 4

          باز هم ، بیایید تشریح کنیم:

          از رستوران های r1 ، دریافت rcv1 ، سفارشات o1 ، سفارش سفارش ، مشتریان ج

          ، رستوران ها r2 ، rcv2 دریافت کردند ، سفارشات o2 ، سفارش ord2

          مسیر گراف مورد نیاز ما Restoran-> سفارشات <- مشتری- سفارشات <-رستوران است.

          WHERE MATCH (r1- (rcv1) -> o1 <- (ord1) -c- (ord2) -> o2 <- (rcv2) -r2)

          این بند را می توان با استفاده از شکل 11 زیر به صورت گرافیکی نشان داد:

          پرس و جو از یک پایگاه داده گراف SQL Server

          AND r1.RestaurantID <> 4 AND r2.RestaurantID = 4

          و مانند مثال قبلی ، به 2 شرط لازم نیز نیاز داریم:

          ابتدا مشتریانی که از Jamba Juice سفارش داده اند (RestaurantID = 4).

          سپس ، همان مشتریانی که از رستوران های دیگری به غیر از آب میوه جمبا نیز سفارش داده اند (RestaurantID <> 4).

          و قبل از اینکه فراموش کنیم ، در زیر رستوران هایی وجود دارد که مردم به غیر از آب جامبا نیز از آنها سفارش داده اند:

           پرس و جو از یک پایگاه داده گراف SQL Server

          بنابراین ، چطور دوست دارید تاکنون جداول گراف را پرس و جو کنید؟

          آیا تعجب می کنید که آیا همه اینها ارزش آن را دارند؟ با استفاده از یک مدل رابطه ای نیز می توانیم همین کار را انجام دهیم.

          در واقع ، ممکن است در قسمت بعدی غافلگیر شوید.

          Leave your comment

          back to top
          Filters