How to design tables such that a person can work for many companies?
You'd need a many-to-many table that maps people to companies.  Something like (I'm guessing at your table definitions)

CREATE TABLE employment (
  person_id INTEGER REFERENCES person ( person_id ),
  company_id INTEGER REFERENCES company ( company_id ),
  CONSTRAINT pk_employment PRIMARY KEY ( person_id, company_id )
);