Saltar al contenido

Introducción a App Builder - Apéndice A: La capa de datos en App Builder (Avanzado)

Este es el primer apéndice de la serie de tutoriales Introducción a App Builder. Estos apéndices complementan las lecciones de la serie y proporcionan información más detallada sobre los conceptos presentados.

En esta lección, exploraremos más a fondo la capa de datos de App Builder, el área donde se almacenan los datos que nuestra aplicación necesitará recuperar y manipular.

Tipos de datos lógicos

Como ya hemos aprendido, la capa de datos es donde se almacena la información que nuestras aplicaciones necesitarán para realizar sus tareas. App Builder proporciona herramientas para organizar, categorizar y etiquetar los datos de forma lógica, lo que facilita y hace más eficiente su recuperación futura.

Tipos de datos lógicos vs. físicos

Antes de examinar cada tipo, es importante entender la distinción fundamental entre tipos de datos lógicos y físicos, ya que este concepto se aplica a todas las columnas creadas en App Builder.

  • Tipos de datos lógicos: Definen el propósito de los datos y cómo se representan dentro de las capas de negocio e interfaz de usuario (UI) de la aplicación. El tipo lógico determina cómo App Builder muestra los datos y qué operaciones son válidas para ellos.

  • Tipos de datos físicos: Definen el tipo de almacenamiento de los datos, el formato específico utilizado para guardar la información en la base de datos.

Por ejemplo, considera los valores 0 y 1. Estos dos valores pueden representarse de varias formas lógicas diferentes, dependiendo del contexto:

  • Como booleano (representando Verdadero/Falso)

  • Como número (los enteros 0 y 1)

  • Como texto (los caracteres 0 y 1)

  • Como porcentaje (representando 0% y 100%)

  • Como moneda (representando $0.00 y $1.00)

La aplicación trata cada uno de estos tipos lógicos de manera diferente, aunque los datos subyacentes sean similares. En consecuencia, estos valores pueden almacenarse físicamente en formatos diferentes. Un booleano Falso/Verdadero podría almacenarse como un Bit (0/1), mientras que el texto 0/1 se almacenaría como NVarchar.

A medida que exploramos los tipos de datos a continuación, verás que para cada tipo lógico seleccionado, App Builder proporciona una o más opciones de tipo físico compatible.

ID único

El tipo de dato lógico ID único se utiliza para almacenar un valor de identificador único. En la Lección 2, hicimos una breve alusión a este tipo de dato cuando creamos la tabla Región. Mencionamos que App Builder creó automáticamente una columna para identificar las entradas en esa tabla y le asignó este tipo de dato. Ahora, sin embargo, veamos con más detalle cómo funciona. Sigue estos pasos:

  1. En App Workbench > Tablas, localiza y selecciona la tabla Categoría.

  2. En la pestaña Columnas, encuentra la columna CategoryID y haz clic en el icono editar al final de la fila. Verás la siguiente pantalla de edición:

    Pantalla de edición de la columna CategoryID

  3. En la sección Tipos de datos, toma nota de los siguientes detalles:

    • El campo Lógico es donde defines el tipo de dato lógico de una columna. Esta columna fue creada automáticamente por App Builder, y seleccionó ID único.

    • El campo Físico muestra los tipos de datos físicos disponibles para una columna con este tipo de dato lógico:

      1. Char: Datos de caracteres de longitud fija.

      2. UUID (actualmente seleccionado): Este acrónimo significa Identificador Único Universal. Es un número de 128 bits utilizado para identificar información de forma única.

  4. En la sección Configuración de PK, están disponibles las siguientes casillas de verificación. App Builder marcó todas ellas, que es la configuración recomendada al crear una clave principal de una sola columna que utiliza un valor generado automáticamente. Para escenarios más complejos, como claves de varias partes (por ejemplo, una clave compuesta por dos claves externas), podrías utilizar diferentes configuraciones:

  5. Clave primaria: Esta casilla de verificación indica si una columna debe ser la clave primaria de su tabla, es decir, la que hace que un registro sea único.

    1. Generado automáticamente: Cuando se selecciona esta casilla de verificación, App Builder generará automáticamente un valor para esta columna cada vez que se cree un nuevo registro en la tabla.

    2. Requerido: Esta casilla de verificación indica si esta columna puede dejarse vacía (es decir, tener un valor nulo) cuando se crea un nuevo registro.

  6. En la sección Avanzado, aparecen las siguientes opciones:

    1. Tipo de uso de columna: Esto indica a App Builder para qué se utilizará una columna determinada (consulta Uso para obtener más información). Actualmente no hay selección aquí, ya que el propósito de un identificador único es permitir que App Builder, no los usuarios ni los desarrolladores, identifique un registro.

    2. Valor predeterminado: Este campo, actualmente vacío, es donde podrías definir un valor predeterminado para la columna (consulta Valores predeterminados para obtener más información). Sin embargo, en el caso de valores generados automáticamente, siempre se proporciona un valor.

String

