1) non mi è chiaro quando mettere gli underscore oppure i punti quando faccio riferimento a viste, oggetti, action ecc. C'è una guida che spieghi queste regole ?
gli oggetti in python (o i model in XML) hanno il punto (su postgres i nomi delle tabelle relative vengono poi convertiti in "_", i nomi delle classi in python e dei record in XML hanno quasi sempre gli "_", se trovi un punto di solito è per indicare un oggetto fuori dal tuo modulo, es.: modulo_xxx.action_xxx oppure modulo.vista_xxx
2) non capisco la logica per cui hai messo 'partner_id'...
A differenza dei normali database dove fai tutto con le query, in OpenERP hai la possibilità di mettere dei campi (a volte fittizi, ovvero non presenti sulla tabella del DB, vedi gli one2many ad esempio) che rappresentano la relazione, grazie a quelli, il mio partner_id di permette di saltare sull'oggetto res.partner. Nell'oggetto res.partner.contact è stato messo un campo partner_id che risale la china andando a vedere in res.partner.job - res.partner.address - res.partner il primo che trova, nel tuo caso puoi utilizzare questo campo già esistente (campo relazione many2one) per arrivare direttamente a res.partner e li con il campo relation replicare informazioni di res.partner nel contatto (vedi il telefono della ditta) << spero di non averti complicato la vita con questa spiegazione
3) esiste un diagramma delle relazioni tra i vari oggetti openerp (oppure, quale tool consigli per crearlo?)
Ho messo una piccola guida sul wiki per creare grafici UML usanto ooor (più accattivante graficamente) oppure ooop
wiki.openerp-italia.org/doku.php/area_tecnica/sviluppo_e_tools/uml