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.