Я думаю, вам нужна модель домена, подобная следующей:
Buyer(BuyerId, ... buyer details ... )
Seller(SellerId, ... seller details ... )
Book(BookId, ... book details ... )
Bid(BidId, BuyerId, BookId, Price, Expiry)
Offer(OfferId, SellerId, BookId, Price, Expiry
Как это работает, пользователь (покупатель или продавец) может создать заявку или предложение в зависимости от ситуации. Поэтому, если вы покупатель, вы можете начать с поиска доступных предложений. Если вам нравится, вы можете принять его и перейти к оформлению заказа. Возможно, вам не нравятся какие-либо Предложения, но цена близка к тому, что вы хотите. Вы можете создать заявку и отправить ее создателю Предложения для рассмотрения.
Или, если ничто не соответствует вашим требованиям в качестве покупателя, вы можете создать заявку и оставить ее в системе для потенциальных продавцов для просмотра / поиска и рассмотрения до истечения выбранного вами срока действия.
Я добавил классы Bid и Offer, и я думаю, что их польза очевидна. Но если вам нужны дальнейшие объяснения, пожалуйста, не стесняйтесь оставлять комментарии, и я отвечу. Поля Expiry не обязательны, но, скорее всего, каждая заявка и предложение будут иметь ограничение по времени, и в этом случае они вам понадобятся.
Я увеличил количество классов / таблиц, но я думаю, вы обнаружите, что ваша система становится намного проще в управлении и расширении.