Mysql 如何在拍卖网站中正确使用Bisd表设计ItemsTable

Mysql 如何在拍卖网站中正确使用Bisd表设计ItemsTable,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我正在制作一个拍卖网站,我的问题是如何正确设计中标人?例如: 项目表: -id -user_id(fk user) -title -id -user_id(fk user) -title -winner_bid_id(fk Bids) 投标表格: -id -item_id(fk Items) -user_id(fk user) -price -id -item_id(fk Items) -user_id(fk user) -price -is_winner

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

-id
-user_id(fk user)
-title
    -id
    -user_id(fk user)
    -title
    -winner_bid_id(fk Bids)
投标表格:

-id
-item_id(fk Items)
-user_id(fk user)
-price
-id
-item_id(fk Items)
-user_id(fk user)
-price
-is_winner
如果我想中标,我应该在Items表和bids表的References中添加winner\u bid\u id列。像这样:

项目表:

-id
-user_id(fk user)
-title
    -id
    -user_id(fk user)
    -title
    -winner_bid_id(fk Bids)
或者我应该在投标表中添加一列,如is_winner,如下所示: 投标表格:

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

哪一个更好?我有以下参考资料:。但是,如果使用选项1将winner\u bid\u id添加到Items表和reference Bids表中,我将有两个表相互引用,并且当我要删除Items表中的一行时,出现外键错误,我该怎么办?

可能只有一个中标

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

但是,您需要确保出价是针对该项目的。因此,在bidsitem_id、user_id上引入一个冗余索引,并将外键关系设置为该索引。这将确保中标的物品是正确的


如果您在bids表中添加一列is_winner,则需要使用触发器确保最多有一个中标。一些数据库允许筛选出唯一的索引,这将绕过此问题。据我所知,MySQL没有。

但是如果我使用选项1,我会得到循环引用,我已经尝试过了,当我想要删除一个项目时,我有一个外键错误,这个选项是确保完整性?开始;删去删去犯罪或用于删除级联。获取外键错误表示FKs不正确。也许你只需要一个索引。