Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Observação
Esta funcionalidade está atualmente em pré-visualização pública. Essa visualização é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
Um tipo de gráfico descreve a estrutura do gráfico definindo quais nós e bordas podem existir. Pense nisso como um esquema ou esquema — ele especifica a forma de nós e bordas no gráfico em termos de seus rótulos e propriedades. Para bordas (as conexões entre nós), ele também especifica quais tipos de arestas podem conectar quais tipos de nós. Se você estiver familiarizado com bancos de dados relacionais, os tipos de gráficos funcionam de forma semelhante à forma como os diagramas ER descrevem tabelas e relações de chave estrangeira.
Importante
Este artigo utiliza exclusivamente o conjunto de dados gráfico de exemplo de redes sociais.
Os tipos de gráficos oferecem vários benefícios importantes:
- Validação de dados: verifique se o gráfico contém apenas combinações válidas de nó e borda.
- Otimização de consultas: ajude o mecanismo de consulta a entender sua estrutura de dados para obter um melhor desempenho.
- Documentação: Sirva como uma especificação clara da estrutura do seu gráfico para desenvolvedores e analistas.
Observação
Este artigo apresenta os tipos de gráficos conceitualmente e ilustra sua definição usando a sintaxe definida no padrão GQL. No entanto, essa sintaxe atualmente não é suportada diretamente para gráfico no Microsoft Fabric.
Estruturalmente, um tipo de gráfico define tipos de nó permitidos e tipos de aresta de gráficos do tipo de gráfico, bem como restrições adicionais que restringem ainda mais esses gráficos.
Observação
Os tipos de gráficos são definidos fornecendo um conjunto de definições de tipo de nó, tipo de aresta e restrição. Alterar a ordem dessas definições não altera o tipo de gráfico que está sendo definido.
Definir tipos de nó
Um tipo de nó especifica quais rótulos e tipos de propriedade seus nós podem ter. Veja como especificar um tipo de nó básico:
(:Organization => {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
})
Este exemplo cria um tipo de nó que define nós com:
- O rótulo
Organization. - Uma
idpropriedade que contém valores inteiros não assinados e não pode ser nula. - Uma
namepropriedade que contém valores de cadeia de caracteres (pode ser null). - Uma
urlpropriedade que contém valores de cadeia de caracteres (pode ser null).
O :: operador especifica o tipo de dados para cada propriedade, enquanto NOT NULL indica que a propriedade sempre deve ter um valor.
Observação
NOT NULL é considerado parte do tipo em GQL, que difere do SQL.
Os tipos de nó também podem ser mais complexos, com mais propriedades e tipos de dados:
(:Person => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
firstName :: STRING,
lastName :: STRING,
gender :: STRING,
birthday :: UINT64,
browserUsed :: STRING,
locationIP :: STRING
})
Tipos de nó com vários rótulos
Os nós podem ter vários rótulos para dar suporte à herança e categorização. Você pode especificar vários rótulos para um tipo de nó, mas um rótulo (o "rótulo de chave") deve identificar exclusivamente o tipo de nó (se apenas um rótulo for especificado, este será considerado o rótulo de chave do tipo de nó).
Como exemplo, considere:
(:University => :Organization),
(:Company => :Organization)
Aqui, University e Company são os principais rótulos dos dois tipos de nó definidos, enquanto Organization é um rótulo secundário compartilhado por ambos os tipos. Observe como o rótulo de chave e os rótulos secundários são separados por => em cada tipo de nó. Esta abordagem cria uma hierarquia de tipos onde tanto as universidades como as empresas são tipos de organizações.
Como os rótulos de chave identificam tipos de nós, as propriedades dos tipos de nós identificados por rótulos secundários são herdadas automaticamente ao usar essa sintaxe. Portanto, a sintaxe anterior pode ser entendida para definir efetivamente os seguintes tipos de nós:
(:University => :Organization {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
}),
(:Company => :Organization {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
})
Observação
Os rótulos de chave são essenciais quando você define hierarquias de tipo de nó. Eles ajudam o sistema a entender a qual tipo de nó você está se referindo quando vários tipos compartilham os mesmos rótulos.
Economize tempo com atalhos de herança
Repetir rótulos e propriedades de tipos de nó pai torna-se tedioso e propenso a erros. O Graph no Microsoft Fabric fornece o operador para += que você possa especificar apenas os rótulos e tipos de propriedade extras (não herdados):
(:Post => :Message += {
language :: STRING,
imageFile :: STRING
})
Quando nenhuma propriedade extra é especificada, o gráfico herda todas as propriedades necessárias do tipo pai:
(:Comment => :Message) -- Same as: (:Comment => :Message += {})
Usar tipos de nós abstratos
Você pode definir tipos de nó puramente para construir hierarquias, mesmo quando o gráfico não contém nós concretos desse tipo. Os tipos de nó abstrato são úteis para criar agrupamentos conceituais e conjuntos de propriedades compartilhadas. Para isso, você pode definir um tipo de nó como ABSTRACT no gráfico no Microsoft Fabric:
ABSTRACT (:Message => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
browserUsed :: STRING,
locationIP :: STRING,
content :: STRING,
length :: UINT64
})
Os tipos de nó abstrato não estão disponíveis para carregamento direto de gráficos — eles existem apenas para estruturar sua hierarquia e definir propriedades compartilhadas. Tipos de nó concretos que herdam de tipos abstratos podem ser carregados com dados.
Definir tipos e famílias de borda
Um tipo de borda define o rótulo de chave, os tipos de propriedade e os tipos de nó de ponto de extremidade para bordas. Em bancos de dados gráficos, as bordas representam conexões entre nós. A definição de borda informa ao sistema quais relações são permitidas em seu gráfico:
(:Person)-[:knows { creationDate :: ZONED DATETIME }]->(:Person)
Este tipo de aresta define todas as arestas com:
- O rótulo
knows(chave) . - Uma
creationDatepropriedade que contémZONED DATETIMEvalores (carimbos de data/hora juntamente com um deslocamento de fuso horário). - Pontos de extremidade de origem e de destino que devem ser
Personnós.
A seta -> indica a direção da borda, da origem ao destino. Essas informações direcionais são cruciais para entender a semântica do seu gráfico.
Aqui estão mais exemplos de tipos de borda:
(:Person)-[:studyAt { classYear :: UINT64 }]->(:University)
(:Person)-[:workAt { workFrom :: UINT64 }]->(:Company)
Você só precisa especificar os rótulos de chave (Person, University, ou Company) para os tipos de nó de ponto de extremidade — não é necessário repetir a definição completa de tipo de nó. O sistema resolve essas referências às definições completas de tipo de nó.
Famílias de tipos de arestas gráficas
Os rótulos de teclas de borda do gráfico funcionam de forma diferente dos rótulos de teclas de nó. Você pode ter vários tipos de borda com o mesmo rótulo de chave em um tipo de gráfico, desde que eles tenham os mesmos rótulos e tipos de propriedade. No entanto, dois tipos de borda com o mesmo rótulo de chave devem diferir em pelo menos um tipo de nó de ponto final. Chamamos um conjunto de tipos de borda com o mesmo rótulo de chave de família de tipos de borda.
Este conceito permite modelar o mesmo tipo de relação entre diferentes tipos de entidades.
Example:
(:City)-[:isPartOf]->(:Country),
(:Country)-[:isPartOf]->(:Continent)
Ambos os tipos de borda usam o isPartOf rótulo, mas conectam diferentes tipos de nós, formando uma família de tipos de borda que representa relações de contenção hierárquica.
Usar subtipagem de nós nas definições de tipos de aresta
Ter de detalhar cada tipo de aresta pode ser um pouco aborrecido. Para simplificar, também é possível definir famílias de tipos de arestas que se alinhem com a hierarquia de tipos de nós implícita pelos seus extremos.
Exemplo:
-- Node types
ABSTRACT (:Message { ... }),
(:Post => :Message { ... }),
(:Comment => :Message { ... }),
-- All edge types (x)-[:hasTag]->(:Tag) where x is at least a (:Message)
(<:Message)-[:hasTag]->(:Tag)
Isto define implicitamente os seguintes tipos de arestas:
(:Post)-[:hasTag]->(:Tag)
(:Comment)-[:hasTag]->(:Tag)
Tipos de propriedade suportados
Quando você estiver definindo um tipo de propriedade, o tipo de valor da propriedade deve ser um que o gráfico no Microsoft Fabric suporta. Escolher os tipos de dados certos é importante para a eficiência do armazenamento e o desempenho da consulta.
Aqui estão os tipos de dados que você pode usar para valores de propriedade:
-
INT(também:INT64) -
UINT(também:UINT64) STRING-
BOOL(também:BOOLEAN) -
DOUBLE(também:FLOAT64,FLOAT) -
T NOT NULL, ondeTé qualquer um dos tipos de dados anteriores. -
LIST<T>eLIST<T> NOT NULL, ondeTé qualquer um dos tipos de dados anteriores.
Para obter informações completas sobre tipos de valor, consulte Valores GQL e tipos de valor.
Importante
Todos os tipos de propriedade com o mesmo nome que ocorrem em um tipo de nó ou tipo de borda de um determinado tipo de gráfico devem especificar o mesmo tipo de valor de propriedade.
A única exceção: eles podem diferir se incluem o valor nulo.
Por exemplo, de acordo com essa regra, um tipo de gráfico com (:A { id :: STRING }), (:B { id :: STRING NOT NULL}) seria válido, enquanto um tipo de gráfico com (:A { id :: STRING }), (:B { id :: INT}) seria inválido.
Configurar restrições de chave de nó
As restrições de chave de nó definem como cada nó em seu gráfico é identificado exclusivamente por um ou mais de seus valores de propriedade. As principais restrições funcionam como restrições de chave primária em bancos de dados relacionais e garantem a integridade dos dados. Uma restrição de chave de nó pode direcionar nós em vários tipos de nós, o que permite definir chaves de nó para hierarquias conceituais inteiras.
Compreender as principais restrições é crucial porque elas:
- Garanta exclusividade: evite nós duplicados com base em sua lógica de negócios.
- Permitir pesquisas eficientes: permita que o sistema otimize consultas que pesquisam nós específicos.
- Suporte à integração de dados: forneça uma maneira estável de referenciar nós em diferentes fontes de dados.
Importante
Para gráfico no Microsoft Fabric, exatamente uma restrição de chave deve restringir cada nó.
Como funcionam as restrições de chave de nó
Você pode especificar restrições de chave de nó em seu tipo de gráfico. Cada restrição de chave de nó tem características específicas que fazem com que funcione de forma eficaz:
Componentes de uma restrição de chave de nó:
- Tem um nome exclusivo dentro do tipo de gráfico para fácil referência.
- Define nós de destino usando um padrão de restrição simples que especifica a quais nós a restrição se aplica.
- Define as propriedades que formam o valor de chave exclusivo.
Example:
CONSTRAINT person_pk
FOR (n:Person) REQUIRE n.id IS KEY
Essa sintaxe cria uma restrição de chave de nó chamada person_pk para todos os nós com pelo menos o Person rótulo. A restrição garante que cada nó no gráfico seja identificado exclusivamente por sua id propriedade. Nenhum nó com o Person rótulo pode ter o mesmo id valor.
Você também pode definir chaves compostas que usam várias propriedades juntas para garantir exclusividade usando a CONSTRAINT ... FOR ... REQUIRE (n.prop1, n.prop2) IS KEY sintaxe.
Importante
Propriedades usadas em restrições de chave:
- Não pode ser nulo
- Deve ser declarado como
NOT NULLnos tipos de nó e tipos de borda visados pela restrição de chave