Bagikan melalui


Jenis grafik GQL

Nota

Fitur ini saat ini dalam pratinjau publik. Pratinjau ini disediakan tanpa perjanjian tingkat layanan, dan tidak disarankan untuk beban kerja produksi. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas. Untuk informasi lebih lanjut, lihat Supplemental Terms of Use for Microsoft Azure Previews.

Jenis grafik menjelaskan struktur grafik Anda dengan menentukan simpul dan tepi mana yang dapat ada. Anggap saja seperti cetak biru atau skema—ini menentukan bentuk simpul dan tepi dalam grafik dalam hal label dan propertinya. Untuk tepi (koneksi antar simpul), ia juga menentukan jenis tepi mana yang dapat menyambungkan jenis simpul mana. Jika Anda terbiasa dengan database relasional, jenis grafik berfungsi sama dengan cara diagram ER menjelaskan tabel dan hubungan kunci asing.

Penting

Artikel ini secara eksklusif menggunakan himpunan data grafik contoh jejaring sosial.

Jenis grafik memberikan beberapa manfaat utama:

  • Validasi data: Pastikan grafik Anda hanya berisi kombinasi simpul dan tepi yang valid.
  • Pengoptimalan kueri: Bantu mesin kueri memahami struktur data Anda untuk performa yang lebih baik.
  • Dokumentasi: Berfungsi sebagai spesifikasi yang jelas dari struktur grafik Anda untuk pengembang dan analis.

Nota

Artikel ini memperkenalkan jenis grafik secara konseptual dan mengilustrasikan definisinya menggunakan sintaks yang ditentukan dalam standar GQL. Namun, sintaks ini saat ini tidak didukung secara langsung untuk grafik di Microsoft Fabric.

Secara struktural, jenis grafik menentukan jenis node yang diizinkan dan jenis tepi grafik dari jenis grafik, serta batasan tambahan yang lebih membatasi grafik tersebut.

Nota

Jenis grafik didefinisikan dengan memberikan sekumpulan jenis node, jenis tepi, dan definisi batasan. Mengubah urutan definisi ini tidak mengubah jenis grafik yang sedang ditentukan.

Tentukan jenis node

Jenis node menentukan label dan jenis properti apa yang dapat dimiliki simpul Anda. Berikut cara menentukan jenis node dasar:

(:Organization => { 
  id :: UINT64 NOT NULL, 
  name :: STRING, 
  url :: STRING 
})

Contoh ini membuat jenis node yang menentukan simpul dengan:

  • Label Organization.
  • Properti id yang menyimpan nilai bilangan bulat yang tidak ditandatangani dan tidak boleh null.
  • Properti name yang menyimpan nilai string (bisa null).
  • Properti url yang menyimpan nilai string (bisa null).

Operator :: menentukan jenis data untuk setiap properti, sementara NOT NULL menunjukkan bahwa properti harus selalu memiliki nilai.

Nota

NOT NULL dianggap sebagai bagian dari jenis dalam GQL, yang berbeda dari SQL.

Jenis node juga bisa lebih kompleks, dengan lebih banyak properti dan jenis data:

(:Person => {
    id :: UINT64 NOT NULL,
    creationDate :: ZONED DATETIME,
    firstName :: STRING,
    lastName :: STRING,
    gender :: STRING,
    birthday :: UINT64,
    browserUsed :: STRING,
    locationIP :: STRING
})

Jenis node dengan beberapa label

Simpul dapat memiliki beberapa label untuk mendukung pewarisan dan kategorisasi. Anda dapat menentukan beberapa label untuk jenis node, tetapi satu label ("label kunci") harus mengidentifikasi jenis node secara unik (Jika hanya satu label yang ditentukan, ini diambil untuk menjadi label kunci dari jenis node).

Sebagai contoh, pertimbangkan:

(:University => :Organization),

(:Company => :Organization)

Di sini, University dan Company adalah label kunci dari dua jenis node yang ditentukan, sementara Organization merupakan label sekunder yang dibagikan oleh kedua jenis. Perhatikan bagaimana label kunci dan label sekunder dipisahkan oleh => di setiap jenis node. Pendekatan ini menciptakan hierarki jenis di mana universitas dan perusahaan adalah jenis organisasi.

Karena label kunci mengidentifikasi jenis node, properti jenis node yang diidentifikasi oleh label sekunder secara otomatis diwarisi saat menggunakan sintaks ini. Oleh karena itu sintaks sebelumnya dapat dipahami untuk menentukan jenis node berikut secara efektif:

(:University => :Organization {
  id :: UINT64 NOT NULL, 
  name :: STRING, 
  url :: STRING 
}),

(:Company => :Organization {
  id :: UINT64 NOT NULL, 
  name :: STRING, 
  url :: STRING 
})

Nota

Label kunci sangat penting ketika Anda menentukan hierarki jenis node. Mereka membantu sistem memahami jenis node mana yang Anda rujuk ketika beberapa jenis berbagi label yang sama.

Menghemat waktu dengan pintasan pewarisan

Label dan properti berulang dari jenis node induk menjadi melelahkan dan rawan kesalahan. Grafik di Microsoft Fabric menyediakan += operator sehingga Anda hanya dapat menentukan label tambahan (tidak diwariskan) dan jenis properti:

(:Post => :Message += {
    language :: STRING,
    imageFile :: STRING
})

Ketika tidak ada properti tambahan yang ditentukan, grafik mewarisi semua properti yang diperlukan dari jenis induk:

(:Comment => :Message)  -- Same as: (:Comment => :Message += {})

Menggunakan jenis node abstrak

Anda dapat menentukan jenis node murni untuk membangun hierarki, bahkan ketika grafik Anda tidak berisi simpul konkret jenis tersebut. Jenis node abstrak berguna untuk membuat pengelompokan konseptual dan set properti bersama. Untuk tujuan ini, Anda dapat menentukan jenis node seperti ABSTRACT dalam grafik di Microsoft Fabric:

ABSTRACT (:Message => {
    id :: UINT64 NOT NULL,
    creationDate :: ZONED DATETIME,
    browserUsed :: STRING,
    locationIP :: STRING,
    content :: STRING,
    length :: UINT64
})

Jenis node abstrak tidak tersedia untuk pemuatan grafik langsung—hanya ada untuk menyusun hierarki Anda dan menentukan properti bersama. Jenis node konkret yang mewarisi dari jenis abstrak dapat dimuat dengan data.

Menentukan jenis tepi dan keluarga

Jenis tepi menentukan label kunci, jenis properti, dan jenis node titik akhir untuk tepi. Dalam database grafik, tepi mewakili koneksi antar simpul. Definisi tepi memberi tahu sistem hubungan apa yang diizinkan dalam grafik Anda:

(:Person)-[:knows { creationDate :: ZONED DATETIME }]->(:Person)

Jenis tepi ini mendefinisikan semua tepi dengan:

  • Label knows(kunci) .
  • Properti creationDate yang menyimpan ZONED DATETIME nilai (tanda waktu bersama dengan offset zona waktu).
  • Titik akhir sumber dan tujuan yang keduanya harus simpul Person .

-> Panah menunjukkan arah tepi, dari sumber ke tujuan. Informasi arah ini sangat penting untuk memahami semantik grafik Anda.

Berikut adalah contoh jenis tepi lainnya:

(:Person)-[:studyAt { classYear :: UINT64 }]->(:University)
(:Person)-[:workAt { workFrom :: UINT64 }]->(:Company)

Anda hanya perlu menentukan label kunci (Person, , Universityatau Company) untuk jenis node titik akhir—Anda tidak perlu mengulangi definisi jenis node lengkap. Sistem menyelesaikan referensi ini ke definisi jenis node lengkap.

Keluarga jenis tepi grafik

Label kunci tepi grafik bekerja secara berbeda dari label kunci simpul. Anda dapat memiliki beberapa jenis tepi dengan label kunci yang sama dalam jenis grafik, selama mereka memiliki label dan jenis properti yang sama. Namun, dua jenis tepi dengan label kunci yang sama harus berbeda dalam setidaknya satu jenis node titik akhir. Kami menyebut sekumpulan jenis tepi dengan label kunci yang sama sebagai keluarga jenis tepi.

Konsep ini memungkinkan Anda untuk memodelkan jenis hubungan yang sama antara berbagai jenis entitas.

Example:

(:City)-[:isPartOf]->(:Country),
(:Country)-[:isPartOf]->(:Continent)

Kedua jenis tepi menggunakan isPartOf label, tetapi menghubungkan berbagai jenis simpul, membentuk keluarga jenis tepi yang mewakili hubungan penahanan hierarkis.

Menggunakan subtipe simpul dalam definisi jenis tepi

