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
Referencias de Documentación
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
Referencias de Documentación
Resumen de Preparación para el Examen
Conceptos Críticos a Dominar:
- Mapeo Objeto-SQL: Paquete=Esquema, Clase=Tabla, Propiedad=Campo, SerialObject=Múltiples Campos
- Modelo Extent: El class extent incluye todas las instancias de clase y subclases (herencia aplanada)
- Parámetro USEEXTENTSET: Siempre establecer a 1 para tablas de producción
- Bitmap Extent Index: Requerido para operaciones COUNT y extent eficientes
- Validación de Propiedad: Parámetros MAXLEN, MINLEN, MAXVAL, MINVAL, VALUELIST, PATTERN
- Clases de Tipo de Dato: Debe usar tipos del paquete %Library para proyección SQL
- 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