Práticas recomendadas para esquemas de gráficos

Este documento apresenta as práticas recomendadas para definir seu esquema de gráfico e melhorar a performance das consultas de gráfico.

Definir o escopo das definições de propriedade

As propriedades são pares de chave-valor que fornecem informações adicionais anexadas a nós ou arestas. Recomendamos incluir apenas as propriedades necessárias em nós ou arestas e evitar usar a sintaxe PROPERTIES ALL COLUMNS ou a sintaxe padrão que anexa todas as colunas das tabelas de nós ou arestas à lista de propriedades. Ter muitas propriedades em nós ou arestas pode causar verificações desnecessárias de colunas em consultas de gráficos, o que prejudica o desempenho.

Para restringir as propriedades incluídas em uma definição de nó ou aresta, use a palavra-chave PROPERTIES ao definir propriedades de elementos na instrução CREATE PROPERTY GRAPH.

A definição de tabela de nós a seguir restringe as propriedades da tabela de nós Person a id e name:

NODE TABLES (
  graph_db.Person PROPERTIES (id, name)
)

Definir restrições de chave primária e externa em nós e arestas do grafo

O BigQuery pode usar restrições de chave primária e chave externa nas tabelas de nós e arestas para otimizar as consultas de grafos, reduzindo as verificações desnecessárias de tabelas. No entanto, o BigQuery não aplica restrições de chave primária ou externa em tabelas. Se o aplicativo não puder garantir a integridade referencial ou a exclusividade nas chaves primárias, o uso de chaves primárias ou externas para otimização de consultas poderá gerar resultados incorretos.

O exemplo a seguir define restrições de chave primária e externa nas tabelas de nós Person e Account e na tabela de arestas PersonOwnAccount:

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
);

A seguir