Forum: Ruby on Rails model inheritence and relational databases

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Kris (Guest)
on 2007-04-02 15:26
Okay the problem I am trying to get to grips with is how inheritence and
data storage in a relational database can work...

I can easily have a model inherit from other models and if the
difference between the two models is fairly small STI works well... But
once you start adding more and more functionality (well properties
actually) STI becomes messy and you want to split the single table up in
to multiple table keeping one table per model...

What is the best way to tackle this?

Lets say I have a base model called Animal which is supposed to have the
properties, weight, age and health. I then create two new models called
Bird and Insect. Bird has the property flying and Insect has the
property bugging...

Would I create two tables, with the full set of fields in, or is there a
way in Rails to keep the common fields in one table and the additional
fields in another table? (I guess not)

BirdTBL
id, weight, age, health, flying

InsectTBL
id, weight, age, health, bugging

[For the sake of this example please imagine there are loads of other
animals each that extends the Animals class, so STI would not be
useful..]
Sava C. (Guest)
on 2007-04-11 17:29
(Received via mailing list)
Kris wrote:
> Okay the problem I am trying to get to grips with is how inheritence and
> data storage in a relational database can work...
>
> I can easily have a model inherit from other models and if the
> difference between the two models is fairly small STI works well... But
> once you start adding more and more functionality (well properties
> actually) STI becomes messy and you want to split the single table up in
> to multiple table keeping one table per model...
>
> What is the best way to tackle this?

Take a look at Class table inheritance
http://www.martinfowler.com/eaaCatalog/classTableI.... If
this
concept suits you, you can give class table inheritance plugin a try at
http://rubyforge.org/projects/clti/. Disclaimer: I'm its author.

--
Sava C.
Guest (Guest)
on 2007-04-16 14:48
Sava C. wrote:
> Kris wrote:
<SNIP>
>>
>> What is the best way to tackle this?
>
> Take a look at Class table inheritance
> http://www.martinfowler.com/eaaCatalog/classTableI.... If
> this
> concept suits you, you can give class table inheritance plugin a try at
> http://rubyforge.org/projects/clti/. Disclaimer: I'm its author.
>
> --
> Sava C.

Thanks Sava, thats the word I needed, CTI. Ive had a good google and I
have found quite a few discussion and implementations but nothing stable
or that does not remove certain ActiveRecord features...

I guess its either put up or contribute code :)
Sava C. (Guest)
on 2007-04-17 18:37
(Received via mailing list)
Guest wrote:
>> --
>> Sava C.
>
> Thanks Sava, thats the word I needed, CTI. Ive had a good google and I
> have found quite a few discussion and implementations but nothing stable
> or that does not remove certain ActiveRecord features...
>

My implementation hopefully does not remove any ActiveRecord feature. It
has
some unit tests, but test coverage is far from complete - I'd like to
add all
inheritance tests from ActiveRecord. The plugin also has not been
performance
tested.

--
Sava C.
This topic is locked and can not be replied to.