T1.5: Develops Object/Relational Applications

Knowledge Review - InterSystems IRIS SQL Specialist

1. Recuerda el comportamiento de mapeo objeto/relacional por defecto

Puntos Clave

  • Paquete a Esquema: El nombre del paquete mapea al esquema SQL (predeterminado: paquete User = esquema SQLUser)
  • Clase a Tabla: El nombre de la clase persistente se convierte en nombre de tabla SQL (modelo de herencia aplanado)
  • Propiedad a Campo: Las propiedades de clase se proyectan como columnas de tabla, incluyendo propiedades heredadas
  • Objetos Embebidos: Las propiedades SerialObject se proyectan como múltiples columnas con notación de guion bajo (ej., Home_Street, Home_City)
  • Colecciones: Las propiedades list se convierten en campos list; las propiedades array se convierten en tablas hijas

Notas Detalladas

Resumen

InterSystems IRIS proporciona mapeo objeto-relacional automático para todas las clases persistentes que extienden %Library.Persistent (o %Persistent).

  • Proyección bidireccional: Cada instancia de clase está disponible simultáneamente como objeto y como fila en una tabla SQL
  • Creación automática: La tabla proyectada se crea cuando la clase persistente se compila

Reglas de Mapeo por Defecto

El mapeo sigue reglas predeterminadas predecibles:

  • Paquete a Esquema: El nombre del paquete mapea al esquema SQL (predeterminado: paquete User = esquema SQLUser)
  • Clase a Tabla: El nombre de la clase persistente se convierte en nombre de tabla SQL
  • Propiedad a Columna: Las propiedades de clase se proyectan como columnas de tabla, incluyendo propiedades heredadas

Manejo de Herencia

Debido a que SQL carece de soporte de herencia:

  • Representación aplanada: Cada tabla contiene todas las propiedades de la clase y sus superclases
  • Modelo extent: Todas las instancias de una clase y sus subclases componen el class extent
  • Beneficio de consultas: Las consultas contra Person recuperan todos los tipos de persona (incluyendo Student) sin joins complejos

Proyecciones de Propiedades Especiales

  • Objetos embebidos (SerialObjects): Expandidos en múltiples columnas usando notación de guion bajo
  • Ejemplo: Propiedad Home de tipo Address con Street y City se convierte en columnas Home_Street y Home_City
  • Propiedades stream: Se proyectan como campos BLOB o CLOB
  • Propiedades list: Se convierten en campos list
  • Propiedades array: Crean tablas hijas separadas
  • Métodos de clase con SqlProc: Se proyectan a procedimientos almacenados SQL

Acceso a Datos

Ambos métodos de acceso operan sobre los mismos datos subyacentes almacenados en globals:

  • Acceso a objetos: Vía métodos %OpenId, %Save
  • Acceso SQL: Vía sentencias SELECT, INSERT, UPDATE

2. Aplica mejores prácticas SQL al definir clases persistentes

Puntos Clave

  • USEEXTENTSET=1: Siempre establecer este parámetro para organización eficiente de almacenamiento global
  • Bitmap Extent Index: Incluir `Index BitmapExtent [ Extent, Type = bitmap ]` para conteos optimizados y operaciones extent
  • Clases de Tipo de Dato: Usar tipos de dato del paquete %Library (%String, %Integer, %Date) para proyección SQL
  • Parámetros de Propiedad: Aplicar MAXLEN, MINLEN, MAXVAL, MINVAL, VALUELIST, y PATTERN para validación de datos
  • Palabra Clave SqlTableName: Sobrescribir el nombre de tabla predeterminado cuando el nombrado SQL difiera del nombre de clase

Notas Detalladas

Mejores Prácticas Críticas

Al definir clases persistentes que se proyectan a tablas SQL, sigue estas mejores prácticas críticas:

Parámetro USEEXTENTSET

Siempre especificar `Parameter USEEXTENTSET = 1;` en la definición de clase.

  • Propósito: Organiza el almacenamiento de tabla en un conjunto eficiente de globals en lugar de un solo global
  • Beneficio: Mejora significativamente el rendimiento para tablas grandes

