如何在拍卖网站中正确设计带有 Bisd 表格的项目表



我正在制作一个拍卖网站,我的问题是我如何以正确的方式设计中标者?例如:项目表:

-id
-user_id(fk user)
-title

投标表:

-id
-item_id(fk Items)
-user_id(fk user)
-price

如果我想进行中标,我应该将winner_bid_id列添加到Items表和投标引用表中。喜欢这个:

项目表:

-id
-user_id(fk user)
-title
-winner_bid_id(fk Bids)

或者我应该在出价表中添加一列像is_winner,如下所示:
出价表:

-id
-item_id(fk Items)
-user_id(fk user)
-price
-is_winner

哪一个更好?我有参考这个:投标网站的数据库结构。但是,如果使用选项 1(将winner_bid_id添加到Items表中并引用Bids表中(,我将有两个表相互引用,并且当我想删除 Items 表中的一行时,我有外键错误,我该怎么办?

大概只能有一个中标。

添加这种关系的更好方法是使用items表中的单个列,假设每个"项目"实际上都是单独的拍卖。

但是,您需要确保出价是针对该商品的。 因此,在bids(item_id, user_id)上引入一个(冗余(索引,并使外键关系与此索引相关。 这将确保中标的是针对正确的项目。

如果您将列is_winner添加到bids表中,则需要使用触发器来确保最多有一个中标。 一些数据库允许过滤的唯一索引,这可以解决这个问题。 据我所知,MySQL没有。

最新更新