Introdução ao App Builder - Apêndice A: A camada de dados no App Builder (Avançado)
Este é o primeiro apêndice da série de tutoriais Introdução ao App Builder. Estes apêndices complementam as lições da série e fornecem informações mais detalhadas sobre os conceitos apresentados.
Nesta lição, exploraremos ainda mais a camada de dados do App Builder, a área onde armazenamos os dados que nossa aplicação precisará recuperar e manipular.
Tipos de dados lógicos
Como já aprendemos, a camada de dados é onde armazenamos as informações que nossas aplicações precisarão para executar suas tarefas. O App Builder fornece ferramentas para organizar, categorizar e rotular seus dados logicamente, facilitando e tornando mais eficiente a recuperação futura.
Tipos de dados lógicos vs. físicos
Antes de examinar cada tipo, é importante compreender a distinção fundamental entre tipos de dados lógicos e físicos, pois esse conceito se aplica a todas as colunas criadas no App Builder.
-
Tipos de dados lógicos: Definem o propósito dos dados e como são representados nas camadas de negócios e interface do usuário (UI) da aplicação. O tipo lógico determina como o App Builder exibe os dados e quais operações são válidas para eles.
-
Tipos de dados físicos: Definem o tipo de armazenamento dos dados, o formato específico usado para salvar as informações no banco de dados.
Por exemplo, considere os valores 0 e 1. Esses dois valores podem ser representados de várias formas lógicas diferentes, dependendo do contexto:
-
Como um booleano (representando
Verdadeiro/Falso) -
Como um número (os inteiros 0 e 1)
-
Como texto (os caracteres
0e1) -
Como um percentual (representando 0% e 100%)
-
Como moeda (representando $0,00 e $1,00)
Cada um desses tipos lógicos é tratado de forma diferente pela aplicação, mesmo que os dados subjacentes sejam semelhantes. Correspondentemente, esses valores podem ser armazenados fisicamente em formatos diferentes. Um booleano Falso/Verdadeiro pode ser armazenado como um Bit (0/1), enquanto o texto 0/1 seria armazenado como um NVarchar.
Conforme exploramos os tipos de dados abaixo, você verá que para cada tipo lógico selecionado, o App Builder fornece uma ou mais opções de tipo físico compatível.
ID Único
O tipo de dado lógico ID Único é usado para armazenar um valor de identificador único. Na Lição 2, aludimos brevemente a esse tipo de dado quando criamos a tabela Região. Mencionamos que o App Builder criou automaticamente uma coluna para identificar as entradas dessa tabela e atribuiu a ela esse tipo de dado. Agora, porém, vamos ver em mais detalhes como funciona. Siga estas etapas:
-
Em App Workbench > Tabelas, localize e selecione a tabela Categoria.
-
Na aba Colunas, encontre a coluna CategoryID e clique no ícone editar no final da linha. Você verá a seguinte tela de edição:

-
Na seção Tipos de Dados, observe os seguintes detalhes:
-
O campo Lógico é onde você define o tipo de dado lógico de uma coluna. Esta coluna foi criada automaticamente pelo App Builder, e ele selecionou ID Único.
-
O campo Físico mostra os tipos de dados físicos disponíveis para uma coluna com este tipo de dado lógico:
-
Char: Dados de caractere de comprimento fixo.
-
UUID (atualmente selecionado): Este acrônimo significa Identificador Universalmente Único. É um número de 128 bits usado para identificar exclusivamente informações.
-
-
-
Na seção Configurações de PK, as seguintes caixas de seleção estão disponíveis. O App Builder marcou todas elas, que é a configuração recomendada ao criar uma chave primária de coluna única que usa um valor gerado automaticamente. Para cenários mais complexos, como chaves compostas (por exemplo, uma chave composta por duas chaves estrangeiras), você pode usar configurações diferentes:
-
Chave Primária: Esta caixa de seleção indica se uma coluna deve ser a chave primária da sua tabela, ou seja, aquela que torna um registro único.
-
Gerado Automaticamente: Quando esta caixa de seleção está marcada, o App Builder gera automaticamente um valor para esta coluna sempre que um novo registro é criado na tabela.
-
Obrigatório: Esta caixa de seleção indica se esta coluna pode ficar vazia (ou seja, ter um valor nulo) quando um novo registro é criado.
-
Na seção Avançado, as seguintes opções aparecem:
-
Tipo de Uso da Coluna: Isto indica ao App Builder para que uma determinada coluna será usada (consulte Uso para mais informações). Atualmente, não há seleção aqui, pois o objetivo de um identificador único é permitir que o App Builder, e não usuários ou desenvolvedores, identifique um registro.
-
Valor Padrão: Este campo, atualmente vazio, é onde você poderia definir um valor padrão para a coluna (consulte Valores padrão para mais informações). No caso de valores gerados automaticamente, porém, um valor é sempre fornecido.
-
String
Agora, vamos revisar String, provavelmente o tipo de dado lógico mais frequentemente usado. Ele permite armazenar uma sequência de caracteres de comprimento variável, como letras, símbolos e números. Vamos examinar mais de perto uma de nossas colunas que usa este tipo de dado:
-
Em App Workbench > Tabelas, localize e selecione a tabela Employee.
-
Na aba Colunas, encontre a coluna FirstName e clique no ícone editar no final da linha. Você verá a tela de edição da coluna:

