Catatan studi database grafik SQL Server 1: Membuat database grafik – Copenhagen Husky (aspnetx)
Dalam pengembangan AI, grafik pengetahuan adalah bidang yang sangat populer, dan ketika berbicara tentang database grafik, semua orang akan langsung memikirkan Neo4J. Faktanya, ini sudah didukung di SQL Server. Artikel ini akan menunjukkan secara singkat bagaimana membangun database grafik di SQL Server untuk mewujudkan manajemen grafik pengetahuan.
ringkasan
Dalam pengembangan AI, grafik pengetahuan adalah bidang yang sangat populer, dan ketika berbicara tentang database grafik, semua orang akan langsung memikirkan Neo4J. Faktanya, ini sudah didukung di SQL Server. Artikel ini akan menunjukkan secara singkat bagaimana membangun database grafik di SQL Server untuk mewujudkan manajemen grafik pengetahuan.
Terakhir, kita akan membuat halaman grafik pengetahuan sederhana seperti di bawah ini:
Konstruksi database grafik SQL Server
Membuat dan mengkonfigurasi database
Sebelum memulai, Anda perlu memastikan bahwa versi SQL Server yang diinstal adalah versi setelah 2017.
-- 创建支持中文的图数据库
CREATE DATABASE GraphDB
COLLATE Chinese_PRC_CI_AS;
GO
USE GraphDB;
GO
Perpustakaan dibuat dengan cara yang sama seperti database biasa.
Struktur tabel inti dari database grafik
Objek dasar di SQLServer, seperti Neo4J, adalah NODE dan EDGE. Cara membuatnya di SQLServer adalah sebagai berikut:
simpul
-- 使用 AS NODE 创建原生图节点表
CREATE TABLE Nodes (
NodeType NVARCHAR(100) NOT NULL,
Name NVARCHAR(255) NOT NULL,
Properties NVARCHAR(MAX) DEFAULT '{}',
CreatedAt DATETIME2 DEFAULT GETDATE(),
UpdatedAt DATETIME2 DEFAULT GETDATE(),
IsDeleted BIT DEFAULT 0
) AS NODE;
-- 创建索引
CREATE INDEX IX_Nodes_NodeType ON Nodes(NodeType);
CREATE INDEX IX_Nodes_Name ON Nodes(Name);
Perhatikan poin pengetahuannya
AS NODE: Deklarasikan tabel sebagai tabel simpul grafik, dan SQL Server akan secara otomatis menambahkannya.$node_idDaftar$node_id: Pengidentifikasi unik yang dihasilkan sistem, dalam format JSON (mis{"type":"node","schema":"dbo","table":"Nodes","id":0})- Kolom khusus:
NodeType、Name、PropertiesBidang bisnis lainnya - Tidak perlu menentukan kunci utama secara manual, SQL Server secara otomatis mengkonfigurasi ID simpul
pelek
-- 使用 AS EDGE 创建原生图边表
CREATE TABLE Edges (
EdgeType NVARCHAR(100) NOT NULL,
Properties NVARCHAR(MAX) DEFAULT '{}',
Weight FLOAT DEFAULT 1.0,
CreatedAt DATETIME2 DEFAULT GETDATE(),
UpdatedAt DATETIME2 DEFAULT GETDATE(),
IsDeleted BIT DEFAULT 0
) AS EDGE;
-- 创建索引
CREATE INDEX IX_Edges_EdgeType ON Edges(EdgeType);
Perhatikan poin pengetahuannya
AS EDGE: Deklarasikan tabel sebagai tabel tepi grafik, dan SQL Server akan menambahkannya secara otomatis.$edge_id、$from_id、$to_idDaftar$edge_id: Pengidentifikasi unik tepi, format JSON$from_id: dari node awal$node_id$to_id: dari node target$node_id- Directionality: tepi arah,
$from_idberorientasi$to_id - Tidak diperlukan batasan kunci asing, grafik asli secara otomatis menjaga integritas referensial
Membuat node dan hubungan sangat berbeda dengan pernyataan Cypher Neo4J, jadi Anda harus memperhatikannya di sini.
Tes pembuatan data
Masukkan data simpul
-- 人物节点
INSERT INTO Nodes (NodeType, Name, Properties)
VALUES
('Person', '张三', '{"age": 35, "occupation": "工程师", "city": "北京"}'),
('Person', '李四', '{"age": 42, "occupation": "CEO", "city": "深圳"}'),
('Person', '王五', '{"age": 28, "occupation": "产品经理", "city": "杭州"}');
-- 公司节点
INSERT INTO Nodes (NodeType, Name, Properties)
VALUES
('Company', '腾讯科技', '{"founded_year": 1998, "industry": "互联网"}'),
('Company', '阿里巴巴', '{"founded_year": 1999, "industry": "电子商务"}'),
('Company', '字节跳动', '{"founded_year": 2012, "industry": "科技"}');
Sisipkan data relasional tepi – menggunakan sintaks grafik asli
-- 工作关系:使用 $from_id 和 $to_id 插入边
INSERT INTO Edges ($from_id, $to_id, EdgeType, Properties)
SELECT n1.$node_id, n2.$node_id, 'WORKS_AT', '{"department": "技术部", "start_year": 2020}'
FROM Nodes n1, Nodes n2
WHERE n1.Name="张三" AND n2.Name="腾讯科技";
INSERT INTO Edges ($from_id, $to_id, EdgeType, Properties)
SELECT n1.$node_id, n2.$node_id, 'FOUNDED', '{"role": "创始人"}'
FROM Nodes n1, Nodes n2
WHERE n1.Name="李四" AND n2.Name="阿里巴巴";
Perhatikan poin pengetahuannya
- menggunakan
$from_idDan$to_idTentukan titik awal dan tepi target - Dapatkan dari node yang ada melalui subquery
$node_id - Penamaan tipe tepi menggunakan tata nama bentuk ular besar untuk menjaga konsistensi.
- Bidang atribut JSON mendukung perluasan yang fleksibel
Pembangunan jaringan hubungan yang kompleks
-- 产品节点
INSERT INTO Nodes (NodeType, Name, Properties)
VALUES
('Product', '微信', '{"launch_year": 2011, "category": "社交"}'),
('Product', '淘宝', '{"launch_year": 2003, "category": "电商"}');
-- 产品归属关系
INSERT INTO Edges ($from_id, $to_id, EdgeType, Properties)
SELECT n1.$node_id, n2.$node_id, 'PRODUCES', '{}'
FROM Nodes n1, Nodes n2
WHERE n1.Name="腾讯科技" AND n2.Name="微信";
INSERT INTO Edges ($from_id, $to_id, EdgeType, Properties)
SELECT n1.$node_id, n2.$node_id, 'PRODUCES', '{}'
FROM Nodes n1, Nodes n2
WHERE n1.Name="阿里巴巴" AND n2.Name="淘宝";
Berlatih membuat kueri database grafik
Dapatkan node dan tetangganya – sintaks MATCH
-- 使用 MATCH 语法查询张三的直接关系
SELECT
n1.Name AS source_name,
e.EdgeType,
n2.Name AS target_name
FROM Nodes n1, Edges e, Nodes n2
WHERE MATCH(n1-(e)->n2)
AND n1.Name="张三";
Perhatikan poin pengetahuan:
MATCHSintaks: sintaks kueri grafik SQL Server aslin1-(e)->n2: Menunjukkan bahwa titik dari n1 ke n2 melalui tepi e.- Arah:
->Mewakili tepi berarah dari n1 ke n2 - Tidak diperlukan kata kunci JOIN, relasi jalur dideklarasikan di MATCH
Kueri jalur multi-hop
-- 查询张三所属公司的产品(两跳查询)
SELECT
n1.Name AS person_name,
n2.Name AS company_name,
n3.Name AS product_name
FROM Nodes n1, Edges e1, Nodes n2, Edges e2, Nodes n3
WHERE MATCH(n1-(e1)->n2-(e2)->n3)
AND n1.Name="张三"
AND e1.EdgeType="WORKS_AT"
AND e2.EdgeType="PRODUCES";
Perhatikan poin pengetahuan:
MATCHMendukung jalur multi-hop:n1-(e1)->n2-(e2)->n3- Deklarasikan pola jalur lengkap di MATCH
- Pemfilteran tipe tepi:
e1.EdgeType="WORKS_AT" - Mendukung kueri jalur pada kedalaman apa pun
Dapatkan informasi arah tepi
-- 查询边的方向(入向/出向)
SELECT
n.Name AS node_name,
e.EdgeType,
CASE
WHEN e.$from_id = n.$node_id THEN 'outgoing'
ELSE 'incoming'
END AS direction
FROM Nodes n, Edges e, Nodes n2
WHERE MATCH(n-(e)->n2)
AND (n.Name="张三" OR n2.Name="张三");
Saat Anda menjalankan soal tes, Anda akan menemukan bahwa SQL Server di SSMS tidak dapat langsung menampilkan grafik pengetahuan seperti browser yang disertakan dengan Neo4J. Saat ini hanya dapat menampilkan data tabel biasa. Jika Anda ingin melihat efek grafik pengetahuan, Anda perlu membuat aplikasi front-end Anda sendiri yang cocok nanti.
meringkaskan
Didukung untuk menggunakan SQL Server untuk membuat database grafik. Jika Anda sudah familiar dengan SQL Server, biaya pembelajarannya tidak akan mahal, dan jika SQL Server sudah didistribusikan, tidak perlu menginstal tambahan.
Penggunaannya masih sangat berbeda dengan Neo4J, termasuk pembuatan database dan penyisipan data. Meskipun masih ada kesenjangan dalam fungsionalitas, pada dasarnya semuanya berfungsi. Nanti kami akan terus memperkenalkan cara membuat aplikasi rumah agar grafik pengetahuan dapat ditampilkan di halaman.
PakarPBN
A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.
In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.
The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.