Ahora, revisemos String, probablemente el tipo de dato lógico más utilizado. Te permite almacenar una secuencia de caracteres de longitud variable, como letras, símbolos y números. Echemos un vistazo más de cerca a una de nuestras columnas que utiliza este tipo de dato:

  1. En App Workbench > Tablas, localiza y selecciona la tabla Employee.

  2. En la pestaña Columnas, encuentra la columna FirstName y haz clic en el icono editar al final de la fila. Verás la pantalla de edición de la columna:

    Pantalla de edición de columna FirstName

  3. En la sección Tipos de datos, aparecen las siguientes opciones:

    1. El campo Lógico es donde se asignó a esta columna el tipo de dato lógico String.

    2. El campo Físico tiene las siguientes opciones:

      1. Char: Datos de caracteres de longitud fija.

      2. Encrypted Text: Datos de texto cifrado.

      3. NChar: Datos de caracteres UNICODE de longitud fija.

      4. NVarchar (actualmente seleccionado): Datos de caracteres UNICODE de longitud indeterminada. Típicamente, todas las cadenas de App Builder se almacenan como este tipo físico para que puedan soportar Unicode y ocupen menos espacio.

      5. Varchar: Datos de caracteres de longitud indeterminada.

    3. Longitud: Número de bytes utilizados para almacenar el número. Para tipos de datos binarios, varbinary e image, la longitud es el número de bytes.

  4. En la sección Configuración de PK, hay opciones para ayudar en la creación manual de claves primarias:

    1. Clave primaria: Esta casilla de verificación indica que la columna debe actuar como la clave primaria de la tabla.

    2. Requerido: Esta casilla de verificación indica si esta columna puede dejarse vacía (es decir, tener un valor nulo) cuando se crea un nuevo registro.

  5. En la sección Avanzado, aparecen las siguientes opciones:

    1. Tipo de uso de columna: Esto indica a App Builder para qué se utilizará una columna determinada (consulta Uso para obtener más información). Esto puede acelerar el proceso de desarrollo más adelante.

    2. Valor predeterminado: En este campo, puedes ingresar un valor predeterminado que se utilizará para la columna si no se proporciona uno (consulta Valores predeterminados para obtener más información).

    3. Traducible: Si se habilita, esta casilla de verificación activa las traducciones para una columna determinada, lo que significa que los datos en la columna que se agregan o editan a través de la capa de negocio se traducen automáticamente a otro idioma en tiempo de ejecución. Traducir el paquete de la aplicación también traduce todos los datos en la columna.

Date, Date/Time, Time

Estos son los formatos que utiliza App Builder para almacenar una fecha, hora o ambas específicas. La información de la fecha se formatea como MM/DD/YYYY. Cuando intentas editar un campo con este tipo de dato lógico, ves un calendario emergente que te permite elegir un nuevo valor de fecha.

Echaremos un vistazo más de cerca a cómo funciona este tipo de dato analizando la columna BirthDate en nuestra tabla Employee.

  1. En App Workbench > Tablas, localiza y selecciona la tabla Employee.

  2. En la pestaña Columns, busca la columna BirthDate y haz clic en el icono de edición al final de la fila. Verás la pantalla de edición de la columna:

    Pantalla de edición de la columna BirthDate

  3. En la sección Data Types, aparecen los siguientes campos:

    1. Logical: Aquí es donde seleccionas Date, Date/Time o Time.

    2. Physical: Las opciones de tipo de dato físico cambian según tu selección de tipo de dato lógico:

      1. Cuando el tipo de dato lógico es Date:

        1. Date: Solo almacena la fecha.

        2. Decimal: Almacena un valor decimal, entre 1038 + 1 y 1038 - 1.

        3. Integer - Int: Almacena un entero, entre -2,147,483,648 y 2,147,483,647.

      2. Cuando el tipo de dato lógico es Date/Time:

        1. DateTime: Almacena la fecha y la hora del día.
      3. Cuando el tipo de dato lógico es Time:

        1. Time: Solo almacena la hora del día.
  4. En la sección PK Settings, hay opciones para ayudar en la creación manual de claves primarias:

    1. Primary Key: Esta casilla indica que la columna debe actuar como la clave primaria de la tabla.

    2. Required: Esta casilla indica si esta columna puede dejarse vacía (es decir, tener un valor nulo) cuando se crea un nuevo registro.

  5. En la sección Advanced, aparecen las siguientes opciones:

    1. Column Usage Type: Indica a App Builder para qué se utilizará una columna determinada (consulta Usage para más información). Esto puede acelerar el proceso de desarrollo más adelante.

    2. Default Value: En este campo, puedes ingresar un valor predeterminado que se utilizará para la columna si no se proporciona uno (consulta Default values para más información).

Photo

Otro tipo de dato lógico que se puede usar en la capa de datos de App Builder es Photo. Exploraremos sus opciones observando la columna Photo de nuestra tabla Employee.

  1. En App Workbench > Tables, localiza y selecciona la tabla Employee.

  2. En la pestaña Columns, busca la columna Photo y haz clic en el icono de edición al final de la fila. Verás la pantalla de edición de la columna:

    Pantalla de edición de la columna Photo

  3. En la sección Data Types, están disponibles los siguientes campos:

    1. Logical: Aquí es donde se selecciona Photo como el tipo de dato lógico.

    2. Physical: Las columnas con este tipo de dato lógico tienen solo una opción de tipo de dato físico: Binary. Se representa numéricamente mediante una combinación de ceros y unos.

  4. En la sección PK Settings, hay opciones para ayudar en la creación manual de claves primarias:

    1. Primary Key: Esta casilla indica que la columna debe actuar como la clave primaria de la tabla.

    2. Required: Esta casilla indica si esta columna puede dejarse vacía (es decir, tener un valor nulo) cuando se crea un nuevo registro.

  5. En la sección Advanced, aparecen las siguientes opciones:

    1. Column Usage Type: Indica a App Builder para qué se utilizará una columna determinada (consulta Usage para más información). Esto puede acelerar el proceso de desarrollo más adelante.

    2. Default Value: En este campo, puedes ingresar un valor predeterminado que se utilizará para la columna si no se proporciona uno (consulta Default values para más información).

