Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Σημείωμα
Αυτή η δυνατότητα βρίσκεται αυτήν τη στιγμή σε δημόσια προεπισκόπηση. Αυτή η προεπισκόπηση παρέχεται χωρίς σύμβαση παροχής υπηρεσιών και δεν συνιστάται για φόρτους εργασίας παραγωγής. Ορισμένες δυνατότητες ενδέχεται να μην υποστηρίζονται ή να έχουν περιορισμένες δυνατότητες. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Χρήση συμψηφικών όρων χρήσης για Microsoft Azure προεπισκοπήσεις.
Ένας τύπος γραφήματος ορίζει τη δομή ενός γραφήματος καθορίζοντας ποιοι κόμβοι και άκρα μπορούν να υπάρχουν, τις ετικέτες και τις ιδιότητές τους και τον τρόπο σύνδεσής τους. Σκεφτείτε έναν τύπο γραφήματος ως σχήμα ή σχέδιο - όμοια με τον τρόπο με τον οποίο ένα διάγραμμα ER (σχέση οντοτήτων) περιγράφει πίνακες και σχέσεις εξωτερικού κλειδιού σε μια σχεσιακή βάση δεδομένων.
Αυτό το άρθρο εξηγεί πώς μπορείτε να ορίσετε τύπους γραφημάτων χρησιμοποιώντας σύνταξη GQL, συμπεριλαμβανομένων τύπων κόμβων, τύπων άκρου, περιορισμών και μεταβίβασης.
Σημαντικό
Αυτό το άρθρο χρησιμοποιεί αποκλειστικά το σύνολο δεδομένων παραδειγμάτων γραφήματος κοινωνικού δικτύου.
Οι τύποι γραφήματος παρέχουν πολλά βασικά πλεονεκτήματα:
- Επικύρωση δεδομένων: Βεβαιωθείτε ότι το γράφημα περιέχει μόνο έγκυρους συνδυασμούς κόμβων και άκρων.
- Βελτιστοποίηση ερωτημάτων: Βοηθήστε τη μηχανή ερωτημάτων να κατανοήσει τη δομή των δεδομένων σας για καλύτερες επιδόσεις.
- Τεκμηρίωση: Λειτουργεί ως σαφής προδιαγραφή της δομής του γραφήματός σας για προγραμματιστές και αναλυτές.
Σημείωμα
Αυτό το άρθρο παρουσιάζει τους τύπους γραφημάτων εννοιολογικά και απεικονίζει τον ορισμό τους χρησιμοποιώντας τη σύνταξη που ορίζεται στο πρότυπο GQL. Ωστόσο, αυτή η σύνταξη δεν υποστηρίζεται προς το παρόν απευθείας για το γράφημα.
Δομικά, ένας τύπος γραφήματος ορίζει επιτρεπόμενους τύπους κόμβων και τύπους άκρων του τύπου γραφήματος, καθώς και πρόσθετους περιορισμούς που περιορίζουν περαιτέρω αυτά τα γραφήματα.
Σημείωμα
Καθορίστε τύπους γραφήματος χρησιμοποιώντας ένα σύνολο τύπων κόμβων, τύπου άκρου και ορισμών περιορισμών. Η αλλαγή της σειράς αυτών των ορισμών δεν αλλάζει τον τύπο γραφήματος που ορίζετε.
Ορισμός τύπων κόμβων
Ένας τύπος κόμβου καθορίζει τις ετικέτες και τους τύπους ιδιοτήτων που μπορούν να έχουν οι κόμβοι σας. Δείτε πώς μπορείτε να καθορίσετε έναν βασικό τύπο κόμβου:
(:Organization => {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
})
Αυτό το παράδειγμα δημιουργεί έναν τύπο κόμβου που ορίζει κόμβους με:
- Η ετικέτα
Organization. - Μια
idιδιότητα που περιέχει ανυπόγραφες ακέραιες τιμές και δεν μπορεί να είναι null. - Μια
nameιδιότητα που περιέχει τιμές συμβολοσειράς (μπορεί να είναι null). - Μια
urlιδιότητα που περιέχει τιμές συμβολοσειράς (μπορεί να είναι null).
Χρησιμοποιήστε τον :: τελεστή για να καθορίσετε τον τύπο δεδομένων για κάθε ιδιότητα. Χρησιμοποιήστε NOT NULL την για να υποδείξετε ότι η ιδιότητα πρέπει να έχει πάντα μια τιμή.
Σημείωμα
Στο GQL, NOT NULL το είναι μέρος του τύπου, το οποίο διαφέρει από το SQL.
Οι τύποι κόμβων μπορούν επίσης να είναι πιο σύνθετοι, με περισσότερες ιδιότητες και τύπους δεδομένων:
(:Person => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
firstName :: STRING,
lastName :: STRING,
gender :: STRING,
birthday :: UINT64,
browserUsed :: STRING,
locationIP :: STRING
})
Τύποι κόμβων με πολλαπλές ετικέτες
Οι κόμβοι μπορούν να έχουν πολλές ετικέτες για την υποστήριξη μεταβίβασης και κατηγοριοποίησης. Μπορείτε να καθορίσετε πολλές ετικέτες για έναν τύπο κόμβου, αλλά μία ετικέτα (η "ετικέτα κλειδιού") πρέπει να προσδιορίζει μοναδικά τον τύπο κόμβου (Εάν έχει καθοριστεί μόνο μία ετικέτα, αυτή θεωρείται ότι είναι η ετικέτα κλειδιού του τύπου κόμβου).
Για παράδειγμα, εξετάστε τα εξής:
(:University => :Organization),
(:Company => :Organization)
Εδώ, University τα και Company είναι οι βασικές ετικέτες των δύο τύπων κόμβου που έχουν οριστεί, ενώ Organization είναι μια δευτερεύουσα ετικέτα που χρησιμοποιείται από κοινού και από τους δύο τύπους. Παρατηρήστε πώς η ετικέτα κλειδιού και οι δευτερεύουσες ετικέτες διαχωρίζονται με => κάθε τύπο κόμβου. Αυτή η προσέγγιση δημιουργεί μια ιεραρχία τύπου, όπου τόσο τα πανεπιστήμια όσο και οι εταιρείες είναι τύποι οργανισμών.
Δεδομένου ότι οι ετικέτες κλειδιών προσδιορίζουν τους τύπους κόμβων, οι ιδιότητες των τύπων κόμβων που προσδιορίζονται από τις δευτερεύουσες ετικέτες μεταβιβάζονται αυτόματα κατά τη χρήση αυτής της σύνταξης. Επομένως, η προηγούμενη σύνταξη μπορεί να γίνει κατανοητό ότι ορίζει αποτελεσματικά τους ακόλουθους τύπους κόμβων:
(:University => :Organization {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
}),
(:Company => :Organization {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
})
Σημείωμα
Οι ετικέτες κλειδιών είναι απαραίτητες όταν ορίζετε ιεραρχίες τύπου κόμβου. Βοηθούν το σύστημα να κατανοήσει τον τύπο κόμβου στον οποίο αναφέρεστε όταν πολλοί τύποι μοιράζονται τις ίδιες ετικέτες.
Αποθήκευση χρόνου με συντομεύσεις μεταβίβασης
Οι επαναλαμβανόμενες ετικέτες και ιδιότητες από τους τύπους γονικού κόμβου γίνονται κουραστικές και επιρρεπείς σε σφάλματα. Το γράφημα παρέχει τον += τελεστή, ώστε να μπορείτε να καθορίσετε μόνο τις επιπλέον (χωρίς ακολούθους) ετικέτες και τύπους ιδιοτήτων:
(:Post => :Message += {
language :: STRING,
imageFile :: STRING
})
Όταν δεν έχουν καθοριστεί επιπλέον ιδιότητες, το γράφημα λαμβάνει όλες τις απαιτούμενες ιδιότητες από τον γονικό τύπο:
(:Comment => :Message) -- Same as: (:Comment => :Message += {})
Χρήση τύπων αφηρημένου κόμβου
Μπορείτε να ορίσετε τύπους κόμβων αποκλειστικά για τη δημιουργία ιεραρχιών, ακόμα και όταν το γράφηματός σας δεν περιέχει συγκεκριμένους κόμβους αυτού του τύπου. Οι τύποι αφηρημένων κόμβων είναι χρήσιμοι για τη δημιουργία εννοιολογικών ομαδοποιήσεων και κοινόχρηστων συνόλων ιδιοτήτων. Για αυτόν το σκοπό, μπορείτε να ορίσετε έναν τύπο κόμβου όπως ABSTRACT στο γράφημα:
ABSTRACT (:Message => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
browserUsed :: STRING,
locationIP :: STRING,
content :: STRING,
length :: UINT64
})
Οι τύποι αφηρημένων κόμβων δεν είναι διαθέσιμοι για φόρτωση άμεσου γραφήματος. Υπάρχουν μόνο για να δομήουν την ιεραρχία σας και να ορίζουν κοινόχρηστες ιδιότητες. Οι τύποι συγκεκριμένου κόμβου που μεταβιβάζονται από αφηρημένους τύπους μπορούν να φορτωθούν με δεδομένα.
Ορισμός τύπων άκρου και οικογενειών
Ένας τύπος άκρου ορίζει την ετικέτα κλειδιού, τους τύπους ιδιοτήτων και τους τύπους κόμβου τελικού σημείου για τα άκρα. Στις βάσεις δεδομένων του γραφήματος, τα άκρα αντιπροσωπεύουν συνδέσεις μεταξύ κόφων. Ο ορισμός άκρου υποδεικνύει στο σύστημα ποιες σχέσεις επιτρέπονται στο γράφημά σας:
(:Person)-[:knows { creationDate :: ZONED DATETIME }]->(:Person)
Αυτός ο τύπος άκρου ορίζει όλα τα άκρα με:
- Η ετικέτα
knows(κλειδί) . - Μια
creationDateιδιότητα που περιέχειZONED DATETIMEτιμές (χρονική σήμανση μαζί με μια μετατόπιση ζώνης ώρας). - Τελικά σημεία προέλευσης και προορισμού που πρέπει να είναι
Personκαι τα δύο κόμβοι.
Το βέλος -> υποδεικνύει την κατεύθυνση του άκρου, από την προέλευση στον προορισμό. Αυτές οι πληροφορίες κατεύθυνσης είναι κρίσιμες για την κατανόηση της σημασιολογίας του γραφήματός σας.
Δείτε περισσότερα παραδείγματα τύπων άκρου:
(:Person)-[:studyAt { classYear :: UINT64 }]->(:University)
(:Person)-[:workAt { workFrom :: UINT64 }]->(:Company)
Χρειάζεται μόνο να καθορίσετε τις ετικέτες κλειδιών (Person, Universityή Company) για τους τύπους κόμβου τελικού σημείου - δεν χρειάζεται να επαναλάβετε τον πλήρη ορισμό τύπου κόμβου. Το σύστημα επιλύει αυτές τις αναφορές στους ορισμούς τύπου πλήρους κόμβου.
Οικογένειες τύπων άκρου γραφήματος
Οι ετικέτες κλειδιού άκρου γραφήματος λειτουργούν διαφορετικά από τις ετικέτες κλειδιών κόμβων. Μπορείτε να έχετε τύπους πολλαπλών άκρων με την ίδια ετικέτα κλειδιού σε έναν τύπο γραφήματος, εφόσον έχουν τις ίδιες ετικέτες και τύπους ιδιοτήτων. Ωστόσο, δύο τύποι άκρου με την ίδια ετικέτα κλειδιού πρέπει να διαφέρουν σε τουλάχιστον έναν τύπο κόμβου τελικού σημείου. Ένα σύνολο τύπων άκρου με την ίδια ετικέτα κλειδιού είναι μια οικογένεια τύπου άκρου.
Αυτή η έννοια σάς επιτρέπει να μοντελοποιείτε τον ίδιο τύπο σχέσης μεταξύ διαφορετικών τύπων οντοτήτων.
Παράδειγμα:
(:City)-[:isPartOf]->(:Country),
(:Country)-[:isPartOf]->(:Continent)
Και οι δύο τύποι άκρου χρησιμοποιούν την isPartOf ετικέτα, αλλά συνδέουν διαφορετικούς τύπους κόφων, σχηματίζοντας μια οικογένεια τύπου άκρου που αντιπροσωπεύει ιεραρχικές σχέσεις συγκράτησης.
Χρήση υποτύπου κόμβου σε ορισμούς τύπου ακμής
Η ορθογραφία κάθε πιθανού τύπου άκρου μπορεί να είναι κουραστική. Για να απλοποιήσετε, ορίστε οικογένειες τύπων άκρου που ευθυγραμμίζονται με την ιεραρχία των τύπων κόμβων που υπονοούνται από τα τελικά σημεία τους.
Παράδειγμα:
-- Node types
ABSTRACT (:Message { ... }),
(:Post => :Message { ... }),
(:Comment => :Message { ... }),
-- All edge types (x)-[:hasTag]->(:Tag) where x is at least a (:Message)
(<:Message)-[:hasTag]->(:Tag)
Αυτός ο ορισμός ορίζει σιωπηρά τους ακόλουθους τύπους άκρου:
(:Post)-[:hasTag]->(:Tag)
(:Comment)-[:hasTag]->(:Tag)
Υποστηριζόμενοι τύποι ιδιοτήτων
Όταν ορίζετε έναν τύπο ιδιότητας, χρησιμοποιήστε έναν τύπο τιμής ιδιότητας που υποστηρίζει το γράφημα. Η επιλογή των κατάλληλων τύπων δεδομένων είναι σημαντική για την αποδοτικότητα της αποθήκευσης και την απόδοση των ερωτημάτων.
Χρησιμοποιήστε τους ακόλουθους τύπους δεδομένων για τιμές ιδιοτήτων:
-
INT(επίσης:INT64) -
UINT(επίσης:UINT64) STRING-
BOOL(επίσης:BOOLEAN) -
DOUBLE(επίσης:FLOAT64,FLOAT) -
T NOT NULL, όπουTείναι οποιοσδήποτε από τους προηγούμενους τύπους δεδομένων. -
LIST<T>καιLIST<T> NOT NULL, όπουTείναι οποιοσδήποτε από τους προηγούμενους τύπους δεδομένων.
Για πλήρεις πληροφορίες σχετικά με τους τύπους τιμών, ανατρέξτε στο θέμα Τιμές GQL και τύποι τιμών.
Σημαντικό
Όλοι οι τύποι ιδιοτήτων με το ίδιο όνομα που εμφανίζονται σε έναν τύπο κόμβου ή τύπο άκρου ενός δεδομένου τύπου γραφήματος πρέπει να καθορίζουν τον ίδιο τύπο τιμής ιδιότητας.
Η μοναδική εξαίρεση: μπορεί να διαφέρουν ως προς το αν περιλαμβάνουν την τιμή null.
Για παράδειγμα, σύμφωνα με αυτόν τον κανόνα, ένας τύπος γραφήματος με (:A { id :: STRING }), (:B { id :: STRING NOT NULL}) είναι έγκυρος, ενώ ένας τύπος γραφήματος με (:A { id :: STRING }), (:B { id :: INT}) δεν είναι έγκυρος.
Ρύθμιση βασικών περιορισμών κόμβου
Οι βασικοί περιορισμοί κόμβων ορίζουν τον τρόπο με τον οποίο κάθε κόμβος στο γράφηματός σας αναγνωρίζεται μοναδικά από μία ή περισσότερες από τις τιμές ιδιοτήτων του. Οι βασικοί περιορισμοί λειτουργούν όπως οι περιορισμοί πρωτεύοντος κλειδιού σε σχεσιακές βάσεις δεδομένων και εξασφαλίζουν την ακεραιότητα των δεδομένων. Ένας βασικός περιορισμός κόμβου μπορεί να στοχεύει κόμβους σε πολλούς τύπους κόμβων, το οποίο σας επιτρέπει να ορίζετε κλειδιά κόμβων για ολόκληρες εννοιολογικές ιεραρχίες.
Η κατανόηση των βασικών περιορισμών είναι καίριας σημασίας καθώς:
- Εξασφαλίστε τη μοναδικότητα: Αποτρέψτε τους διπλότυπους κόμβους με βάση την επιχειρηματική λογική σας.
- Ενεργοποίηση αποτελεσματικών αναζητήσεων: Να επιτρέπεται στο σύστημα να βελτιστοποιεί ερωτήματα που αναζητούν συγκεκριμένους κόμβους.
- Υποστήριξη ενοποίησης δεδομένων: Παρέχετε έναν σταθερό τρόπο αναφοράς κόδων σε διαφορετικές προελεύσεις δεδομένων.
Σημαντικό
Για το γράφημα, ακριβώς ένας βασικός περιορισμός πρέπει να περιορίζει κάθε κόμβο.
Πώς λειτουργούν οι βασικοί περιορισμοί κόμβων
Μπορείτε να καθορίσετε περιορισμούς κλειδιού κόμβου στον τύπο γραφήματος σας. Κάθε βασικός περιορισμός κόμβου έχει συγκεκριμένα χαρακτηριστικά που τον καθιστούν αποτελεσματικό:
Στοιχεία ενός περιορισμού κλειδιού κόμβου:
- Διαθέτει ένα μοναδικό όνομα μέσα στον τύπο γραφήματος για εύκολη αναφορά.
- Ορίζει τους κόμβους προορισμού, χρησιμοποιώντας ένα απλό μοτίβο περιορισμού , το οποίο καθορίζει σε ποιους κόμβους εφαρμόζεται ο περιορισμός.
- Καθορίζει τις ιδιότητες που σχηματίζουν τη μοναδική τιμή κλειδιού.
Παράδειγμα:
CONSTRAINT person_pk
FOR (n:Person) REQUIRE n.id IS KEY
Αυτή η σύνταξη δημιουργεί έναν περιορισμό κλειδιού κόμβου που ονομάζεται person_pk για όλους τους κόμβους με τουλάχιστον την Person ετικέτα. Ο περιορισμός εξασφαλίζει ότι κάθε κόμβος στο γράφημα αναγνωρίζεται μοναδικά από την ιδιότητά του id . Δεν υπάρχουν δύο κόμβοι με την Person ετικέτα που μπορεί να έχουν την ίδια id τιμή.
Μπορείτε επίσης να ορίσετε σύνθετα κλειδιά που χρησιμοποιούν πολλές ιδιότητες μαζί για να διασφαλίσουν τη μοναδικότητα, χρησιμοποιώντας τη CONSTRAINT ... FOR ... REQUIRE (n.prop1, n.prop2) IS KEY σύνταξη.
Σημαντικό
Ιδιότητες που χρησιμοποιούνται σε βασικούς περιορισμούς:
- Δεν μπορεί να είναι null
- Πρέπει να δηλώνονται όπως
NOT NULLστους τύπους κόμβων και τους τύπους άκρου που αποτελούν τον προορισμό του περιορισμού κλειδιού