زمان مطالعه: 4 دقیقه

محدودیتها

در این بخش به معرفی محدودیتهای گراف دیتابیس sql و همچنین یک مثال عملی می پردازیم

  1. جداول موقت (temporal table) ها نمی توانند از نوع نود و یال باشند
    1. Table types و  table variables ها نمی توانند از نوع نود و یال باشند
    1. قابلیت temporal table برای جداول نود و یال پشتیبانی نشده است
    1. جداول نود و یال نمی توانند بصورت memory optimized table ایجاد شوند
    1. فیلدهای $from_id , $to_id آپدیت نمی شوند و در صورت نیاز به تغییر باید حذف شوند و ارتباط مجدد درج شود
    1. 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

Visits: 0