Patrones de diseño / estrategias para campos personalizados y tipos de datos

12

¿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.

GSto
fuente
66
Es posible que le interese leer algunas de las respuestas a esta pregunta sobre el diseño de una base de datos para campos definidos por el usuario
Rachel
Es de destacar: Oracle está demandando a todos los que implementan esto de una manera particular (por lo que entiendo, común). Echaría un vistazo a eso también.
Steven Evers

Respuestas:

4

El EAVmodelo 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.

Oded
fuente
También he oído hablar de personas que usan bases de datos orientadas a documentos como una alternativa al EAV, pero no tengo experiencias personales con este enfoque.
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner: eso es lo que estaba insinuando, pero como a ti mismo, no hay experiencia personal.
Finalizado
4

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.

HLGEM
fuente
1

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.

JeffO
fuente