• Products
    مطابق با جستجوی شما محصولی یافت نشد. توجه فرمایید که در جستجو ترتیب عبارات وارد شده مهم می باشد.

    پایگاه داده گراف در Sql Server - قسمت پنج: چگونه اولین پایگاه داده گراف SQL Server خود را ایجاد کنیم

    در ادامه ، بعد از اینکه گره ها و لبه ها را روی کاغذ یا هر نرم افزار نمودارسازی رسم کردید ، با استفاده از ویرایشگر پرس و جو ، جداول مربوط به گره ها و لبه ها را در SSMS ایجاد کنید.

    در زیر نحو مورد نیاز آمده است:

    -- For a Node table
    CREATE TABLE <tablename>
    (
        column1 <datatype>,
        column2 <datatype>,
        columnN <datatype>
    ) AS NODE-- For an Edge table
    CREATE TABLE <tablename>
    (
        column1 <datatype>,
        column2 <datatype>,
        columnN <datatype>
    ) AS EDGE

    به کلمات کلیدی AS NODE و AS EDGE توجه کنید. این کلمات کلیدی یک جدول گراف را از سایر جداول متمایز می کند.

    اما اگر ترجیح می دهید ، روی پوشه Tables در SSMS کلیک راست کرده و New -> Graph Table -> Node Table را انتخاب کنید. و برای جداول لبه ، New-> Graph Table -> Edge Table را انتخاب کنید. تصویر را در شکل زیر مشاهده کنید:

    چگونه اولین پایگاه داده گراف SQL Server خود را ایجاد کنیم

    به دنبال آن ، یک پنجره جستجوی جدید ظاهر می شود. نام جدول و زمینه های مورد نیاز خود را پر کنید ، سپس دستورات را اجرا کنید.

    فهرست ها به صورت خودکار برای  node_ids$ جداول گره شما و  edge_ids $جداول لبه شما ایجاد می شوند. اما شما باید به دلایل عملکردی یک شاخص دیگر برای  from_id $و  to_id $هر یک از جداول لبه خود ایجاد کنید.

    به مثال زیر مراجعه کنید:

    CREATE UNIQUE INDEX ix_ordered_from_to on ordered ($from_id, $to_id)

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

    CREATE TABLE Restaurants
    (
    [RestaurantID] INT PRIMARY KEY NOT NULL,
    [Name] VARCHAR(20) NOT NULL,
    [Description] VARCHAR(50) NOT NULL,
    [Opening] TIME NOT NULL,
    [Closing] TIME NOT NULL,
    [DeliveryCharge] SMALLMONEY DEFAULT 0 NOT NULL
    ) AS NODECREATE TABLE Locations
    (
    [LocationID] INT PRIMARY KEY NOT NULL,
    [Description] VARCHAR(50) NOT NULL,
    [GeoLocation] GEOGRAPHY NOT NULL
    ) AS NODECREATE TABLE FoodBeverages
    (
    [FoodBeverageID] INT PRIMARY KEY NOT NULL,
    [Name] VARCHAR(50) NOT NULL,
    [Amount] MONEY NOT NULL
    ) AS NODECREATE TABLE Orders
    (
    [OrderID] INT PRIMARY KEY NOT NULL,
    [CustomerID] INT NOT NULL,
    [OrderDate] DATETIME NOT NULL,
    [TotalCost] MONEY NOT NULL,
    [LocationID] INT NOT NULL,
    [RestaurantID] INT NOT NULL
    ) AS NODECREATE TABLE OrderDetails
    (
    [OrderDetailID] INT PRIMARY KEY NOT NULL,
    [OrderID] INT NOT NULL,
    [FoodBeverageID] INT NOT NULL,
    [Quantity] TINYINT NOT NULL,
    [UnitCost] MONEY NOT NULL,
    [ComputedCost] MONEY NOT NULL
    ) AS NODECREATE TABLE Customers
    (
    [CustomerID] INT PRIMARY KEY NOT NULL,
    [Name] VARCHAR(50) NOT NULL,
    [email] VARCHAR(50) NOT NULL,
    [password] VARCHAR(10) NOT NULL
    ) AS NODECREATE TABLE isServed AS EDGE
    CREATE TABLE isLocated AS EDGE
    CREATE TABLE ordered AS EDGE
    CREATE TABLE isIncluded AS EDGE
    CREATE TABLE received AS EDGE
    CREATE TABLE includes AS EDGE
    CREATE TABLE willReceiveIn AS EDGECREATE UNIQUE INDEX ix_isIncludes_from_to on isIncluded ($from_id, $to_id)
    CREATE UNIQUE INDEX ix_includes_from_to on includes ($from_id, $to_id)
    CREATE UNIQUE INDEX ix_ordered_from_to on ordered ($from_id, $to_id)
    CREATE UNIQUE INDEX ix_received_from_to on received ($from_id, $to_id)
    CREATE UNIQUE INDEX ix_isServed_from_to on isServed ($from_id, $to_id)
    CREATE UNIQUE INDEX ix_isLocated_from_to on isLocated ($from_id, $to_id)
    CREATE UNIQUE INDEX ix_willReceiveIn_from_to on willReceiveIn ($from_id, $to_id)

    درج داده های اولیه

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

    شما از دستور INSERT در جداول گره و لبه استفاده خواهید کرد ، دقیقاً مانند آنچه در سایر جدول ها استفاده می کنید. و می توانید مانند مثال زیر رکوردها را به جداول گره اضافه کنید:

    INSERT INTO Restaurants
    VALUES
    (1, 'Subway','American * Sandwiches * Fast Food * Salad','10:00','15:59',0)INSERT INTO FoodBeverages
    VALUES
    (1,'Sliced Chicken and Ham',149.50),
    (2,'Subway Melt',184.00),
    (3,'Meatball Marinara Regular Meal',281.75),
    (4,'Coke in Can',51.75)

    برای جداول لبه ، شما به یک شناسه گره برای  from_id $و یک شناسه گره دیگر برایto_id $  نیاز دارید ، دقیقاً مانند تصویر زیر:

    --  food&beverages served on Subway (RestaurantID = 1)INSERT INTO isServed
    VALUES
    -- for the Sliced Chicken and Ham
    (
     (SELECT $node_id FROM Restaurants r WHERE r.RestaurantID = 1),
     (SELECT $node_id FROM FoodBeverages fb WHERE fb.FoodBeverageID = 1) 
    ),
    -- for the Subway Melt
    (
     (SELECT $node_id FROM Restaurants r WHERE r.RestaurantID = 1),
     (SELECT $node_id FROM FoodBeverages fb WHERE fb.FoodBeverageID = 2)
    ),
    -- for the Meatball Marinara Regular Meal
    (
     (SELECT $node_id FROM Restaurants r WHERE r.RestaurantID = 1),
     (SELECT $node_id FROM FoodBeverages fb WHERE fb.FoodBeverageID = 3) 
    ),
    -- for  the coke in can
    (
     (SELECT $node_id FROM Restaurants r WHERE r.RestaurantID = 1),
     (SELECT $node_id FROM FoodBeverages fb WHERE fb.FoodBeverageID = 4)

    در مثال فوق ، رابطه ای بین رستوران ها و غذایی که آنها سرو می کنند برقرار شد. بنابراین ، شناسه گره رستوران ها و FoodBeverages استفاده شد.

    و این نکته مهم است: برای ایجاد روابط بین جداول گره ، شما رکوردها را به جداول لبه اضافه می کنید.

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

    بعد از اینکه داده های اولیه خود را وارد کردیم ، نوبت به کوئری می رسد.

    توضیحات خود را بنویسید

    back to top
    فیلترگذاری