File

El tipo de dato lógico File se utiliza para almacenar un archivo. Los desarrolladores pueden usarlo para permitir que los usuarios finales carguen nuevos archivos en la base de datos. En nuestra tabla Employee, actualmente no tenemos ninguna columna con el tipo de dato File, pero podemos usar la columna Photo que observamos anteriormente para aprender sobre él.

  1. En App Workbench > Tables, localiza y selecciona la tabla Employee.

  2. En la pestaña Columns, busca la columna Photo y haz clic en el icono de edición al final de la fila.

  3. En la sección Tipos de datos:

    1. Cambia la selección en el campo Lógico de Foto a Archivo:

      Pantalla de edición de columna Foto 2

      Nota

      Hacer esto no afecta la apariencia de la página Empleado de tu aplicación, porque en su página Controles, el tipo de control sigue siendo Foto, por lo que App Builder lo renderiza correctamente.

    2. El campo Físico para columnas con este tipo de dato lógico tiene tres opciones:

      1. Binario: Datos binarios.

      2. Binario cifrado: Igual que la opción anterior, pero con cifrado.

      3. NVarchar: Datos de caracteres UNICODE de longitud indeterminada.

  4. En la sección Configuración de PK, hay opciones para ayudar en la creación manual de claves primarias:

    1. Clave primaria: Esta casilla de verificación indica que la columna debe actuar como la clave primaria de la tabla.

    2. Requerido: Esta casilla de verificación indica si esta columna puede dejarse vacía (es decir, tener un valor nulo) cuando se crea un nuevo registro.

  5. En la sección Avanzado, aparecen las siguientes opciones:

    1. Tipo de uso de columna: Esto indica a App Builder para qué se utilizará una columna determinada (consulta Uso para obtener más información). Esto puede acelerar el proceso de desarrollo más adelante porque hace que algunos campos y opciones se configuren automáticamente.

    2. Valor predeterminado: En este campo, puedes ingresar un valor predeterminado para usarlo en la columna si no se proporciona uno (consulta Valores predeterminados para obtener más información).

Número, Porcentaje

El tipo de dato lógico Número almacena datos numéricos. Si deseas almacenar, presentar o calcular valores de porcentaje, también hay disponible un tipo de dato lógico Porcentaje. Analicemos estos dos observando la columna UnitsInStock de nuestra tabla Product:

  1. En App Workbench > Tablas, localiza y selecciona la tabla Product.

  2. En la pestaña Columnas, encuentra la columna UnitsInStock y haz clic en el icono de edición al final de la fila. Verás su pantalla de edición:

    Pantalla de edición de columna UnitsInStock

  3. En la sección Tipos de datos, están disponibles los siguientes campos:

    1. Lógico: Aquí es donde se selecciona Número o Porcentaje como el tipo de dato lógico.

    2. Físico: Las columnas con este tipo de dato lógico tienen las siguientes opciones de tipo de dato físico:

      1. Decimal: Selecciona esto para almacenar un número con un valor decimal grande, entre 1038 + 1 y 1038 - 1. Esta es la única opción disponible cuando el tipo de dato lógico es Porcentaje.

      2. Float: Selecciona esto para almacenar valores decimales más pequeños, entre -1.79E + 308 y -2.23E -308.

      3. Entero - BigInt: Selecciona esto para almacenar números enteros muy grandes, entre -9,223,372,036,854,775,808 y 9,223,372,036,854,775,807.

      4. Entero - Int (actualmente seleccionado): La selección estándar para números enteros, entre -2,147,483,648 y 2,147,483,647.

      5. Entero - SmallInt: Selecciona esto para almacenar números enteros pequeños, entre -32,768 y 32,767.

      6. Entero - TinyInt: Selecciona esto para almacenar enteros entre 0 y 255.

      7. Real: Selecciona esto para almacenar números reales, entre -3.40E + 38 y -1.18E - 38.

  4. En la sección Configuración de PK, hay opciones para ayudar en la creación manual de claves primarias:

    1. Clave primaria: Esta casilla de verificación indica que la columna debe actuar como la clave primaria de la tabla.

    2. Generado automáticamente: Cuando esta casilla de verificación está marcada y el tipo de dato físico es un tipo entero, App Builder activa la funcionalidad de auto-incremento nativa del motor de base de datos (por ejemplo, el atributo IDENTITY en SQL Server y PostgreSQL, o AUTO_INCREMENT en MySQL). Si el motor de base de datos no admite columnas de auto-incremento, App Builder genera los valores por sí mismo.

  5. Requerido: Esta casilla de verificación indica si esta columna puede dejarse vacía (es decir, tener un valor nulo) al crear un nuevo registro.

  6. En la sección Avanzado, aparecen las siguientes opciones:

    1. Tipo de uso de columna: Esto indica a App Builder para qué se utilizará una columna determinada (consulta Uso para obtener más información). Esto puede acelerar el proceso de desarrollo más adelante.

    2. Valor predeterminado: En este campo, puedes ingresar un valor predeterminado que se utilizará para la columna si no se proporciona uno (consulta Valores predeterminados para obtener más información).

