Mil gracias voy a probar todo esto que me dicen.
Por ejemplo dentro de mi modelo Delfin, voy a saber a simple vista si hereda
de Pescado? ese seria el type que ustedes me comentan?

paolo

2011/4/20 NeX Development <[email protected]>

> 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
>
>
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a