我正在制作一个拍卖网站,我的问题是我如何以正确的方式设计中标者?例如:项目表:
-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没有。