محدودیتها
در این بخش به معرفی محدودیتهای گراف دیتابیس sql و همچنین یک مثال عملی می پردازیم
- جداول موقت (temporal table) ها نمی توانند از نوع نود و یال باشند
- Table types و table variables ها نمی توانند از نوع نود و یال باشند
- قابلیت temporal table برای جداول نود و یال پشتیبانی نشده است
- جداول نود و یال نمی توانند بصورت memory optimized table ایجاد شوند
- فیلدهای $from_id , $to_id آپدیت نمی شوند و در صورت نیاز به تغییر باید حذف شوند و ارتباط مجدد درج شود
- Cross database کوئری ها برای این جداول پشتیبانی نشده است
یک مثال
موجودیتهای زیر را در نظر بگیرید
پس از تعریف جداول و سپس مقدار دهی آنها به شرح زیر به نتیجه هایی دست پیدا خواهیم کرد
-- Create NODE tables
CREATE TABLE Person (
ID INTEGER PRIMARY KEY
,name VARCHAR(100)
) AS NODE;
CREATE TABLE Restaurant (
ID INTEGER NOT NULL
,name VARCHAR(100)
,city VARCHAR(100)
) AS NODE;
CREATE TABLE City (
ID INTEGER PRIMARY KEY
,name VARCHAR(100)
,stateName VARCHAR(100)
) AS NODE;
-- Create EDGE tables.
CREATE TABLE likes (rating INTEGER) AS EDGE;
CREATE TABLE friendOf AS EDGE;
CREATE TABLE livesIn AS EDGE;
CREATE TABLE locatedIn AS EDGE;
اضافه کردن داده ها
-- Insert data into node tables. Inserting into a node table is same as inserting into a regular table
INSERT INTO Person
VALUES (
1
,'John'
);
INSERT INTO Person
VALUES (
2
,'Mary'
);
INSERT INTO Person
VALUES (
3
,'Alice'
);
INSERT INTO Person
VALUES (
4
,'Jacob'
);
INSERT INTO Person
VALUES (
5
,'Julie'
);
INSERT INTO Restaurant
VALUES (
1
,'Taco Dell'
,'Bellevue'
);
INSERT INTO Restaurant
VALUES (
2
,'Ginger and Spice'
,'Seattle'
);
INSERT INTO Restaurant
VALUES (
3
,'Noodle Land'
,'Redmond'
);
INSERT INTO City
VALUES (
1
,'Bellevue'
,'wa'
);
INSERT INTO City
VALUES (
2
,'Seattle'
,'wa'
);
INSERT INTO City
VALUES (
3
,'Redmond'
,'wa'
);
اضافه کردن داده ها در جداول edge ها و شروع ایجاد روابط با استفاده از node_id$ .. مدیریت لایک ها و …
-- Insert into edge table. While inserting into an edge table,
-- you need to provide the $node_id from $from_id and $to_id columns.
INSERT INTO likes
VALUES (
(
SELECT $NODE_ID
FROM Person
WHERE id = 1
)
,(
SELECT $NODE_ID
FROM Restaurant
WHERE id = 1
)
,9
);
INSERT INTO likes
VALUES (
(
SELECT $NODE_ID
FROM Person
WHERE id = 2
)
,(
SELECT $NODE_ID
FROM Restaurant
WHERE id = 2
)
,9
);
INSERT INTO likes
VALUES (
(
SELECT $NODE_ID
FROM Person
WHERE id = 3
)
,(
SELECT $NODE_ID
FROM Restaurant
WHERE id = 3
)
,9
);
INSERT INTO likes
VALUES (
(
SELECT $NODE_ID
FROM Person
WHERE id = 4
)
,(
SELECT $NODE_ID
FROM Restaurant
WHERE id = 3
)
,9
);
INSERT INTO likes
VALUES (
(
SELECT $NODE_ID
FROM Person
WHERE id = 5
)
,(
SELECT $NODE_ID
FROM Restaurant
WHERE id = 3
)
,9
);
INSERT INTO livesIn
VALUES (
(
SELECT $NODE_ID
FROM Person
WHERE id = 1
)
,(
SELECT $NODE_ID
FROM City
WHERE id = 1
)
);
INSERT INTO livesIn
VALUES (
(
SELECT $NODE_ID
FROM Person
WHERE id = 2
)
,(
SELECT $NODE_ID
FROM City
WHERE id = 2
)
);
INSERT INTO livesIn
VALUES (
(
SELECT $NODE_ID
FROM Person
WHERE id = 3
)
,(
SELECT $NODE_ID
FROM City
WHERE id = 3
)
);
INSERT INTO livesIn
VALUES (
(
SELECT $NODE_ID
FROM Person
WHERE id = 4
)
,(
SELECT $NODE_ID
FROM City
WHERE id = 3
)
);
INSERT INTO livesIn
VALUES (
(
SELECT $NODE_ID
FROM Person
WHERE id = 5
)
,(
SELECT $NODE_ID
FROM City
WHERE id = 1
)
);
INSERT INTO locatedIn
VALUES (
(
SELECT $NODE_ID
FROM Restaurant
WHERE id = 1
)
,(
SELECT $NODE_ID
FROM City
WHERE id = 1
)
);
INSERT INTO locatedIn
VALUES (
(
SELECT $NODE_ID
FROM Restaurant
WHERE id = 2
)
,(
SELECT $NODE_ID
FROM City
WHERE id = 2
)
);
INSERT INTO locatedIn
VALUES (
(
SELECT $NODE_ID
FROM Restaurant
WHERE id = 3
)
,(
SELECT $NODE_ID
FROM City
WHERE id = 3
)
);
-- Insert data into the friendof edge.
INSERT INTO friendof
VALUES (
(
SELECT $NODE_ID
FROM person
WHERE ID = 1
)
,(
SELECT $NODE_ID
FROM person
WHERE ID = 2
)
);
INSERT INTO friendof
VALUES (
(
SELECT $NODE_ID
FROM person
WHERE ID = 2
)
,(
SELECT $NODE_ID
FROM person
WHERE ID = 3
)
);
INSERT INTO friendof
VALUES (
(
SELECT $NODE_ID
FROM person
WHERE ID = 3
)
,(
SELECT $NODE_ID
FROM person
WHERE ID = 1
)
);
INSERT INTO friendof
VALUES (
(
SELECT $NODE_ID
FROM person
WHERE ID = 4
)
,(
SELECT $NODE_ID
FROM person
WHERE ID = 2
)
);
INSERT INTO friendof
VALUES (
(
SELECT $NODE_ID
FROM person
WHERE ID = 5
)
,(
SELECT $NODE_ID
FROM person
WHERE ID = 4
)
);
نمایش داده ها و بازیابی رکوردها .. همینطور که میبینید خروجی کوئری ها بصورت فرمت json هست :
SELECT *
FROM dbo.friendOf
Views: 0
طراح و توسعه دهنده نرم افزار، با سوابق مختلف در زمینه زیر ساخت و SQL Server