Best Practices für das Diagrammschema
Dieses Dokument enthält Best Practices zum Definieren Ihres Grafschemas, um die Leistung von Grafabfragen zu verbessern.
Property-Definitionen eingrenzen
Eigenschaften sind Schlüssel/Wert-Paare, die zusätzliche Informationen zu Knoten oder Kanten enthalten. Wir empfehlen, nur die erforderlichen Properties in Knoten oder Kanten aufzunehmen und die PROPERTIES ALL COLUMNS-Syntax oder die Standardsyntax zu vermeiden, mit der alle Spalten aus den Knoten- oder Kantentabellen an die Property-Liste angehängt werden. Viele Attribute in Knoten oder Kanten können unnötige Spaltenscans in Diagrammabfragen verursachen, was die Leistung beeinträchtigt.
Wenn Sie die Eigenschaften einschränken möchten, die Sie in eine Knoten- oder Kantendefinition aufnehmen, verwenden Sie das Schlüsselwort PROPERTIES, wenn Sie Elementeigenschaften in Ihrer CREATE PROPERTY GRAPH-Anweisung definieren.
Die folgende Knotentabellendefinition beschränkt die Attribute für die Knotentabelle Person auf id und name:
NODE TABLES (
graph_db.Person PROPERTIES (id, name)
)
Beschränkungen für Primär- und Fremdschlüssel für Knoten und Kanten im Diagramm definieren
BigQuery kann Primär- und Fremdschlüsselbeschränkungen für Ihre Knoten- und Kantentabellen verwenden, um Ihre Diagrammabfragen zu optimieren, indem unnötige Tabellenscans reduziert werden. BigQuery erzwingt jedoch keine Primär- oder Fremdschlüsselbeschränkungen für Tabellen. Wenn Ihre Anwendung keine referenzielle Integrität oder Eindeutigkeit für Primärschlüssel garantieren kann, kann die Verwendung von Primär- oder Fremdschlüsseln zur Abfrageoptimierung zu falschen Abfrageergebnissen führen.
Im folgenden Beispiel werden Primär- und Fremdschlüsseleinschränkungen für die Knotentabellen Person und Account sowie die Kantentabelle PersonOwnAccount definiert:
CREATE OR REPLACE TABLE graph_db.Person (
id INT64,
name STRING,
birthday TIMESTAMP,
country STRING,
city STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.Account (
id INT64,
create_time TIMESTAMP,
is_blocked BOOL,
nick_name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.PersonOwnAccount (
id INT64 NOT NULL,
account_id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id, account_id) NOT ENFORCED,
FOREIGN KEY (id) references graph_db.Person(id) NOT ENFORCED,
FOREIGN KEY (account_id) references graph_db.Account(id) NOT ENFORCED
);
Nächste Schritte
- Weitere Informationen zu Diagrammen finden Sie unter Einführung in BigQuery Graph.
- Weitere Informationen zum Definieren eines Schemas finden Sie unter Schemaübersicht.
- Weitere Informationen zum Schreiben von Graphabfragen finden Sie unter Graphabfragen – Übersicht.
- Weitere Informationen zum Erstellen von Diagrammen für Messwerte und zum Modellieren von Many-to-Many-Beziehungen finden Sie unter Mit Messwerten arbeiten.