Moneda

El tipo de dato lógico Moneda se utiliza para almacenar valores monetarios con el formato adecuado. En la capa de interfaz de usuario, los controles que utilizan columnas de moneda se identifican como moneda. Para analizar mejor este tipo de dato lógico, usemos la columna UnitPrice de nuestra tabla Product.

  1. En App Workbench > Tablas, localiza y selecciona la tabla Product.

  2. En la pestaña Columnas, encuentra la columna UnitPrice y haz clic en el icono de edición al final de la fila. Verás su pantalla de edición:

    Pantalla de edición de la columna UnitPrice

  3. En la sección Tipos de datos, están disponibles los siguientes campos:

    1. Lógico: Aquí es donde seleccionas Moneda como el tipo de dato lógico.

    2. Físico: Las columnas con este tipo de dato lógico tienen solo una opción de tipo de dato físico: Decimal, utilizado para almacenar un número con un valor decimal grande, entre 1038 + 1 y 1038 - 1.

    3. Precisión: En este campo, ingresa la cantidad de dígitos que deben tener los números. Por ejemplo, el número 123.45 tiene precisión 5. Para monedas, este es el valor predeterminado.

    4. Escala: En este campo, ingresa la cantidad de dígitos que se muestran a la derecha del punto decimal en un número. Por ejemplo, el número 123.45 tiene escala 2. Para monedas, este es el valor predeterminado.

  4. En la sección Configuración de PK, hay opciones para ayudar en la creación manual de claves primarias:

    1. Clave primaria: Esta casilla de verificación indica que la columna debe actuar como la clave primaria de la tabla.

    2. Requerido: Esta casilla de verificación indica si esta columna puede dejarse vacía (es decir, tener un valor nulo) al crear un nuevo registro.

  5. En la sección Avanzado, aparecen las siguientes opciones:

    1. Tipo de uso de columna: Esto indica a App Builder para qué se utilizará una columna determinada (consulta Uso para obtener más información). Esto puede acelerar el proceso de desarrollo más adelante.

    2. Valor predeterminado: En este campo, puedes ingresar un valor predeterminado que se utilizará para la columna si no se proporciona uno (consulta Valores predeterminados para obtener más información).

Nota

El símbolo de moneda que se muestra en la interfaz de usuario varía según la moneda establecida como predeterminada. Para cambiar la predeterminada, sigue estos pasos:

  1. En App Workbench > Fuentes de datos, localiza y selecciona la fuente Northwinds (Default).

  2. Haz clic en Editar. Se abre el diálogo Capa de almacenamiento de datos.

  3. Haz clic en la pestaña Utilidades y luego en Configuración avanzada. Se abrirá el diálogo Configuración de fuente de datos.

  4. En el campo Moneda, cambia la moneda predeterminada.

Booleano

El tipo de dato lógico Booleano solo puede almacenar dos valores posibles, verdadero o falso, y se utiliza para proporcionar lógica. Para analizar cómo funciona, usemos el campo IsDiscontinued en nuestra tabla Product:

  1. En App Workbench > Tablas, localiza y selecciona la tabla Product.

  2. En la pestaña Columnas, encuentra la columna IsDiscontinued y haz clic en el icono de edición al final de la fila. Verás su pantalla de edición:

    Pantalla de edición de la columna IsDiscontinued

  3. En la sección Tipos de datos, están disponibles los siguientes campos:

    1. Lógico: Aquí es donde seleccionas Booleano como el tipo de dato lógico.
  4. Física: Las columnas con este tipo de dato lógico tienen las siguientes opciones de tipo de dato físico:

    1.  **Bit:** Almacena datos como `0` (que significa `False`) o `1` (que significa `True`). Normalmente se usa esta opción cuando deseas representar una casilla de verificación en la capa de interfaz de usuario, donde desmarcado significa `False` y marcado significa `True`.
    
    2.  **Char:** Datos de caracteres de longitud fija. Si seleccionas **Char**, la capa de interfaz de usuario mostrará una lista que presenta `True` y `False` como opciones, en lugar de una casilla de verificación.
    
    3.  **Decimal:** Selecciona esto para almacenar un número con un valor decimal grande, entre <code>10<sup>38</sup> + 1</code> y <code>10<sup>38</sup> - 1</code>.
    
  5. En la sección Configuración de PK, hay opciones para ayudar en la creación manual de claves primarias:

    1. Clave primaria: Esta casilla de verificación indica que la columna debe actuar como la clave primaria de la tabla.

    2. Requerido: Esta casilla de verificación indica si esta columna puede dejarse vacía (es decir, tener un valor nulo) cuando se crea un nuevo registro.

  6. En la sección Avanzado, aparecen las siguientes opciones:

    1. Tipo de uso de columna: Esto indica a App Builder para qué se utilizará una columna determinada (consulta Uso para obtener más información). Esto puede acelerar el proceso de desarrollo más adelante.

    2. Valor predeterminado: En este campo, puedes ingresar un valor predeterminado que se utilizará para la columna si no se proporciona uno (consulta Valores predeterminados para obtener más información).

