Herencia en una única tabla

Rails proporciona un mecanismo de herencia entre modelos dependientes de ActiveRecord::Base bastante interesante, denominado Single Table Inheritance (STI). La idea fundamental queda bastante bien reflejada en el siguiente diagrama (que hábilmente he plagiado de la web de Martin Fowler):

Como queda bastante claro, Rails utiliza una única tabla donde almacena juntos los atributos de todos los objetos participantes en la jerarquía de herencia. Este enfoque puede ser válido para una jerarquía de clases en la que las subclases no añaden muchos atributos, limitándose a modificar aspectos relativos al comportamiento. Pero para jerarquías grandes con muchos atributos puede generar tablas más grandes de lo recomendable (y con más espacio vacío que información), por lo que lo veo poco generalizable.

¿Alternativas? El enfoque más natural desde el punto de vista de la orientación a objetos consiste en utilizar asociaciones polimórficas, a través de relaciones de tipo has_many :through, especificando una relación entre las una subclase y otra a través de la superclase de la segunda.

Sin comentarios

Leave a Reply

Tu email nunca será compartido con nadie.Los campos obligatorios están marcados con *