Por el tema de las columnas desperdiciadas en la tabla (Pescados en este caso) lo que podes hacer es intentar identificar aquellas que realmente no necesiten estar 'indexadas' o las cuales no vas a utilizar para realizar busquedas/aplicar scopes. En caso de encontrar algunas de estas podes generar una solo columna que almacene estos atributos serializados y generar algunos metodos del tipo accessor para setear y obtener cada uno de los datos serializados de manera independiente.
Otra forma es generar un modelo de atributos (algo asi como pescado_attributes) que respete un esquma de llave-valor donde la llave seria el nombre del atributo y el valor ¬_¬ el valor del atributo. Este ultimo acercamiento, mas rebuscado, te va a permitir (si tenes los indices correctamente creados) realizar busquedas sobre los atributos (un poco mas costosas para la DB pero busquedas al fin). La eleccion varia mucho dependiendo de que tan grande reulten ser la cantidad de subclases y las diferencias que puedan presentar + el tipo de operaciones que tengas que realizar con las colleciones de estos tipos. Aprovecho para comentarte que utilizando STI (Single table inheritance) con ActiveRecord el type es autoseteado si utilizas las subclases directamente. Ej, Delfin.create(:nombre => 'Flipper', :color => 'Gris', :salta_el_are => false, :grita => true) va a terminar almacenando un registro en la DB con esos parametros y el type == 'Delfin'. Saludos, -- Roberto 2011/4/20 Geronimo Diaz <[email protected]> > Hola paolo, podrias usar "Single table inheritance" ( > http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html), la > idea seria definir todos los atributos de todos los subtipos de pescados que > tuvieras en la misma tabla pescado, mas un atributo llamado type que > contendra el nombre de la clase del pescado, ejm: > > tabla pescados > id nombre color . ... type > 1 'delfin', 'gris', .... , 'Delfin' > 2 'tiburon', ...... 'Tiburon' > > luego tendras un modelo para la clase abstracta y para las > concretizaciones, Pescado, Delfin, Tiburon. Cuando en una instancia asignes > el campo type, AR internamente intentara instanciar un objeto del tipo > definido en ese campo, asi podras hacer cosas como Delfin.all o Tiburon.all. > > Hay otras formas de definir el modelo relacional, en lugar de poner todos > los campos en una misma tabla podrias crear tablas para cada tipo y > relacionarlas mediantes foreing keys, te dejo una breve descripcion: > > http://www.fortunecity.com/lavender/dale/1054/base/extendido.htm (apartado > 6.1. Relaciones Superclase/Subclase y Especialización/ Generalización.) > > espero te sirva de ayuda. > > Saludos > > > > > > > > On 20/04/11 15:04, Paolo Loran wrote: > > Buenos dias, mi consulta esta dirijida a como maneja ActiveRecord a las > clases Abstractas y el tema de Herencia, ya que no me queda muy claro su > funcionamiento y uso. > Ejemplo del Mundo Acuatico :D : > > Pescado (nombre, color, tamaño) > |--------Delfin (salta_el_aro , grita) > |--------Tiburon (dientes) > > Por lo que entiendo la clase Pescado seria una clase Abstracta la cual > tendria definido entre sus atributos a nombre, color y tamaño, y por otro > lado deberia tener a Delfin como una clase concreta que heredara de Pescado > (al igual que tiburon). > En mi "Sistema del Mundo Acuatico" nunca crearia nuevos pescados, pero si > nuevos delfines y tiburones, sino entiendo mal esto deberia estar reflejado > en el modelo no es asi?. > Por otro lado veo que debería tener creada una tabla en mi BD de nombre > pescado que posea a todos los atributos tanto de Pescado, Delfin y Tiburon, > no es asi? lo que implicaría tener muchos campos con null, mi pregunta viene > a eso, es manejaba el desperdicio de espacio en la BD de alguna forma? estoy > utilizando SQLite3, debería tirarme a una opcion com PostgreSQL? que me > dicen. > > Saludos, atte. > poli > > > _______________________________________________ > Ruby mailing > [email protected]http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > _______________________________________________ > Ruby mailing list > [email protected] > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > >
_______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