Correo electrónico, URL

El tipo de dato lógico Correo electrónico se utiliza para capturar, almacenar y mostrar direcciones de correo electrónico. De manera similar, el tipo URL tiene el mismo propósito, pero para direcciones web. Aunque técnicamente es posible usar otros tipos de datos lógicos para almacenar esta información, usar estos tipos garantiza la consistencia de datos al almacenar todas las entradas de correo electrónico o URL con la longitud recomendada y asignarles el mismo tipo de control predeterminado.

Estos tipos son excelentes ejemplos de plantillas de columna, que son definiciones de columna preconfiguradas que se incluyen con App Builder para acelerar el desarrollo. Puedes obtener más información sobre ellas e incluso crear las tuyas propias en Plantillas de columna.

  1. En App Workbench > Tablas, localiza y selecciona la tabla Cliente.

  2. En la pestaña Columnas, haz clic en + Columna. Aparecerá la pantalla de creación de columna.

  3. En el campo Nombre, ingresa ContactEmail o CustomerWebsite, según el tipo de datos que desees guardar.

  4. En la sección Tipos de datos, están disponibles las siguientes opciones:

    1. Lógico: Selecciona Correo electrónico o URL como el tipo de dato lógico. Al hacer esto, se alteran algunos de los valores predeterminados que se muestran debajo:

      Pantalla de creación de columna ContactEmail

    2. Física: Las columnas con este tipo de dato lógico tienen las siguientes opciones de tipo de dato físico:

      1. Char: Datos de caracteres de longitud fija.

      2. Texto cifrado: Datos de texto cifrado.

      3. NChar: Datos de caracteres UNICODE de longitud fija.

      4. NVarchar: Datos de caracteres UNICODE de longitud indeterminada. Esta es la selección predeterminada para el tipo de dato URL.

      5. Varchar: Datos de caracteres de longitud indeterminada. Esta es la selección predeterminada para el tipo de dato Correo electrónico.

    3. Longitud: La longitud de la dirección web o de correo electrónico. Para el tipo de dato URL, el valor predeterminado es 2000 y para Correo electrónico, es 320.

  5. En la sección Configuración de PK, hay opciones para ayudar en la creación manual de claves primarias:

    1. Clave primaria: Esta casilla de verificación indica que la columna debe actuar como la clave primaria de la tabla.

    2. Requerido: Esta casilla de verificación indica si esta columna puede dejarse vacía (es decir, tener un valor nulo) cuando se crea un nuevo registro.

  6. En la sección Avanzado, aparecen las siguientes opciones:

    1. Tipo de uso de columna: Esto indica a App Builder para qué se utilizará una columna determinada (consulta Uso para obtener más información). Esto puede acelerar el proceso de desarrollo más adelante.
  7. Valor predeterminado: En este campo, se puede ingresar un valor predeterminado que se utilizará para la columna si no se proporciona uno (consulta Valores predeterminados para más información).

    1. Traducible: Si se habilita, esta casilla de verificación activa las traducciones para una columna determinada, lo que significa que los datos en la columna que se agregan o editan a través de la capa empresarial se traducen automáticamente en tiempo de ejecución. Traducir el paquete de aplicación también traduce todos los datos en la columna.

Valores predeterminados

Las columnas en App Builder se pueden crear con valores predeterminados. Esto puede ser útil, por ejemplo, cuando muchos registros deben tener el mismo valor para una columna determinada con pocas o ninguna excepción. En este último caso, usar un valor predeterminado y deshabilitar operaciones de actualización garantizaría completamente la integridad de los datos.

Para demostrar cómo asignar un valor predeterminado a una columna, usaremos la columna País de la tabla Empleado. Vamos a asumir que la mayoría del personal de nuestra empresa proviene de Estados Unidos. Por lo tanto, ese debe ser el valor predeterminado de la columna.

  1. En App Workbench > Tablas, localiza y selecciona la tabla Empleado.

  2. En la pestaña Columnas, encuentra la columna País y haz clic en el icono de edición al final de la fila. Aparecerá la pantalla de edición de la columna.

  3. En la sección Avanzado, ingresa Estados Unidos o USA en el campo Valor predeterminado.

    Valor predeterminado de la columna País

  4. Haz clic en Guardar.

Prueba tu trabajo haciendo clic en el botón Resultados en el panel Tabla. Cuando aparezca la lista de registros, haz clic en Crear y verifica si el valor predeterminado se muestra en la columna correcta. Si es así, tu cambio ha funcionado y ahora, cada vez que se agregue un nuevo registro a la tabla Empleado, la columna País tendrá automáticamente el valor que ingresaste (Estados Unidos o USA). Pero si una entrada individual lo requiere, por supuesto puedes editar ese valor manualmente. Esto te ayudaría a ahorrar mucho tiempo en un escenario donde hay pocos o ningún empleado viviendo en otros países.