-
Na seção Tipos de Dados, as seguintes opções aparecem:
-
O campo Lógico é onde esta coluna recebeu o tipo de dado lógico String.
-
O campo Físico tem as seguintes opções:
-
Char: Dados de caractere de comprimento fixo.
-
Texto Criptografado: Dados de texto criptografado.
-
NChar: Dados de caractere UNICODE de comprimento fixo.
-
NVarchar (atualmente selecionado): Dados de caractere UNICODE de comprimento indeterminado. Normalmente, todas as strings do App Builder são armazenadas como este tipo físico para que possam suportar Unicode e ocupar menos espaço.
-
Varchar: Dados de caractere de comprimento indeterminado.
-
-
Comprimento: Número de bytes usados para armazenar o número. Para tipos de dados binários, varbinary e image, o comprimento é o número de bytes.
-
-
Na seção Configurações de PK, há opções para auxiliar na criação manual de chaves primárias:
-
Chave Primária: Esta caixa de seleção indica que a coluna deve atuar como a chave primária da tabela.
-
Obrigatório: Esta caixa de seleção indica se esta coluna pode ficar vazia (ou seja, ter um valor nulo) quando um novo registro é criado.
-
-
Na seção Avançado, as seguintes opções aparecem:
-
Tipo de Uso da Coluna: Isto indica ao App Builder para que uma determinada coluna será usada (consulte Uso para mais informações). Isto pode acelerar o processo de desenvolvimento posteriormente.
-
Valor Padrão: Neste campo, você pode inserir um valor padrão a ser usado para a coluna se um não for fornecido (consulte Valores padrão para mais informações).
-
Traduzível: Se ativado, esta caixa de seleção ativa traduções para uma determinada coluna, o que significa que os dados na coluna que são adicionados ou editados através da camada de negócios são traduzidos automaticamente para outro idioma em tempo de execução. Traduzir o pacote de aplicativos também traduz todos os dados na coluna.
-
Data, Data/Hora, Hora
Estes são os formatos usados pelo App Builder para armazenar uma data, hora ou ambas específicas. As informações de data são formatadas como MM/DD/YYYY. Quando você tenta editar um campo com este tipo de dado lógico, você vê um popup de calendário que permite escolher um novo valor de data.
Vamos examinar mais de perto como este tipo de dado funciona analisando a coluna BirthDate em nossa tabela Employee.
-
Em App Workbench > Tabelas, localize e selecione a tabela Employee.
-
Na aba Columns, localize a coluna BirthDate e clique no ícone de edição ao final da linha. Você verá a tela de edição da coluna:

-
Na seção Data Types, os seguintes campos aparecem:
-
Logical: É aqui que você seleciona Date, Date/Time ou Time.
-
Physical: As opções de tipo de dados físicos mudam dependendo da sua seleção de tipo de dados lógico:
-
Quando o tipo de dados lógico é Date:
-
Date: Armazena apenas a data.
-
Decimal: Armazena um valor decimal, entre
1038 + 1e1038 - 1. -
Integer - Int: Armazena um inteiro, entre
-2.147.483.648e2.147.483.647.
-
-
Quando o tipo de dados lógico é Date/Time:
- DateTime: Armazena a data e a hora do dia.
-
Quando o tipo de dados lógico é Time:
- Time: Armazena apenas a hora do dia.
-
-
-
Na seção PK Settings, há opções para auxiliar na criação manual de chaves primárias:
-
Primary Key: Esta caixa de seleção indica que a coluna deve funcionar como a chave primária da tabela.
-
Required: Esta caixa de seleção indica se esta coluna pode ficar vazia (ou seja, ter um valor nulo) quando um novo registro é criado.
-
-
Na seção Advanced, as seguintes opções aparecem:
-
Column Usage Type: Indica ao App Builder para que uma determinada coluna será usada (consulte Usage para mais informações). Isso pode acelerar o processo de desenvolvimento posteriormente.
-
Default Value: Neste campo, você pode inserir um valor padrão a ser usado para a coluna se um não for fornecido (consulte Default values para mais informações).
-
Photo
Outro tipo de dados lógico que pode ser usado na camada de dados do App Builder é Photo. Exploraremos suas opções observando a coluna Photo da nossa tabela Employee.
-
Em App Workbench > Tables, localize e selecione a tabela Employee.
-
Na aba Columns, localize a coluna Photo e clique no ícone de edição ao final da linha. Você verá a tela de edição da coluna:

