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.

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
ovviamente tutto teorico... sara' pure da sistemare, ma il giro del fumo e' questo.