¿Existen estrategias o patrones de diseño comunes para diseñar aplicaciones que tengan la capacidad de agregar campos personalizados a los objetos de datos o de crear su propia definición personalizada de objetos? Por ejemplo, estoy pensando en productos como SalesForce, donde puede tener sus propios tipos de información, marcos como Expression Engine y la forma en que maneja canales y grupos de campos de canales (Ejemplo) , o cómo los CMS como Wordpress tienen la capacidad de agregar campos a los tipos de publicaciones personalizadas.
12
Respuestas:
Martin Fowler dio una buena descripción de cómo modelar propiedades dinámicas (que es esencialmente lo que está pidiendo) en su libro "Patrones de análisis" . La mayor parte del contenido está disponible en línea de forma gratuita como artículos PDF, el que está buscando es este:
http://martinfowler.com/apsupp/properties.pdf
fuente
El
EAV
modelo se usa normalmente para esquemas no estructurados como usted describe.Sufre en rendimiento y la capacidad de consultar tales propiedades dinámicas de manera ad-hoc ... y como tal es considerado por muchos como un antipatrón.
Otros enfoques son usar un formato dinámico como XML o Json para mantener tales propiedades, posiblemente con almacenamiento dedicado para cada propiedad para ayudar con la búsqueda.
fuente
Además de la tabla EAV que describe @Oded, las personas usan la base de datos nosql para este tipo de información. Recuerde que no hay ninguna razón por la cual su aplicación no pueda usar una base de datos relacional para las partes que tienen sentido con el modelo relacional y una base de datos nosql para la información que no lo hace.
Una tercera posibilidad es agregar varias columnas para los campos agregados por el cliente (Customerfield1, customerfield2, etc.) y luego hacer que el cliente defina lo que significan. Sin embargo, esto solo funciona para la cantidad de campos que el cliente puede agregar, por lo que está bien si solo espera que necesiten dos o tres, pero no funcionará si necesita cientos.
fuente
No tendría la primera aplicación con una tabla con: UDF1, UDF2, UDF3 ... Las otras sugerencias (EVA o NoSQL) son mucho mejores.
Dependiendo del RDBMS ( SQL Server ofrece esto ), podría salir de la normalización y tener un campo que contenga los datos en formato XML o simplemente texto sin formato. Tendrás que confiar en el código para gestionar esto.
fuente