Modeling customer/supplier roles.

Hi there,

I’m trying to decide the best approach for a person/company/customer/supplier model.
I researching about STI and polymorphic associations, but cant decide which way to go.

  • Companies and persons can be, at the same time, customers or suppliers. They can have many roles.

  • Company and person share many basic information (addresses, telephones, emails, etc).

Any advices?

Thanks in advance,


Don't make customers & suppliers separate models/tables. Make them attributes of a single model. It seems that ***EVERY*** business/accounting package on earth makes this same mistake. For anybody in a "broker" type business line, where it's common to both buy & sell from the same companies, this is a huge annoyance.

As for company vs person, I don't have a terribly strong opinion to offer about 1 model with attribute vs 2 models with inherited base.

Hit send too quickly...

You may not even want companies designated via attributes as customer or supplier. You may just want companies, and let the transaction history tell you who's a customer and who's a supplier, as that can change at any time.

Hey Scott, thanks for your quick reply.

I’m inclined to think 2 models with inheritance base for Person/Company, using STI.

Altho it would be good to associate a person with a company.

About supplies and customers, I think I cant rely only on transaction history.

Many customers for example only have maintenance contracts which will not be registered in this system.

But I need to know they are customers if they open a support ticket or to send a satisfaction survey, for example.