-
Na seção Data Types, os seguintes campos estão disponíveis:
-
Logical: É aqui que Photo é selecionado como o tipo de dados lógico.
-
Physical: Colunas com este tipo de dados lógico têm apenas uma opção de tipo de dados físico: Binary. É representado numericamente por uma combinação de zeros e uns.
-
-
Na seção PK Settings, há opções para auxiliar na criação manual de chaves primárias:
-
Primary Key: Esta caixa de seleção indica que a coluna deve funcionar como a chave primária da tabela.
-
Required: Esta caixa de seleção indica se esta coluna pode ficar vazia (ou seja, ter um valor nulo) quando um novo registro é criado.
-
-
Na seção Advanced, as seguintes opções aparecem:
-
Column Usage Type: Indica ao App Builder para que uma determinada coluna será usada (consulte Usage para mais informações). Isso pode acelerar o processo de desenvolvimento posteriormente.
-
Default Value: Neste campo, você pode inserir um valor padrão a ser usado para a coluna se um não for fornecido (consulte Default values para mais informações).
-
File
O tipo de dados lógico File é usado para armazenar um arquivo. Desenvolvedores podem usá-lo para permitir que usuários finais façam upload de novos arquivos para o banco de dados. Em nossa tabela Employee, atualmente não temos nenhuma coluna com o tipo de dados File, mas podemos usar a coluna Photo que observamos anteriormente para aprender sobre ele.
-
Em App Workbench > Tables, localize e selecione a tabela Employee.
-
Na aba Columns, localize a coluna Photo e clique no ícone de edição ao final da linha.
-
Na seção Tipos de Dados:
-
Altere a seleção no campo Lógico de Foto para Arquivo:

Nota
Fazer isso não afeta a aparência da página Funcionário da sua aplicação, porque na página Controles dela, o tipo de controle ainda é Foto, então o App Builder renderiza corretamente.
-
O campo Físico para colunas com este tipo de dado lógico tem três opções:
-
Binário: Dados binários.
-
Binário Criptografado: Igual à opção anterior, mas com criptografia.
-
NVarchar: Dados de caracteres UNICODE de comprimento indeterminado.
-
-
-
Na seção Configurações de PK, há opções para auxiliar na criação manual de chaves primárias:
-
Chave Primária: Esta caixa de seleção indica que a coluna deve atuar como a chave primária da tabela.
-
Obrigatório: Esta caixa de seleção indica se esta coluna pode ficar vazia (ou seja, ter um valor nulo) quando um novo registro é criado.
-
-
Na seção Avançado, as seguintes opções aparecem:
-
Tipo de Uso da Coluna: Isso indica ao App Builder para que uma determinada coluna será usada (consulte Uso para mais informações). Isso pode acelerar o processo de desenvolvimento posteriormente, pois faz com que alguns campos e opções sejam configurados automaticamente.
-
Valor Padrão: Neste campo, você pode inserir um valor padrão a ser usado para a coluna se um não for fornecido (consulte Valores padrão para mais informações).
-
Número, Percentual
O tipo de dado lógico Número armazena dados numéricos. Se você quiser armazenar, apresentar ou calcular valores de percentual, também há um tipo de dado lógico Percentual disponível. Vamos analisar esses dois observando a coluna UnitsInStock da nossa tabela Product:
-
Em App Workbench > Tabelas, localize e selecione a tabela Product.
-
Na aba Colunas, encontre a coluna UnitsInStock e clique no ícone de edição ao final da linha. Você verá sua tela de edição:

-
Na seção Tipos de Dados, os seguintes campos estão disponíveis:
-
Lógico: É aqui que Número ou Percentual são selecionados como o tipo de dado lógico.
-
Físico: Colunas com este tipo de dado lógico têm as seguintes opções de tipo de dado físico:
-
Decimal: Selecione isto para armazenar um número com um grande valor decimal, entre
1038 + 1e1038 - 1. Esta é a única opção disponível quando o tipo de dado lógico é Percentual. -
Float: Selecione isto para armazenar valores decimais menores, entre
-1.79E + 308e-2.23E -308. -
Inteiro - BigInt: Selecione isto para armazenar números inteiros muito grandes, entre
-9,223,372,036,854,775,808e9,223,372,036,854,775,807. -
Inteiro - Int (atualmente selecionado): A seleção padrão para números inteiros, entre
-2,147,483,648e2,147,483,647. -
Inteiro - SmallInt: Selecione isto para armazenar números inteiros pequenos, entre
-32,768e32,767. -
Inteiro - TinyInt: Selecione isto para armazenar inteiros entre
0e255. -
Real: Selecione isto para armazenar números reais, entre
-3.40E + 38e-1.18E - 38.
-
-
-
Na seção Configurações de PK, há opções para auxiliar na criação manual de chaves primárias:
-
Chave Primária: Esta caixa de seleção indica que a coluna deve atuar como a chave primária da tabela.
-
Gerado Automaticamente: Quando esta caixa de seleção está marcada e o tipo de dado físico é um tipo inteiro, o App Builder ativa a funcionalidade nativa de auto-incremento do mecanismo de banco de dados (por exemplo, o atributo
IDENTITYno SQL Server e PostgreSQL, ouAUTO_INCREMENTno MySQL). Se o mecanismo de banco de dados não suportar colunas com auto-incremento, o App Builder gera os valores por si mesmo.
-
-
Obrigatório: Esta caixa de seleção indica se esta coluna pode ficar vazia (ou seja, ter um valor nulo) ao criar um novo registro.
-
Na seção Avançado, as seguintes opções aparecem:
-
Tipo de Uso da Coluna: Isso indica ao App Builder para que uma determinada coluna será usada (consulte Uso para mais informações). Isso pode acelerar o processo de desenvolvimento posteriormente.
-
Valor Padrão: Neste campo, você pode inserir um valor padrão a ser usado para a coluna se nenhum for fornecido (consulte Valores padrão para mais informações).
-
Moeda
O tipo de dados lógico Moeda é usado para armazenar valores monetários com formatação adequada. Na camada de interface do usuário, os controles que usam colunas de moeda são identificados como moeda. Para analisar melhor este tipo de dados lógico, vamos usar a coluna UnitPrice da nossa tabela Product.
-
Em App Workbench > Tabelas, localize e selecione a tabela Product.
-
Na guia Colunas, encontre a coluna UnitPrice e clique no ícone de edição no final da linha. Você verá sua tela de edição:

-
Na seção Tipos de Dados, os seguintes campos estão disponíveis:
-
Lógico: É aqui que você seleciona Moeda como o tipo de dados lógico.
-
Físico: Colunas com este tipo de dados lógico têm apenas uma opção de tipo de dados físico: Decimal, usado para armazenar um número com um grande valor decimal, entre
1038 + 1e1038 - 1. -
Precisão: Neste campo, insira o número de dígitos que os números devem ter. Por exemplo, o número
123.45tem precisão5. Para moedas, este é o valor padrão. -
Escala: Neste campo, insira o número de dígitos exibidos à direita do ponto decimal em um número. Por exemplo, o número
123.45tem escala2. Para moedas, este é o valor padrão.
-
-
Na seção Configurações de PK, há opções para auxiliar na criação manual de chaves primárias:
-
Chave Primária: Esta caixa de seleção indica que a coluna deve atuar como a chave primária da tabela.
-
Obrigatório: Esta caixa de seleção indica se esta coluna pode ficar vazia (ou seja, ter um valor nulo) ao criar um novo registro.
-
-
Na seção Avançado, as seguintes opções aparecem:
-
Tipo de Uso da Coluna: Isso indica ao App Builder para que uma determinada coluna será usada (consulte Uso para mais informações). Isso pode acelerar o processo de desenvolvimento posteriormente.
-
Valor Padrão: Neste campo, você pode inserir um valor padrão a ser usado para a coluna se nenhum for fornecido (consulte Valores padrão para mais informações).
-
Nota
O símbolo de moeda exibido na interface do usuário varia dependendo de qual moeda está definida como padrão. Para alterar o padrão, siga estas etapas:
-
Em App Workbench > Fontes de Dados, localize e selecione a fonte Northwinds (Padrão).
-
Clique em Editar. A caixa de diálogo Camada de Armazenamento de Dados é aberta.
-
Clique na guia Utilitários e depois em Configurações Avançadas. A caixa de diálogo Configurações da Fonte de Dados será aberta.
-
No campo Moeda, altere a moeda padrão.
Booleano
O tipo de dados lógico Booleano pode armazenar apenas dois valores possíveis, verdadeiro ou falso, e é usado para fornecer lógica. Para analisar como funciona, vamos usar o campo IsDiscontinued na nossa tabela Product:
-
Em App Workbench > Tabelas, localize e selecione a tabela Product.
-
Na guia Colunas, encontre a coluna IsDiscontinued e clique no ícone de edição no final da linha. Você verá sua tela de edição:

