Personalmente la vedrei cosi':
tabella utenti
id_utente
altre info
tabella oggetti
id_oggetto
id_venditore (utenti.id_utente)
data_inizio
data_fine
descrizione
altro
tabella offerte
id_offerta
id_acquirente (utenti.id_utente)
id_oggetto
dataora_offerta
offerta
stato
altro
quando vuoi trovare oggetti in vendita, scaduti, in corso vendita, offerte, utenti puoi con una query selezionare tutto quello che ti pare.
es.: oggetto in corso_vendita, oggetto, venditore, acquirente, date offerte, offerta.
ovviamente tutto teorico... sara' pure da sistemare, ma il giro del fumo e' questo.codice:select * from oggetti left join offerte USING (id_oggetto) left join utenti a ON a.id_utente = oggetti.id_venditore left join utenti b ON b.id_utente = offerte.id_acquirente where now() between oggetti.data_inizio AND oggetti.data_fine