Hora de practicar: Establece un valor predeterminado en la tabla Producto

Siguiendo los pasos que usamos anteriormente para la tabla Empleado, agrega un valor predeterminado a una de las columnas de la tabla Producto. Supongamos que cuando se agrega un nuevo producto al catálogo de nuestra empresa, inicialmente no hay unidades en stock. Por lo tanto, asigna a la columna UnitsInStock un valor predeterminado de 0. Prueba tus resultados después de establecer el valor predeterminado.

Uso

Todas las columnas en App Builder tienen un campo Tipo de uso de columna (abreviado como Uso en la pestaña Columnas). Este campo permite especificar el propósito previsto de una columna. Aunque es opcional, recomendamos usarlo si una de las opciones predefinidas se ajusta a tus necesidades. Al hacerlo, App Builder habilitará automáticamente características, validaciones o componentes de interfaz de usuario relevantes para esa columna, acelerando tu proceso de desarrollo.

El campo Tipo de uso de columna se encuentra en la sección Avanzado de la pantalla de edición de una columna. La lista completa de opciones está disponible en Tipos de uso de columna, pero los más utilizados son los siguientes:

  • Título: Se utiliza para indicar que una columna contiene un título de lista. Por lo tanto, cuando estés creando objetos de lista para hacer menús desplegables en la interfaz de usuario, App Builder sabrá que debe usar esa columna.

  • Subtítulo: Se utiliza para proporcionar contexto para campos de título. Cuando asignas este tipo de uso a una columna, App Builder mostrará su contenido debajo del título.

  • ENUM: Una abreviatura de "enumeración", este tipo de uso asocia un valor de cadena significativo con un identificador único (como una clave principal). Esto te permite usar la cadena enumerada (por ejemplo, 'Lunes', 'Martes') para identificar de forma única un registro de una manera legible para humanos, en lugar de depender de un UUID (por ejemplo, a1b2c3d4) que no tiene significado para un usuario.

  • Agregado por/Agregado en: Las columnas con esta designación se rellenan con quién creó un registro o cuándo sucedió. La función Auditoría lite crea columnas con estos tipos de uso automáticamente.

  • Changed By/Changed On: Las columnas con esta designación se rellenan con un registro de quién modificó un registro o cuándo sucedió. La función Audit lite crea columnas con estos tipos de uso automáticamente.

  • IsActive: Las columnas con esta designación indican si una entrada está actualmente activa o no. La función Audit lite crea columnas con estos tipos de uso automáticamente.

Nota

Esta lección no cubre todos los tipos de uso. Otros tipos comunes incluyen los siguientes:

  • Group: Establece una opción de agrupación predeterminada para controles basados en listas.

  • Block: Bloquea operaciones de edición, operaciones de eliminación, o ambas, según el valor asignado a la columna.

  • Audit: Lo utiliza App Builder como identificador de registro en la tabla de auditoría para registros que no utilizan una clave principal UUID.

  • Flag: Se utiliza en columnas de gráficos para mostrar un valor cerca de un punto de datos.

Para obtener la lista completa de tipos de uso y sus descripciones, consulta Tipos de uso de columnas.

Hora de practicar: Establecer tipos de uso de columnas

Para practicar, vamos a establecer los tipos de uso Subtitle y ENUM.

  • Nuestra tabla Category tiene una columna Description. Edita esa columna y asígnale el tipo de uso Subtitle. Cuando lo hagas, en cualquier componente de UI que utilice la columna Category como título, App Builder sugerirá automáticamente usar Description como subtítulo.

  • Aún en nuestra tabla Category, agrega una nueva columna llamada CategoryStatus con String como su tipo de dato lógico y asígnale el tipo de uso ENUM. Cuando lo hagas, estás marcando esta columna como el identificador legible por humanos para la categoría. Mientras que CategoryID (un UUID) es la clave principal, CategoryStatus podría usarse como el valor enumerado único (por ejemplo, "Active", "Archived", "Draft") que la lógica empresarial podría referenciar.

  • Nuestra tabla Region actualmente solo tiene las columnas RegionID y Region. Agrega dos nuevas columnas: Description, utilizando el tipo de dato lógico String, y RegionCode, también utilizando el tipo de dato lógico String. Asigna el tipo de uso Subtitle a Description y el tipo de uso ENUM a RegionCode. Luego, haz clic en el botón Results en el panel Table e ingresa valores para ambas columnas nuevas en los registros West Coast Region y East Coast Region que creaste en la Lección 2.

Claves e índices

En la capa de datos, es importante entender cómo la base de datos identifica y organiza los registros. Esto se gestiona a través de claves e índices, que son cruciales para garantizar la integridad de los datos y optimizar el rendimiento.

Claves