-
Na seção Tipos de Dados, os seguintes campos estão disponíveis:
- Lógico: É aqui que você seleciona Booleano como o tipo de dados lógico.
-
Físico: Colunas com este tipo de dado lógico apresentam as seguintes opções de tipo de dado físico:
-
Bit: Armazena dados como
0(significandoFalse) ou1(significandoTrue). Normalmente, usa-se esta opção quando se deseja representar uma caixa de seleção na camada de UI, onde desmarcado significaFalsee marcado significaTrue. -
Char: Dados de caractere de comprimento fixo. Se você selecionar Char, a camada de UI exibirá uma lista que apresenta
TrueeFalsecomo opções, em vez de uma caixa de seleção. -
Decimal: Selecione esta opção para armazenar um número com um grande valor decimal, entre
1038 + 1e1038 - 1.
-
-
Na seção Configurações de PK, existem opções para auxiliar na criação manual de chaves primárias:
-
Chave Primária: Esta caixa de seleção indica que a coluna deve atuar como a chave primária da tabela.
-
Obrigatório: Esta caixa de seleção indica se esta coluna pode ficar vazia (ou seja, ter um valor nulo) quando um novo registro é criado.
-
-
Na seção Avançado, as seguintes opções aparecem:
-
Tipo de Uso da Coluna: Isto indica ao App Builder para que uma determinada coluna será usada (consulte Uso para mais informações). Isto pode acelerar o processo de desenvolvimento posteriormente.
-
Valor Padrão: Neste campo, você pode inserir um valor padrão a ser usado para a coluna se um não for fornecido (consulte Valores padrão para mais informações).
-
Email, URL
O tipo de dado lógico Email é usado para capturar, armazenar e exibir endereços de email. De forma similar, o tipo URL tem o mesmo propósito, mas para endereços web. Embora seja tecnicamente possível usar outros tipos de dados lógicos para armazenar estas informações, usar estes tipos garante consistência de dados ao armazenar todas as entradas de email ou URL com o comprimento recomendado e atribuindo-lhes o mesmo tipo de controle padrão.
Estes tipos são excelentes exemplos de modelos de coluna, que são definições de coluna pré-configuradas que acompanham o App Builder para acelerar o desenvolvimento. Você pode aprender mais sobre eles e até criar os seus próprios em Modelos de coluna.
-
Em App Workbench > Tabelas, localize e selecione a tabela Cliente.
-
Na aba Colunas, clique em + Coluna. A tela de criação de coluna aparecerá.
-
No campo Nome, insira
ContactEmailouCustomerWebsite, dependendo do tipo de dado que você deseja salvar. -
Na seção Tipos de Dados, as seguintes opções estão disponíveis:
-
Lógico: Selecione Email ou URL como o tipo de dado lógico. Fazer isto altera alguns dos valores padrão mostrados abaixo:

-
Físico: Colunas com este tipo de dado lógico apresentam as seguintes opções de tipo de dado físico:
-
Char: Dados de caractere de comprimento fixo.
-
Texto Criptografado: Dados de texto criptografado.
-
NChar: Dados de caractere UNICODE de comprimento fixo.
-
NVarchar: Dados de caractere UNICODE de comprimento indeterminado. Esta é a seleção padrão para o tipo de dado URL.
-
Varchar: Dados de caractere de comprimento indeterminado. Esta é a seleção padrão para o tipo de dado Email.
-
-
Comprimento: O comprimento do endereço web ou de email. Para o tipo de dado URL, o padrão é
2000e para Email, é320.
-
-
Na seção Configurações de PK, existem opções para auxiliar na criação manual de chaves primárias:
-
Chave Primária: Esta caixa de seleção indica que a coluna deve atuar como a chave primária da tabela.
-
Obrigatório: Esta caixa de seleção indica se esta coluna pode ficar vazia (ou seja, ter um valor nulo) quando um novo registro é criado.
-
-
Na seção Avançado, as seguintes opções aparecem:
- Tipo de Uso da Coluna: Isto indica ao App Builder para que uma determinada coluna será usada (consulte Uso para mais informações). Isto pode acelerar o processo de desenvolvimento posteriormente.
-
Valor Padrão: Neste campo, você pode inserir um valor padrão a ser usado para a coluna caso nenhum seja fornecido (consulte Valores padrão para mais informações).
- Traduzível: Se ativado, esta caixa de seleção ativa traduções para uma determinada coluna, o que significa que os dados na coluna que são adicionados ou editados através da camada de negócios são traduzidos automaticamente em tempo de execução. Traduzir o pacote de aplicativos também traduz todos os dados na coluna.
Valores padrão
As colunas no App Builder podem ser criadas com valores padrão. Isso pode ser útil, por exemplo, quando muitos registros devem ter o mesmo valor para uma determinada coluna com poucas ou nenhuma exceção. Neste último caso, usar um valor padrão e desabilitar operações de atualização garantiria completamente a integridade dos dados.
Para demonstrar como atribuir um valor padrão a uma coluna, usaremos a coluna País da tabela Funcionário. Vamos supor que a maioria dos funcionários da nossa empresa seja dos Estados Unidos. Portanto, esse deve ser o padrão da coluna.
-
Em App Workbench > Tabelas, localize e selecione a tabela Funcionário.
-
Na aba Colunas, encontre a coluna País e clique no ícone de edição no final da linha. A tela de edição da coluna será exibida.
-
Na seção Avançado, insira
Estados UnidosouEUAno campo Valor Padrão.
-
Clique em Salvar.
Teste seu trabalho clicando no botão Resultados no painel Tabela. Quando a lista de registros aparecer, clique em Criar e veja se o valor padrão está sendo exibido na coluna correta. Se estiver, sua alteração funcionou e agora, sempre que um novo registro for adicionado à tabela Funcionário, a coluna País terá automaticamente o valor que você inseriu (Estados Unidos ou EUA). Mas se uma entrada individual exigir, você pode editar esse valor manualmente, é claro. Isso ajudaria você a economizar muito tempo em um cenário onde há poucos ou nenhum funcionário vivendo em outros países.
Hora de praticar: Defina um padrão na tabela Produto
Seguindo as etapas que usamos acima para a tabela Funcionário, adicione um valor padrão a uma das colunas da tabela Produto. Vamos supor que quando um novo produto é adicionado ao catálogo da nossa empresa, inicialmente não há unidades em estoque. Portanto, dê à coluna UnitsInStock um valor padrão de 0. Teste seus resultados após definir o valor padrão.
Uso
Todas as colunas no App Builder têm um campo Tipo de Uso da Coluna (abreviado como Uso na aba Colunas). Este campo permite especificar a finalidade pretendida de uma coluna. Embora opcional, recomendamos usá-lo se uma das opções predefinidas atender às suas necessidades. Fazer isso permite que o App Builder ative automaticamente recursos, validações ou componentes de UI relevantes para essa coluna, acelerando seu processo de desenvolvimento.
O campo Tipo de Uso da Coluna pode ser encontrado na seção Avançado da tela de edição de uma coluna. A lista completa de opções está disponível em Tipos de uso de coluna, mas os mais frequentemente usados são os seguintes:
-
Título: Usado para indicar que uma coluna contém um título de lista. Portanto, quando você está criando objetos de lista para fazer menus suspensos na UI, o App Builder saberá usar essa coluna.
-
Subtítulo: Usado para fornecer contexto para campos de título. Quando você atribui este tipo de uso a uma coluna, o App Builder exibe seu conteúdo abaixo do título.
-
ENUM: Uma abreviação para "enumeração", este tipo de uso associa um valor de string significativo a um identificador único (como uma chave primária). Isso permite usar a string enumerada (por exemplo, 'Segunda', 'Terça') para identificar exclusivamente um registro de forma legível por humanos, em vez de depender de um UUID (por exemplo,
a1b2c3d4) que não tem significado para um usuário. -
Adicionado Por/Adicionado Em: Colunas com esta designação são preenchidas com quem criou um registro ou quando isso aconteceu. A função Auditoria lite cria colunas com esses tipos de uso automaticamente.
-
Changed By/Changed On: Colunas com esta designação são preenchidas com um registro de quem modificou um registro ou quando isso aconteceu. A função Audit lite cria colunas com esses tipos de uso automaticamente.
-
IsActive: Colunas com esta designação indicam se uma entrada está ativa ou não. A função Audit lite cria colunas com esses tipos de uso automaticamente.
Nota
Esta lição não cobre todos os tipos de uso. Outros tipos comuns incluem o seguinte:
-
Group: Define uma opção de agrupamento padrão para controles baseados em lista.
-
Block: Bloqueia operações de edição, operações de exclusão ou ambas, dependendo do valor atribuído à coluna.
-
Audit: Usado pelo App Builder como um identificador de registro na tabela de auditoria para registros que não usam uma chave primária UUID.
-
Flag: Usado em colunas de gráfico para exibir um valor próximo a um ponto de dados.
Para a lista completa de tipos de uso e suas descrições, consulte Tipos de uso de coluna.
Hora de praticar: Definir tipos de uso de coluna
Para praticar, vamos definir os tipos de uso Subtitle e ENUM.
-
Nossa tabela Category tem uma coluna Description. Edite essa coluna e atribua a ela o tipo de uso Subtitle. Quando fizer isso, em qualquer componente de interface que use a coluna Category como título, o App Builder sugerirá automaticamente usar Description como subtítulo.
-
Ainda em nossa tabela Category, adicione uma nova coluna chamada CategoryStatus com String como seu tipo de dados lógico e atribua a ela o tipo de uso ENUM. Quando fizer isso, está sinalizando essa coluna como o identificador legível por humanos para a categoria. Enquanto CategoryID (um UUID) é a chave primária, CategoryStatus pode ser usado como o valor enumerado único (por exemplo, "Active", "Archived", "Draft") que a lógica de negócios pode referenciar.
-
Nossa tabela Region atualmente tem apenas as colunas RegionID e Region. Adicione duas novas colunas: Description, usando o tipo de dados lógico String, e RegionCode, também usando o tipo de dados lógico String. Atribua o tipo de uso Subtitle a Description e o tipo de uso ENUM a RegionCode. Em seguida, clique no botão Results no painel Table e insira valores para ambas as novas colunas nos registros West Coast Region e East Coast Region que você criou em Lição 2.
Chaves e índices
Na camada de dados, é importante entender como o banco de dados identifica e organiza registros. Isso é gerenciado por meio de chaves e índices, que são cruciais para garantir a integridade dos dados e otimizar o desempenho.
Chaves
Chaves são colunas (ou conjuntos de colunas) usadas para identificar registros de forma única em uma tabela. Existem os seguintes tipos:
-
Primary Key (PK): Este é o identificador principal de uma tabela. Todo registro deve ter um valor para a chave primária, e esse valor deve ser único dentro da tabela. Em nossas tabelas, OrderID, ProductID e EmployeeID são todas chaves primárias, geralmente configuradas como IDs únicos gerados automaticamente.
-
Foreign Key (FK): Esta é uma coluna em uma tabela que se refere a uma coluna em outra tabela. É o mecanismo por trás das vinculações. Por exemplo, a coluna OrderID na tabela OrderDetail é uma chave estrangeira que aponta para OrderID (a chave primária) na tabela Order.
-
Unique Key (UK): Esta é uma restrição que garante que todos os valores em uma coluna específica (ou conjunto de colunas) sejam únicos, semelhante a uma chave primária. Uma chave única também pode, em alguns sistemas de banco de dados, permitir um único valor nulo, enquanto uma chave primária não pode.
Índices
Um índice é uma estrutura de dados usada pelo banco de dados para encontrar registros mais rapidamente. Em vez de verificar uma tabela inteira em busca de um valor, o banco de dados pode usar um índice para ir diretamente aos registros relevantes.
Adicione um índice às colunas que são frequentemente usadas em operações de busca, condições de junção ou cláusulas WHERE. Em nosso banco de dados, a coluna OrderNumber na tabela Order é uma boa candidata para um índice porque podemos frequentemente buscar pedidos por esse número.
Chaves primárias são sempre indexadas automaticamente, por isso são tão rápidas para buscas. Adicionar índices a outras colunas, como chaves estrangeiras ou campos frequentemente pesquisados (como OrderNumber), pode melhorar significativamente o desempenho da aplicação. Você pode ver um símbolo + ao lado de certas colunas no App Builder, o que sugere que adicionar um índice poderia ser benéfico.
Melhores práticas
As melhores práticas do App Builder para a camada de dados incluem as seguintes recomendações para chaves e índices:
-
Chaves primárias de uma única parte: Use chaves primárias UUID de uma única parte. Isso simplifica o modelo de dados e oferece suporte automático aos recursos completos de auditoria do App Builder.
-
Indexar colunas: Indexe todas as chaves estrangeiras. Além disso, indexe qualquer campo que seja comumente usado para classificação, filtragem ou junção de dados para otimizar o desempenho.
Exercício: Adicionar uma chave única e um índice à tabela Order
Vamos colocar chaves e índices em prática na tabela Order. Primeiro, adicionaremos uma chave única na coluna OrderNumber para evitar números de pedido duplicados. Em seguida, adicionaremos um índice separado na mesma coluna para melhorar o desempenho de busca. Selecionar a opção Unique ao criar um índice realizaria ambos os objetivos de uma vez, mas faremos isso em duas etapas para demonstrar cada opção individualmente. Para mais informações sobre as opções de chave e índice disponíveis, consulte Aba Keys & Indexes.
-
Em App Workbench > Tables, localize e selecione a tabela Order.
-
Clique na aba Keys & Indexes.
-
Clique em + Key. O diálogo Constraint abre:

-
No campo Type, selecione Unique Key.
-
No campo Columns, selecione OrderNumber.
-
Clique em Save. Agora, o App Builder impede que dois registros Order tenham o mesmo valor OrderNumber.
-
Clique em + Key novamente para adicionar o índice. No campo Type, selecione Index.
-
No campo Columns, selecione OrderNumber.
-
Clique em Save.
Hora de praticar: Adicionar uma chave única à tabela OrderDetail
Seguindo as etapas acima, adicione uma chave única à tabela OrderDetail usando as colunas OrderID e ProductID juntas. Isso impede que um pedido inclua o mesmo produto mais de uma vez.
Inserir, atualizar e excluir
Na camada de dados do App Builder, cada tabela e coluna pode oferecer suporte à inserção, atualização e/ou exclusão de dados. Ao alterar essas opções na camada de dados, os desenvolvedores podem controlar como os dados são manipulados em todas as outras camadas, incluindo a aplicação final. Isso significa que as alterações feitas aqui substituem modificações semelhantes feitas em outras camadas. Por exemplo, mesmo que o controle em uma determinada página mostre um botão de exclusão e um usuário tenha permissões de exclusão, ainda não será possível excluir um registro se a operação de exclusão foi desabilitada aqui, e tentar fazer isso causará um erro.
Para demonstrar como essas opções podem ser controladas, vamos usar como exemplo nossa tabela Employee atual.
-
Em App Workbench > Tables, localize e selecione a tabela Employee.
-
No painel Table, clique em More > Edge Case. O diálogo Edge Case Settings aparece, e a seção CRUD Support mostra três caixas de seleção, todas marcadas no momento:

