26

Mi pregunta es sobre el modelado de herencia en sistemas de bases de datos relacionales. Tengo un modelo de datos canónicos y tengo algunos campos relacionados con el precio del producto heredando ciertos atributos de la tabla de productos y quiero modelar esta herencia en la base de datos relacional de MySQL. Por lo tanto,¿Cómo hacer modelado de herencia en bases de datos relacionales?

"¿Cómo podemos hacer modelos de herencia en relacionales? Bases de datos?

Gracias.

Respuesta

27

Martin Fowler lo comenta extensamente en su libro Patterns of Enterprise Application Architecture book. Obtener este libro y mirar en:

  1. Single Table Inheritance
  2. Class Table Inheritance
  3. Concrete Table Inheritance

El sitio web debe darle una idea. También es posible que desee leer la sección en inheritance mappers. Cada uno de los diferentes enfoques tiene sus pros y sus contras para elegir sabiamente.

+18

Esta respuesta implica comprar un libro para que se realice por completo. ¿Alguna posibilidad de que pueda agregar recursos web similares? –

3

Bases de datos relacionales no se ocupan de los objetos (y, por lo tanto, la herencia) - se ocupan de las relaciones. Lo que realmente está preguntando es cómo asignar su estructura de objetos a su base de datos, y la respuesta a eso es "depende de su capa ORM".

Eche un vistazo al artículo Mapping Objects to Relational Databases: O/R Mapping In Detail para obtener más información. Si nos dice qué paquete de software está utilizando, es probable que obtenga una respuesta más al punto.

+1

Esto puede sonar pedante, pero no creo que sea correcto decir que las bases de datos relacionales se ocupan de las relaciones, sino que se llaman así porque se ocupan de las relaciones como se define aquí: http://en.wikipedia.org/ wiki/Relation_ (base de datos) –

+1

@Ralph: Wiki es un absceso; los confabuladores no tienen certificación. Las bases de datos relacionales tratan con entidades y relaciones, no con objetos. Los objetos se pueden mapear fácilmente si el RDb es verdaderamente relacional; y no si no lo es – PerformanceDBA

+3

Puede tener herencia de tabla sin ORM –

2

Si lo que desea es mirar algunos artículos de la tela en lugar de leer un libro, se pueden encontrar algunos buenos artículos de buscar en Google en:

Generalization Specialization Relational Modeling 

El patrón de las especificaciones Gen cubre una gran parte del mismo terreno que la herencia lo hace en entornos OOP.

Si Google en

Generalization Specialization Object Modeling 

obtendrá un nuevo lote entero de artículos, la mayor parte de la herencia que mencionan de forma explícita.

Hay una técnica de diseño que se resume en la siguiente etiqueta debajo de la etiqueta de información. Esto le permite usar tablas de subclase para "extender" una tabla de clase, si permite un uso extraño de la palabra "extender". Hay un poco de trabajo involucrado, pero vale la pena.

+0

Si bien esto no es realmente una respuesta en un S.O. sentido, lo encontré muy útil. – derekv

1

El capítulo 6 de "Problemas prácticos en la gestión de bases de datos" es probablemente una lectura interesante para usted.

Como son todos los otros capítulos, probablemente, pero esos no se relacionan directamente con su pregunta.

Cuestiones relacionadas