Los patrones de diseño generalmente están relacionados con el diseño orientado a objetos.
¿Existen patrones de diseño para crear y programar bases de datos relacionales ?
Muchos problemas seguramente deben tener soluciones reutilizables.
Los ejemplos incluirían patrones para el diseño de tablas, procedimientos almacenados, disparadores, etc.
¿Existe un repositorio en línea de tales patrones, similar a martinfowler.com ?
Ejemplos de problemas que los patrones podrían resolver:
- Almacenar datos jerárquicos (por ejemplo, tabla única con tipo frente a tablas múltiples con clave 1: 1 y diferencias ...)
- Almacenar datos con estructura variable (por ejemplo, columnas genéricas vs xml vs columnas delimitadas ...)
- Desormalizar datos (cómo hacerlo con un impacto mínimo, etc.)
design-patterns
database-design
rdbms
revs Sklivvz
fuente
fuente
Respuestas:
Hay un libro en la serie Signature de Martin Fowler llamado Refactoring Databases . Eso proporciona una lista de técnicas para refactorizar bases de datos. No puedo decir que haya escuchado tanto una lista de patrones de bases de datos.
También recomendaría los patrones del modelo de datos de David C. Hay y el seguimiento de un mapa de metadatos que se basa en el primero y es mucho más ambicioso e intrigante. El prefacio solo es esclarecedor.
También un gran lugar para buscar algunos modelos de bases de datos pre-enlatados es la serie de libros de recursos del modelo de datos de Len Silverston, el volumen 1 contiene modelos de datos universalmente aplicables (empleados, cuentas, envíos, compras, etc.), el volumen 2 contiene modelos de datos específicos de la industria (contabilidad, atención médica, etc.), el Volumen 3 proporciona patrones de modelo de datos.
Finalmente, si bien este libro es aparentemente sobre UML y modelado de objetos, el Modelado en color con UML de Peter Coad proporciona un proceso impulsado por "arquetipo" de modelado de entidades a partir de la premisa de que hay 4 arquetipos centrales de cualquier modelo de objeto / datos
fuente
Los patrones de diseño no son soluciones trivialmente reutilizables.
Los patrones de diseño son reutilizables, por definición. Son patrones que detecta en otras buenas soluciones.
Un patrón no es trivialmente reutilizable. Sin embargo, puede implementar su diseño descendente siguiendo el patrón.
Los patrones de diseño relacional incluyen cosas como:
Relaciones de uno a muchos (maestro-detalle, padre-hijo) relaciones usando una clave foránea.
Relaciones de muchos a muchos con una mesa de bridge.
Relaciones opcionales uno a uno administradas con NULL en la columna FK.
Star-Schema: Dimension and Fact, diseño OLAP.
Diseño OLTP completamente normalizado.
Múltiples columnas de búsqueda indexadas en una dimensión.
"Tabla de búsqueda" que contiene PK, descripción y valores de código utilizados por una o más aplicaciones. ¿Por qué tener código? No lo sé, pero cuando tienen que usarse, esta es una forma de administrar los códigos.
Uni-mesa. [Algunos lo llaman antipatrón; es un patrón, a veces es malo, a veces es bueno.] Esta es una tabla con muchas cosas pre-unidas que violan la segunda y tercera forma normal.
Array mesa. Esta es una tabla que viola la primera forma normal al tener una matriz o secuencia de valores en las columnas.
Base de datos de uso mixto. Esta es una base de datos normalizada para el procesamiento de transacciones pero con muchos índices adicionales para informes y análisis. Es un antipatrón, no hagas esto. La gente lo hace de todos modos, así que sigue siendo un patrón.
La mayoría de las personas que diseñan bases de datos pueden recitar fácilmente media docena "Es otra de esas"; Estos son patrones de diseño que utilizan regularmente.
Y esto no incluye patrones administrativos y operativos de uso y gestión.
fuente
AskTom es probablemente el recurso más útil para las mejores prácticas en Oracle DB. (Normalmente escribo "asktom" como la primera palabra de una consulta de Google sobre un tema en particular)
No creo que sea realmente apropiado hablar de patrones de diseño con bases de datos relacionales. Las bases de datos relacionales ya son la aplicación de un "patrón de diseño" a un problema (el problema es "cómo representar, almacenar y trabajar con datos mientras se mantiene su integridad", y el diseño es el modelo relacional). Otros enfoques (generalmente considerados obsoletos) son los modelos de navegación y jerárquicos (y estoy seguro de que existen muchos otros).
Dicho esto, puede considerar el "Almacenamiento de datos" como un "patrón" o enfoque algo separado en el diseño de la base de datos. En particular, es posible que le interese leer sobre el esquema Star .
fuente
Después de muchos años de desarrollo de la base de datos, puedo decir que hay algunos no va y alguna pregunta que debe responder antes de comenzar:
preguntas:
No se usa:
recomendaciones:
Espero que este sea un buen punto de partida.
fuente
Su pregunta es un poco vaga, pero supongo que
UPSERT
podría considerarse un patrón de diseño. Para los idiomas que no se implementanMERGE
, hay varias alternativas para resolver el problema (si existe una fila adecuada,UPDATE
INSERT
existen contrario ).fuente
Depende de lo que quieras decir con un patrón. Si está pensando en Persona / Compañía / Transacción / Producto y tal, entonces sí, ya hay muchos esquemas de bases de datos genéricos disponibles.
Si está pensando en Factory, Singleton ... entonces no, no necesita ninguno de estos, ya que tienen un nivel demasiado bajo para la programación de DB.
Si está pensando en la denominación de objetos de la base de datos, está en la categoría de convenciones, no en el diseño per se.
Por cierto, S.Lott, las relaciones uno a muchos y muchos a muchos no son "patrones". Son los componentes básicos del modelo relacional.
fuente