Harus mengeja setiap jenis tepi yang mungkin bisa sedikit membosankan. Untuk menyederhanakan, dimungkinkan juga untuk menentukan keluarga jenis tepi yang selaras dengan hierarki jenis simpul yang tersirat oleh titik akhir mereka.

Contoh:

-- Node types
ABSTRACT (:Message { ... }),
(:Post => :Message { ... }),
(:Comment => :Message { ... }),

-- All edge types (x)-[:hasTag]->(:Tag) where x is at least a (:Message)
(<:Message)-[:hasTag]->(:Tag) 

Ini secara implisit mendefinisikan jenis tepi berikut:

(:Post)-[:hasTag]->(:Tag) 
(:Comment)-[:hasTag]->(:Tag) 

Jenis properti yang didukung

Saat Anda menentukan jenis properti, jenis nilai properti harus merupakan salah satu yang didukung grafik di Microsoft Fabric. Memilih jenis data yang tepat penting untuk efisiensi penyimpanan dan performa kueri.

Berikut adalah jenis data yang dapat Anda gunakan untuk nilai properti:

  • INT (juga: INT64)
  • UINT (juga: UINT64)
  • STRING
  • BOOL (juga: BOOLEAN)
  • DOUBLE (juga: FLOAT64, FLOAT)
  • T NOT NULL, di mana T adalah salah satu jenis data sebelumnya.
  • LIST<T> dan LIST<T> NOT NULL, di mana T adalah salah satu jenis data sebelumnya.

Untuk informasi lengkap tentang jenis nilai, lihat Nilai GQL dan jenis nilai.

Penting

Semua jenis properti dengan nama yang sama yang terjadi dalam jenis node atau jenis tepi dari jenis grafik tertentu harus menentukan jenis nilai properti yang sama. Satu-satunya pengecualian: mereka dapat berbeda dalam apakah mereka menyertakan nilai null. Misalnya, menurut aturan ini, jenis grafik dengan (:A { id :: STRING }), (:B { id :: STRING NOT NULL}) akan valid, sementara jenis grafik dengan (:A { id :: STRING }), (:B { id :: INT}) akan tidak valid.

Menyiapkan batasan kunci simpul

Batasan kunci node menentukan bagaimana setiap simpul dalam grafik Anda diidentifikasi secara unik oleh satu atau beberapa nilai propertinya. Batasan utama berfungsi seperti batasan kunci utama dalam database relasional dan memastikan integritas data. Batasan kunci node dapat menargetkan simpul di beberapa jenis node, yang memungkinkan Anda menentukan kunci simpul untuk seluruh hierarki konseptual.

Memahami batasan kunci sangat penting karena:

  • Pastikan keunikan: Cegah simpul duplikat berdasarkan logika bisnis Anda.
  • Aktifkan pencarian yang efisien: Izinkan sistem mengoptimalkan kueri yang mencari simpul tertentu.
  • Integrasi data dukungan: Berikan cara yang stabil untuk mereferensikan simpul di berbagai sumber data.

Penting

Untuk grafik di Microsoft Fabric, tepat satu batasan kunci harus membatasi setiap simpul.

Cara kerja batasan kunci node

Anda dapat menentukan batasan kunci simpul dalam jenis grafik Anda. Setiap batasan kunci node memiliki karakteristik khusus yang membuatnya bekerja secara efektif:

Komponen batasan kunci simpul:

  • Memiliki nama unik dalam jenis grafik untuk referensi yang mudah.
  • Menentukan simpul yang ditargetkan menggunakan pola batasan sederhana yang menentukan node mana batasan berlaku.
  • Menentukan properti yang membentuk nilai kunci unik.

Example:

CONSTRAINT person_pk
  FOR (n:Person) REQUIRE n.id IS KEY

Sintaks ini membuat batasan kunci simpul yang dipanggil person_pk untuk semua simpul dengan setidaknyaPerson label. Batasan memastikan bahwa setiap simpul dalam grafik diidentifikasi secara unik oleh propertinya id . Tidak ada dua simpul dengan Person label yang dapat memiliki nilai yang sama id .

Anda juga dapat menentukan kunci gabungan yang menggunakan beberapa properti bersama-sama untuk memastikan keunikan dengan menggunakan CONSTRAINT ... FOR ... REQUIRE (n.prop1, n.prop2) IS KEY sintaks.

Penting

Properti yang digunakan dalam batasan kunci:

  • Tidak boleh null
  • Harus dinyatakan sebagai NOT NULL dalam jenis node dan jenis tepi yang ditargetkan oleh batasan kunci