Bitmap Extent Index

Crear un bitmap extent index usando `Index BitmapExtent [ Extent, Type = bitmap ];`

  • Propósito: Crea un índice de todos los IDs en el extent set
  • Beneficio: Hace consultas COUNT y otras operaciones extent mucho más rápidas

Clases de Tipo de Dato y Validación

Usar clases de tipo de dato apropiadas del paquete %Library (%String, %Integer, %Date, etc.) con parámetros de validación:

  • MAXLEN / MINLEN: Límites de longitud de cadena
  • MAXVAL / MINVAL: Rangos numéricos
  • VALUELIST: Valores enumerados
  • PATTERN: Coincidencia de patrones
  • TRUNCATE=1: Truncar en lugar de error en cadenas sobredimensionadas

Palabras Clave de Propiedad

Aprovechar palabras clave de propiedad para funcionalidad mejorada:

  • Required: Campo obligatorio
  • InitialExpression: Valores predeterminados
  • SqlComputed / SqlComputeCode: Columnas calculadas
  • SqlComputeOnChange: Recalcular cuando las dependencias cambien
  • Columnas únicas: Definir tanto la propiedad como un índice único (en lugar de palabra clave UNIQUE)

SerialObjects para Agrupación

Usar SerialObjects embebidos para simplificar estructura de tabla cuando múltiples propiedades se agrupan lógicamente (como componentes de dirección).

Compatibilidad DDL

  • [DdlAllowed]: Especificar esto cuando las definiciones de tabla se originen desde clases para permitir modificaciones DDL SQL subsecuentes
  • CREATE TABLE DDL: Aplica automáticamente configuraciones USEEXTENTSET y bitmap extent index a la clase persistente generada
  • Creación directa de clase: Debe incluir explícitamente estas mejores prácticas

Resumen de Preparación para el Examen

Conceptos Críticos a Dominar:

  1. Mapeo Objeto-SQL: Paquete=Esquema, Clase=Tabla, Propiedad=Campo, SerialObject=Múltiples Campos
  2. Modelo Extent: El class extent incluye todas las instancias de clase y subclases (herencia aplanada)
  3. Parámetro USEEXTENTSET: Siempre establecer a 1 para tablas de producción
  4. Bitmap Extent Index: Requerido para operaciones COUNT y extent eficientes
  5. Validación de Propiedad: Parámetros MAXLEN, MINLEN, MAXVAL, MINVAL, VALUELIST, PATTERN
  6. Clases de Tipo de Dato: Debe usar tipos del paquete %Library para proyección SQL
  7. Patrón SerialObject: Acceder propiedades de objeto embebido con guion bajo (Home_Street)

Escenarios Comunes de Examen:

  • Identificar qué elementos de objeto se proyectan a qué elementos SQL
  • Reconocer mejores prácticas faltantes en definiciones de clase (USEEXTENTSET, bitmap extent index)
  • Comprender cómo aparecen las propiedades SerialObject en SQL (notación de guion bajo vs campo contenedor)
  • Aplicar parámetros de propiedad apropiados para requisitos de validación de datos
  • Distinguir entre comportamiento extent y comportamiento tradicional de tabla relacional
  • Saber cuándo ocurre validación de datos (INSERT/UPDATE/Save, no en SELECT)

Recomendaciones de Práctica Práctica:

  • Crear clases persistentes con y sin USEEXTENTSET, comparar estructura de almacenamiento
  • Definir clases con propiedades SerialObject, consultar usando notación de guion bajo
  • Implementar validación de propiedad usando parámetros MAXLEN, VALUELIST, y PATTERN
  • Probar consultas extent a través de jerarquías de clase (extent Person incluyendo instancias Student)
  • Crear tablas vía DDL CREATE TABLE y definiciones de clase persistente, comparar resultados
  • Usar SqlComputeCode para columnas calculadas con dependencias
  • Aplicar índices únicos en lugar de restricciones UNIQUE
  • Examinar estructura de almacenamiento global para objetos persistentes usando acceso global directo

Report an Issue