【问题标题】:MySQL relationships: Bid with products and usersMySQL 关系:与产品和用户一起出价
【发布时间】:2012-02-26 06:50:29
【问题描述】:

我有一个简单的网站,用户可以在其中对产品出价。该模型如下所示: 显然不同的用户可以出价,那么我如何将缺失的链接绘制到“用户”表?

我有点困惑是使用识别关系还是非识别关系。 更新:

【问题讨论】:

  • 这似乎是一个不错的开始,尽管出于优化原因,我仍会为您的查找多对多的查找表编制索引。对此有争论,但我仍然添加它们。 “用户”表缺少哪个链接?请稍微解释一下:)
  • @Ben:那是我的错误。现已编辑。

标签: mysql database data-modeling


【解决方案1】:

你说:"...用户可以对产品出价。"

这表明用户和产品之间存在关系(出价)。您可以将其命名为 user_bids_on_product 或仅命名为 bid

我会删除 userproduct 之间的关系(除非它意味着其他东西,比如产品的所有者)并将您的 bidsbids_has_product 统一到一个表中:

user_bids_on_product
--------------------
product_id  FK to product
user_id     FK to user
price

(product_id, user_id) 不应成为此表的主键,因为我们假设用户可以对产品多次出价。

您可以添加一个代理 id 并将其设为 PK 或添加一个 bid_number 列并将复合 (product_id, user_id, bid_number) 设为 PK。您也可以将(product_id, bid_number) 设置为PK(bid_number 可以标记每个产品的投标顺序,如本例中的拍卖)。我认为这由您决定。

识别关系:


非识别关系:

【讨论】:

  • 我必须有用户和产品的关系,因为产品归用户所有。我更新了图表。有意义吗?
  • 不,你所拥有的不是我建议的。这种设计(现在的),意味着一个出价可以和很多产品相关,也可以和很多用户相关。我看不出这有什么实际意义。
  • 价格最好是DECIMAL,而不是VARCHAR
  • 请不要在编辑问题时删除原始设计(图片)。未来的读者会感到困惑。如果你想再添加一张图片,那很好。
  • 好点。一个产品可以有多个出价,而多个用户可以有多个出价是有道理的。我更新了图表
【解决方案2】:

用户可以对产品进行一次投标;一个用户可以对多个产品进行投标;一个产品可以有多个投标;一个出价仅与一个产品相关联。

我认为您需要在用户和他们的出价之间建立关系。是一对多的。

关于您更新的图表的另一个问题:用户是否会以与出价相同的方式为产品分配评级?这值得追踪吗?如果是,我会在 User 和 Rating 之间建立关系。

【讨论】:

    【解决方案3】:

    一个简单的黑白用户和出价识别关系是有意义的,没有用户就不能存在出价。

    这是一个简单的一对多关系,因为用户“has_many”出价。

    【讨论】:

      猜你喜欢
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2019-08-06
      • 2016-10-28
      • 1970-01-01
      • 2018-12-23
      相关资源
      最近更新 更多