Is it suitable using STI?

I have problems on a simple design problem. I have many companies. Each company have one or more commercial activity. Activities types are: ecommerce, local unit, television, automatic vending machines, and so on. Company may have one or more ecommerce activity or one or more local unit activity, one ormore vending machines, etc. How can I model this scenario? Company has_many ecommerce has_many local_units has_many televisions and so on?

So can each Company have many CommercialActivities

Then… CommercialActivity is STI, which means it has a type column and sub-types can be ECommerceActivity, TelevisionActivity, etc…

The only warning is that if each type is dramatically different, you might want to investigate doing it with multiple tables so you dont have a lot of redundant fields trying model things with additional attributes that aren’t shared.

I think this post might help you http://stackoverflow.com/questions/1634668/multiple-table-inheritance-vs-single-table-inheritance-in-ruby-on-rails

I have problems on a simple design problem.

I have many companies. Each company have one or more commercial activity.

Activities types are: ecommerce, local unit, television, automatic

vending machines, and so on.

So can each Company have many CommercialActivities

Then… CommercialActivity is STI, which means it has a type column and sub-types can be ECommerceActivity, TelevisionActivity, etc…

The only warning is that if each type is dramatically different, you might want to investigate doing it with multiple tables so you dont have a lot of redundant fields trying model things with additional attributes that aren’t shared.

I think this post might help you http://stackoverflow.com/questions/1634668/multiple-table-inheritance-vs-single-table-inheritance-in-ruby-on-rails

You can also use a project of mine (Super STI) to help you. It helps you use STI in Rails while keeping your database clean. Read about it at https://github.com/ihid/super_sti and http://www.ihid.co.uk/projects/super_sti

Message me off-list if you want some help with using it.

Yes the problem is that television, ecommerce, etc. they don't share the same attributes.

I have problems on a simple design problem.

I have many companies. Each company have one or more commercial activity.

Activities types are: ecommerce, local unit, television, automatic

vending machines, and so on.

So can each Company have many CommercialActivities

Then… CommercialActivity is STI, which means it has a type column and

sub-types can be ECommerceActivity, TelevisionActivity, etc…

The only warning is that if each type is dramatically different, you might

want to investigate doing it with multiple tables so you dont have a lot of

redundant fields trying model things with additional attributes that aren’t

shared.

Yes the problem is that television, ecommerce, etc. they don’t share

the same attributes.

Use a polymorphic link table.

So tables:

companies: (name:string)

company_activities: (company_id:int, activity_id:int, activity_type:string)

television_activities(…)

ecommerce_activitiies(…)

Models:

class Company < ActiveRecord::Base

has_many :company_activities

has_many :activities, through: company_activities

end

class CompanyActivity < ActiveRecord::Base

belongs_to :company

belongs_to :activity, polymorphic:true end

and then lots of:

class TelevisionActivity < ActiveRecord::Base

has_many :company_activities

has_many :companies, through: company_activities

end

class EcommerceActivity < ActiveRecord::Base

has_many :company_activities

has_many :companies, through: company_activities

end

etc

Those could all inherit from Activity if you want to use STI, but they don’t need to.

Sorry for my ignorance, in your example have you forgot Activity model and activities table?

ok, sorry they don't need.