Las claves son columnas (o conjuntos de columnas) utilizadas para identificar de forma única los registros en una tabla. Existen los siguientes tipos:

  • Primary Key (PK): Este es el identificador principal de una tabla. Cada registro debe tener un valor para la clave principal, y ese valor debe ser único dentro de la tabla. En nuestras tablas, OrderID, ProductID e EmployeeID son todas claves principales, a menudo configuradas como IDs únicos generados automáticamente.

  • Foreign Key (FK): Esta es una columna en una tabla que hace referencia a una columna en otra tabla. Es el mecanismo detrás de los enlaces. Por ejemplo, la columna OrderID en la tabla OrderDetail es una clave externa que apunta a OrderID (la clave principal) en la tabla Order.

  • Unique Key (UK): Esta es una restricción que garantiza que todos los valores en una columna específica (o conjunto de columnas) sean únicos, similar a una clave principal. Una clave única también puede, en algunos sistemas de bases de datos, permitir un único valor nulo, mientras que una clave principal no puede.

Índices

Un índice es una estructura de datos utilizada por la base de datos para encontrar registros más rápidamente. En lugar de escanear una tabla completa en busca de un valor, la base de datos puede usar un índice para ir directamente a los registros relevantes.

Debes agregar un índice a las columnas que se utilizan frecuentemente en operaciones de búsqueda, condiciones de unión o cláusulas WHERE. En nuestra base de datos, la columna OrderNumber en la tabla Order es una buena candidata para un índice porque podríamos buscar frecuentemente órdenes por este número.

Las claves primarias siempre se indexan automáticamente, por eso son tan rápidas para búsquedas. Agregar índices a otras columnas, como claves foráneas o campos que se buscan frecuentemente (como OrderNumber), puede mejorar significativamente el rendimiento de la aplicación. Es posible que veas un símbolo + junto a ciertas columnas en App Builder, lo que sugiere que agregar un índice podría ser beneficioso.

Mejores prácticas

Las mejores prácticas de App Builder para la capa de datos incluyen las siguientes recomendaciones para claves e índices:

  • Claves primarias de una sola parte: Utiliza claves primarias UUID de una sola parte. Esto simplifica el modelo de datos y admite automáticamente todas las capacidades de auditoría de App Builder.

  • Indexar columnas: Indexa todas las claves foráneas. Además, indexa cualquier campo que se use comúnmente para ordenar, filtrar o unir datos para optimizar el rendimiento.

Ejercicio: Agregar una clave única y un índice a la tabla Order

Pongamos en práctica las claves e índices en la tabla Order. Primero, agregaremos una clave única en la columna OrderNumber para evitar números de pedido duplicados. Luego, agregaremos un índice separado en la misma columna para mejorar el rendimiento de las búsquedas. Seleccionar la opción Unique al crear un índice lograría ambos objetivos a la vez, pero lo haremos en dos pasos para demostrar cada opción individualmente. Para obtener más información sobre las opciones de claves e índices disponibles, consulta la pestaña Keys & Indexes.

  1. En App Workbench > Tables, localiza y selecciona la tabla Order.

  2. Haz clic en la pestaña Keys & Indexes.

  3. Haz clic en + Key. Se abre el diálogo Constraint:

    Constraint

  4. En el campo Type, selecciona Unique Key.

  5. En el campo Columns, selecciona OrderNumber.

  6. Haz clic en Save. Ahora, App Builder evita que dos registros de Order tengan el mismo valor de OrderNumber.

  7. Haz clic en + Key nuevamente para agregar el índice. En el campo Type, selecciona Index.

  8. En el campo Columns, selecciona OrderNumber.

  9. Haz clic en Save.

Hora de practicar: Agregar una clave única a la tabla OrderDetail

Siguiendo los pasos anteriores, agrega una clave única a la tabla OrderDetail utilizando juntas las columnas OrderID y ProductID. Esto evita que un pedido incluya el mismo producto más de una vez.

Insertar, actualizar y eliminar

En la capa de datos de App Builder, cada tabla y columna puede admitir la inserción, actualización y/o eliminación de datos. Al modificar estas opciones en la capa de datos, los desarrolladores pueden controlar cómo se interactúa con los datos en todas las otras capas, incluida la aplicación final. Esto significa que los cambios realizados aquí anulan modificaciones similares realizadas en otras capas. Por ejemplo, aunque el control en una página determinada muestre un botón de eliminar y un usuario tenga permisos de eliminación, seguirá siendo imposible eliminar un registro si la operación de eliminación se deshabilitó aquí, e intentar hacerlo causará un error.

Para demostrar cómo se pueden controlar estas opciones, tomemos como ejemplo nuestra tabla Employee actual.

  1. En App Workbench > Tables, localiza y selecciona la tabla Employee.

  2. En el panel Table, haz clic en More > Edge Case. Aparece el diálogo Edge Case Settings, y la sección CRUD Support muestra tres casillas de verificación, todas marcadas actualmente:

    Edge case settings CRUD support

    • Insertable: Si está habilitado, permite que se inserten registros de tabla mediante reglas CRUD.

    • Updatable: Si está habilitado, permite que se actualicen registros de tabla mediante reglas CRUD.

    • Deletable: Si está habilitado, permite que se eliminen registros de tabla mediante reglas CRUD.

    Desmarcar una de las casillas de verificación deshabilitaría las operaciones para esa tabla en todas las capas. En la tabla Employee, sin embargo, queremos que todas estas operaciones sean posibles, ya que se pueden contratar nuevos empleados, los detalles de los empleados existentes pueden cambiar, o pueden dejar el equipo.

Hora de practicar: Deshabilitar operaciones CRUD

