Prácticas recomendadas para el esquema de gráfico

En este documento, se proporcionan prácticas recomendadas para definir tu esquema de gráfico y mejorar el rendimiento de las consultas del gráfico.

Define el alcance de tus definiciones de propiedad

Las propiedades son pares clave-valor que proporcionan información adicional adjunta a los nodos o bordes. Te recomendamos que solo incluyas las propiedades necesarias en los nodos o las aristas, y que evites usar la sintaxis PROPERTIES ALL COLUMNS o la sintaxis predeterminada que adjunta todas las columnas de las tablas de nodos o aristas a la lista de propiedades. Tener muchas propiedades en los nodos o las aristas puede provocar análisis innecesarios de columnas en las consultas de grafos, lo que degrada el rendimiento.

Para restringir las propiedades que incluyes en una definición de nodo o borde, usa la palabra clave PROPERTIES cuando definas propiedades de elementos en tu declaración CREATE PROPERTY GRAPH.

La siguiente definición de tabla de nodos restringe las propiedades de la tabla de nodos Person a id y name:

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

Define restricciones de clave primaria y externa en los nodos y las aristas del grafo

BigQuery puede usar restricciones de clave externa y externa en tus tablas de nodos y aristas para optimizar tus consultas de grafos, ya que reduce los análisis innecesarios de las tablas. Sin embargo, BigQuery no aplica restricciones de clave externa o primarias en las tablas. Si tu aplicación no puede garantizar la integridad referencial o la unicidad en las claves primarias, usar claves primarias o externas para la optimización de consultas podría generar resultados incorrectos.

En el siguiente ejemplo, se definen restricciones de clave primaria y externa en las tablas de nodos Person y Account, y en la tabla de aristas 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
);

¿Qué sigue?