我有两张桌子:
items bids
-id (pk) -id (pk)
-user_id (fk) -user_id (fk) references users (pk)
-title -item_id (fk) references items
-bid_price
我还希望用户选择接受出价。我应该如何构建数据库才能拥有这种功能。
选项1:
bids
-id (pk)
-user_id
-item_id
-bid_price
-is_accepted
选项2:
items
-id
....
-accepted_bid_id (fk references bid)
我应该选择哪个选项或建议其他选项?
答案 0 :(得分:3)
如果每个项目只有一个可接受的出价,则选项2将是更好的方式。选项1允许接受任何数量的投标。
有关推理的更多信息:选项2中的accepted_bid_id
列不仅可以确保每个项目最多只有一个可接受的出价,还可以让您更快地访问该出价。如果您使用布尔值(您的选项1),您必须做这样的事情才能加入已接受的出价:
SELECT * FROM items
LEFT JOIN bids ON bids.item_id=items.id AND bids.is_accepted
这要求出价的复合索引(item_id,is_accepted)合理快速。另一方面,使用选项2,您可以执行此操作:
SELECT * FROM items
LEFT JOIN bids ON bids.id = items.accepted_bid_id
除了您已经拥有的两个主键之外,这不需要任何索引。
总结一下:
因此,在选项1的方向上没有多少要点。