Este es un escenario que he visto en varios lugares a lo largo de los años; Me pregunto si alguien más ha encontrado una mejor solución que yo ...Diseñar un esquema de 'Orden' en el que hay tablas de definición de producto dispares
Mi empresa vende un número relativamente pequeño de productos, sin embargo, los productos que vendemos son altamente especializados (es decir, para seleccionar un producto determinado) , se debe proporcionar una cantidad significativa de detalles al respecto). El problema es que mientras el cantidad de los detalles requeridos para elegir un producto determinado es relativamente constante, los tipos de los detalles necesarios varían mucho entre los productos. Por ejemplo:
Producto X podría tener la identificación de características similares (hipotéticamente)
- 'Color',
- 'material'
- 'tiempo medio entre fallos'
pero Producto Y podría tener características
- 'Espesor',
- 'Diámetro'
- 'Fuente de energía'
El problema (uno de ellos, de todos modos) en la creación de un sistema de orden que utiliza tanto los productos X e Y es que una Orden Line debe referirse, en algún momento, a lo que está "vendiendo". Dado que el Producto X y el Producto Y se definen en dos tablas diferentes, y la desnormalización de productos utilizando un esquema de tabla amplia no es una opción (las definiciones del producto son bastante profundas), es difícil ver una manera clara de definir la Línea de pedido en tal forma en que la entrada, edición e informes de órdenes son prácticas.
cosas que he intentado en el pasado
- Crear una tabla padre llamado 'producto' con columnas comunes a los productos X e Y, a continuación, utilizando 'producto' como referencia para la tabla OrderLine, y la creación de una relación FK con 'Producto' como el lado primario entre las tablas para el Producto X y el Producto Y. Esto básicamente coloca la tabla 'Producto' como la matriz de OrderLine y de todas las tablas de producto dispares (por ejemplo, Productos X y Y). Funciona bien para la entrada de pedidos, pero causa problemas con el informe o la edición de pedidos ya que el registro 'Producto' debe rastrear qué tipo de producto es para determinar cómo unir 'Producto' a su hijo más detallado, Producto X o Producto Y. Ventajas: se mantienen las relaciones clave. Desventajas: informes, edición en el nivel de línea/producto de pedido.
- Cree las columnas 'Tipo de producto' y 'Clave del producto' en el nivel de la Línea de pedido, luego use algunas lógicas o vistas CASE para determinar el producto personalizado al que hace referencia la línea. Esto es similar al artículo (1), sin la tabla común de 'Producto'. Considero que es una solución más "rápida y sucia", ya que elimina por completo las claves externas entre las líneas de pedido y sus definiciones de productos. Ventajas: solución rápida. Desventajas: igual que el artículo (1), más pérdida de RI.
- Homogeneice las definiciones de producto creando una tabla de encabezado común y utilizando pares clave/valor para los atributos personalizados (OrderLine [n] < - [1] Producto [1] < - [n] ProductAttribute). Ventajas: se mantienen las relaciones clave; sin ambigüedad sobre la definición del producto. Desventajas : informes (recuperar una lista de productos con sus atributos, por ejemplo), los datos de la tipificación de valores de atributos, (ir a buscar los atributos del producto, insertar o actualizar los atributos del producto, etc.) el rendimiento
si alguien más ha intentado una estrategia diferente con más éxito, me gustaría saber de eso.
Gracias.