Otra de nuestras tablas, Product, contiene registros sobre todos nuestros productos. Esa tabla tiene una columna llamada IsDiscontinued. Entonces, si alguna vez dejamos de vender un producto determinado, simplemente necesitamos cambiar el estado de ese campo de False a True. Por lo tanto, no hay necesidad de permitir operaciones de eliminación en esa tabla. Siguiendo los pasos descritos anteriormente, deshabilita la operación de eliminación para esa tabla.

Relaciones

Las relaciones en App Builder son una herramienta poderosa para garantizar la integridad de los datos. Definen conexiones entre tablas para evitar que los usuarios ingresen datos inválidos o creen registros huérfanos (registros en una tabla que ya no tienen un registro relacionado en otra).

Al crear una relación, una tabla se designa como la principal (el lado "uno" de una relación uno a muchos) y la otra como secundaria (el lado "muchos"). La relación vincula columnas que contienen datos coincidentes. Típicamente, esto implica vincular la clave principal de la tabla principal (una columna que identifica de forma única cada registro) a una columna correspondiente en la tabla secundaria, que luego se denomina clave externa. Aunque las relaciones se basan más frecuentemente en la clave principal de una tabla, también es posible definirlas en otras columnas únicas. Una relación también se puede definir usando múltiples columnas de cada tabla.

Examinemos la relación principal-secundaria existente entre las tablas Order y OrderDetail en nuestra base de datos Northwinds.

  1. En App Workbench > Tables, localiza y selecciona la tabla Order.

  2. Haz clic en la pestaña Relationships y observa la información mostrada:

    • Many to One: Este panel enumera las relaciones donde la tabla actual (Order) es la secundaria. En este caso, muchos pedidos pueden estar asociados con un cliente, un empleado y un transportista. Las claves externas para estas relaciones (CustomerID, EmployeeID y ShipperID) existen en la tabla Order.

    • One to Many: Este panel enumera las relaciones donde la tabla actual (Order) es la principal. La tabla OrderDetail se enumera aquí porque muchos detalles de pedido pueden pertenecer a un pedido.

      Haz clic en el icono editar para la relación OrderDetail. Se abre la ventana emergente Relationship:

      Relationships

      • Primary Table: Identifica la tabla principal en la relación (el lado "uno").

      • Primary Columns: Muestra la(s) columna(s) de la tabla principal que identifican de forma única los registros para esta relación.

      • On Delete: Este menú desplegable define qué debe suceder con los registros secundarios en la Secondary Table cuando se elimina un registro principal correspondiente en la Primary Table. Las opciones son:

        • Cascade: Elimina automáticamente todos los registros secundarios correspondientes cuando se elimina el registro principal.

        • Default: Establece el valor de la(s) columna(s) de clave externa en los registros secundarios a su valor predeterminado definido cuando se elimina el registro principal.

        • Null: Establece el valor de la(s) columna(s) de clave externa en los registros secundarios a NULL cuando se elimina el registro principal. Esto solo es posible si la columna de clave externa no está configurada como "Required".

        • Prevent: (Predeterminado) Evita que se elimine el registro principal si existen registros secundarios. Esta es la opción más segura para mantener la integridad de los datos.

      • On Update: Define qué debe suceder con el valor de clave externa en los registros secundarios cuando se actualiza el valor de clave correspondiente en el registro principal. Las opciones (Cascade, Default, Null y Prevent) funcionan de manera similar a las acciones On Delete.

      • Secondary Table: Identifica la tabla secundaria en la relación (el lado "muchos").

      • Secondary Columns: Muestra la(s) columna(s) de clave externa en la tabla secundaria que corresponden a la(s) columna(s) principal(es).

      • Validate: Esta casilla de verificación, habilitada de forma predeterminada, garantiza que App Builder verifique estas reglas de relación (restricciones de clave externa) cada vez que ocurra una operación de guardado o eliminación. Se recomienda encarecidamente mantener esta opción habilitada.

Ejercicio: Habilitar eliminaciones en cascada en la relación entre Order y OrderDetail

Actualmente, la opción Prevent en la relación entre Order y OrderDetail impide que se elimine una orden mientras tenga detalles de orden. Vamos a cambiar esta relación para que al eliminar una orden se eliminen automáticamente todos sus detalles de orden también.

  1. En App Workbench > Tables, localiza y selecciona la tabla Order.

  2. Haz clic en la pestaña Relationships.

  3. En el panel One to Many, haz clic en el icono de edición para la relación OrderDetail. Se abre la ventana emergente Relationship.

  4. Haz clic en Edit.

  5. En el campo On Delete, cambia la selección de Prevent a Cascade.

    Cascade deletes

  6. Haz clic en Save.

Ahora, al eliminar un registro de Order también se eliminan todos sus registros de OrderDetail asociados.

Precaución

Utiliza las eliminaciones en cascada con cuidado. Eliminar un registro padre elimina de forma irreversible todos sus registros hijo relacionados también.

Aprendizaje adicional

Esto concluye este análisis profundo de los detalles de la capa de datos de App Builder. Para un examen más detallado de las otras capas, consulta el Apéndice B para la capa de negocio, el Apéndice C para la capa de interfaz de usuario, o el Apéndice D para la capa de seguridad.