-
Insertable: Se habilitado, permite que registros da tabela sejam inseridos por meio de regras CRUD.
-
Updatable: Se habilitado, permite que registros da tabela sejam atualizados por meio de regras CRUD.
-
Deletable: Se habilitado, permite que registros da tabela sejam excluídos por meio de regras CRUD.
Desmarcar uma das caixas de seleção desabilitaria as operações para essa tabela em todas as camadas. Na tabela Employee, porém, queremos que todas essas operações sejam possíveis, já que novos funcionários podem ser contratados, os detalhes dos funcionários existentes podem mudar ou eles podem sair da equipe.
-
Hora de praticar: Desabilitar operações CRUD
Outra uma das nossas tabelas, Product, armazena registros sobre todos os nossos produtos. Essa tabela possui uma coluna chamada IsDiscontinued. Portanto, se deixarmos de vender um determinado produto, basta alterar o status desse campo de False para True. Dessa forma, não há necessidade de permitir operações de exclusão nessa tabela. Seguindo as etapas descritas acima, desabilite a operação de exclusão para essa tabela.
Relacionamentos
Os relacionamentos no App Builder são uma ferramenta poderosa para garantir a integridade dos dados. Eles definem conexões entre tabelas para impedir que os usuários insiram dados inválidos ou criem registros órfãos (registros em uma tabela que não possuem mais um registro relacionado em outra).
Ao criar um relacionamento, uma tabela é designada como pai (o lado "um" de um relacionamento um-para-muitos) e a outra como filha (o lado "muitos"). O relacionamento vincula colunas que contêm dados correspondentes. Normalmente, isso envolve vincular a chave primária da tabela pai (uma coluna que identifica exclusivamente cada registro) a uma coluna correspondente na tabela filha, que é então chamada de chave estrangeira. Embora os relacionamentos geralmente se baseiem na chave primária de uma tabela, também é possível defini-los em outras colunas exclusivas. Um relacionamento também pode ser definido usando várias colunas de cada tabela.
Vamos examinar o relacionamento pai-filho existente entre as tabelas Order e OrderDetail no nosso banco de dados Northwinds.
-
Em App Workbench > Tables, localize e selecione a tabela Order.
-
Clique na aba Relationships e observe as informações exibidas:
-
Many to One: Este painel lista os relacionamentos em que a tabela atual (Order) é a filha. Neste caso, muitos pedidos podem estar associados a um cliente, um funcionário e uma transportadora. As chaves estrangeiras para esses relacionamentos (CustomerID, EmployeeID e ShipperID) existem na tabela Order.
-
One to Many: Este painel lista os relacionamentos em que a tabela atual (Order) é a pai. A tabela OrderDetail está listada aqui porque muitos detalhes de pedido podem pertencer a um pedido.
Clique no ícone editar para o relacionamento OrderDetail. O popup Relationship é aberto:

-
Primary Table: Identifica a tabela pai no relacionamento (o lado "um").
-
Primary Columns: Mostra a(s) coluna(s) da tabela pai que identificam exclusivamente os registros para este relacionamento.
-
On Delete: Este menu suspenso define o que deve acontecer com os registros filhos na Secondary Table quando um registro pai correspondente na Primary Table é excluído. As opções são:
-
Cascade: Exclui automaticamente todos os registros filhos correspondentes quando o registro pai é excluído.
-
Default: Define o valor da(s) coluna(s) de chave estrangeira nos registros filhos para seu valor padrão predefinido quando o registro pai é excluído.
-
Null: Define o valor da(s) coluna(s) de chave estrangeira nos registros filhos como
NULLquando o registro pai é excluído. Isso só é possível se a coluna de chave estrangeira não estiver definida como "Required". -
Prevent: (Padrão) Impede que o registro pai seja excluído se houver registros filhos. Esta é a opção mais segura para manter a integridade dos dados.
-
-
On Update: Define o que deve acontecer com o valor da chave estrangeira nos registros filhos quando o valor da chave correspondente no registro pai é atualizado. As opções (Cascade, Default, Null e Prevent) funcionam de forma semelhante às ações de On Delete.
-
Secondary Table: Identifica a tabela filha no relacionamento (o lado "muitos").
-
Secondary Columns: Mostra a(s) coluna(s) de chave estrangeira na tabela filha que correspondem à(s) coluna(s) primária(s).
-
Validate: Esta caixa de seleção, habilitada por padrão, garante que o App Builder verifique essas regras de relacionamento (restrições de chave estrangeira) sempre que uma operação de salvamento ou exclusão ocorre. É altamente recomendável manter esta opção habilitada.
-
-
Exercício: Ativar exclusões em cascata no relacionamento entre Order e OrderDetail
Atualmente, a opção Prevent no relacionamento entre Order e OrderDetail impede que um pedido seja excluído enquanto ainda possui detalhes do pedido. Vamos alterar esse relacionamento para que a exclusão de um pedido exclua automaticamente todos os seus detalhes também.
-
Em App Workbench > Tables, localize e selecione a tabela Order.
-
Clique na aba Relationships.
-
No painel One to Many, clique no ícone de edição para o relacionamento OrderDetail. O popup Relationship abre.
-
Clique em Edit.
-
No campo On Delete, altere a seleção de Prevent para Cascade.

-
Clique em Save.
Agora, excluir um registro Order também exclui todos os seus registros OrderDetail associados.
Cuidado
Use exclusões em cascata com cuidado. Excluir um registro pai exclui irreversivelmente todos os seus registros filho relacionados também.
Aprendizado adicional
Isso conclui este aprofundamento nos detalhes da camada de dados do App Builder. Para uma análise mais detalhada das outras camadas, consulte o Apêndice B para a camada de negócios, Apêndice C para a camada de UI ou Apêndice D para a camada de segurança.