Um atributo é a menor célula de armazenamento em um banco de dados relacional (ver também Atributos de Relação). Não confunda os atributos da dataclass e os atributos de entidades:
Em um objeto dataclass, cada propriedade é um atributo de dataclass que corresponde a um campo na tabela correspondente (mesmo nome e tipo).
Em um objeto entity, os atributos de entidade são propriedades que contém valores para os atributos de datastore correspondentes.
Nota: os atributos e as propriedades são conceitos similares. "Atributo" se utiliza para designar as propriedades da dataclass que armazenam os datos, enquanto "propriedade" é mais genérica e define uma parte dos dados armazenados em um objeto.
Uma dataclass é um objeto que descreve os dados. As tabelas do banco de dados oferecida pela datastore são manejadas através de dataclasses. Cada tabela do banco de dados oferecida pela datastore tem uma classe de dados correspondente com o mesmo nome. Cada campo da tabela é um atributo da dataclass.
Uma dataclass está relacionada a um único datastore.
Uma datastore é o objeto de interface oferecido por ORDA para fazer referencia a um banco de dados e acessar a seus dados. O banco de dados principal, retornado pelo comando ds, está disponível como datastore.
Uma datastore oferece:
uma conexão ao banco de dados 4D
um conjunto de dataclasses para trabalhar com o banco de dados
Quando se maneja através do código, a datastore é um objeto cujas propriedades são todas as classes de dados definidas. Um armazém de dados só referencia a um único banco de dados.
Notas:
Um datastore só referencia às tabelas com uma única chave primária. As tabelas sem uma chave primária ou com chaves primárias compostas não são referenciadas.
Os atributos de tipo BLOB não são gerenciadas na datastore.
Uma cópia profunda (deep copy) duplica um objeto e todas as referências que contenha. Depois de um deep copy, uma coleção copiada contém elementos duplicados e, portanto, novas referências de todos os elementos originais. Ver também Copia superficial.
Una entidade é um objeto que corresponde a um modelo dataclass. Uma entidade contém os mesmos atributos que a dataclass.
Uma entidade pode ser vista como uma instância da dataclass, como um registro da tabela que corresponde à dataclass em seu datastore associado. Entretanto, uma entidade também contém dados relacionados. O objetivo da entidade é gerenciar os dados (criar, atualizar, eliminar).
Una seleção de entidades é um objeto. Ao consultar a datastore, se devolve uma seleção de entidades. Uma seleção de entidades é um conjunto de referências a entidades relacionadas com a mesma dataclass.
Uma seleção de entidades contém:
um conjunto de 0 a X referências de entidades,
uma propriedade length (sempre),
as propriedades queryPlan e queryPath (se forem solicitadas durante a consulta).
Dado que as entidades são gerenciadas como referências, os dados são carregados apenas quando for necessário, ou seja, quando forem acessados no código ou através dos widgets da interface. Este principio de otimização é chamada de lazy loading
Os objetos ORDA, como datastores, dataclasses, entity selections e entities, definem as classes de objetos. Oferecem métodos específicos para interagir diretamente com eles. Estes métodos também são chamados de funções membros. Ditos métodos são utilizados ao invocá-los em uma instância do objeto.
Por exemplo, o método query() é uma função membro da dataclass. Se tiver salvo um objeto dataclass na variável $myClass, pode escrever:
Nesta documentação, o tipo de dados "Misto" se utiliza para designar os diferentes tipos de valores que podem ser armazenados nos atributos de una dataclass. Inclui:
número
texto
null
booleano
data
objeto
coleção
imagem(*)
(*) o tipo Imagem não é compatível com os métodos estatísticos como entitySelection.max( ).
No modo "bloqueio otimista", as entidades não são bloqueadas explicitamente antes de serem atualizadas. Cada entidade tem um carimbo interno que se incrementa automaticamente cada vez que a entidade é salva no disco. Os métodos entity.save( ) ou entity.drop( ) devolverão um erro se o carimbo da entidade carregada (em memória) e o carimbo da entidade no disco não coincidem, ou se a entidade tiver sido abandonada. O bloqueio otimista só está disponível na implementação ORDA. Ver "Bloqueio pessimista".
Um "bloqueio pessimista" significa que se uma entidade estiver bloqueada antes de ser acessada, utilizando o método entity.lock( ). Outros processos não podem atualizar nem eliminar a entidade até que esteja desbloqueada. A linguagem 4D clássica só permite bloqueios pessimistas. Ver "Bloqueio otimista".
Nota: Atributos e Propriedades são conceitos similares. "Atributo" se utiliza para designar as propriedades da dataclass que armazenam os dados, enquanto "propriedade" é mais genérica e define uma parte dos dados armazenados em um objeto.
Uma propertyPath é a rota de acesso a uma propriedade em um objeto dado. Se a propriedade estiver aninhada em vários níveis, cada nível está separado por um ponto (".").
Os atributos de relação são utilizados para se conceitualizar as relações entre as dataclasses (muitos a um e um a muitos).
Relação Muitos a um (a dataclassA faz referencia a uma ocorrência da dataclassB): um atributo Relação está disponível na dataclassA e referencia a uma instância da dataclassB.
Relação Um a muitos (uma ocorrência da dataclassB faz referencia a várias ocorrências da dataclassA): um atributo Relação está disponível nos dataclassB e referencia a várias instâncias de dataclassA.
Uma dataclass pode ter atributos de relação recursivos.
Em uma entidade, o valor de um atributo Relaçãop pode ser una entidade ou uma seleção de entidade.
Um banco de dados D aberto em um servidor 4D ou 4D (disponível através de HTTP) e exposta como um recurso REST. Pode fazer referência local a este banco de dados como Datastore desde outras estações de trabalho, onde se atribui um locaID. O armazem de dados remoto pode ser usado através de conceitos ORDA (armazem de dados, classe de dados, seleção de entidades ...). Este uso se envia a um sistema de licenças.
Quando a aplicação 4D se conecta a um Datastore remota, se cria uma sessão no servidor 4D (HTTP). Se gera uma sessão de cookies e se associa com a identificação de armazem de dados local.
Cada vez que se abre uma nova sessão, se utiliza uma licença. Cada vez que é fechado, se libera a licença.
As sessões inativas são fechadas automaticamente depois de um tempo de espera. O tempo de espera predeterminado é de 48 horas, pode ser configurado pelo desenvolvedor (deve ser> = 60 minutos).
Uma shallow copy (cópia superficial) só duplica a estrutura dos elementos e conserva as mesmas referências internas. Depois de uma cópia superficial, duas coleções compartilharão os elementos individuais. Ver também Cópia profunda.
Utilizado na tecnologia de bloqueio "otimista". Todas as entidades têm um contador interno, a stamp ou carimbo, que é incrementada cada vez que a entidade for salva. Ao comparar automaticamente os carimbos entre uma entidade que é salva e sua versão armazenada no disco, 4D pode evitar modificações concorrentes nas mesmas entidades.