I'm designing a db with several types of organization-type entities,
e.g., company, school, etc... each one of which can have one or more
addresses, phone numbers, fax numbers, etc. Therefore, wouldn't it be
best to give addresses, phone numbers etc. their own tables to have this
kind of flexibility?
Yes. I'd also think about adding a boolean field to indicate the "primary" address. Then you can create a has_one association to fetch the primary address easily.