【问题标题】:Relation in MySQL to other table or use type and tableId [closed]MySQL与其他表的关系或使用类型和tableId [关闭]
【发布时间】:2019-01-17 23:12:20
【问题描述】:

我想设计一个软件,但我对我的关系有疑问。

假设我有一个名为“orderItem”的表。 我想保存与我的产品的关系,但我有几个产品类别,每个类别都在一个不同的表中(例如:旅游、门票、酒店)。

我的问题是:如何实现这个?

使用 'productId' 和 'type' 来查找使用的表或为每个表创建新字段并创建外键并将当前产品关系保存在其中一个中并让其他表为空?

谢谢?

【问题讨论】:

  • 为什么每个产品都有不同的表?按产品,您是指 SKU 还是特定类别?如果它是 SKU,那么您将拥有 1000 个表。如果是类别,您仍然会有 100 个表。如果不是这种情况,那么我们无法充分利用您的问题语言?
  • 因为我的产品完全不同,最多限制5个产品。
  • 考虑一个旅行社网站。我的产品是旅游、门票、酒店和......
  • @MadhurBhaiya 请阅读我的 cmets
  • @amin 我试图澄清你的问题,请随意不同意我的编辑。

标签: mysql database database-design foreign-keys


【解决方案1】:

您正在尝试实现class table inheritance pattern(转到链接答案中的第三段)。 您的模型需要一个抽象的“Product”表,该表将涉及到 Order 表的 (n, n) 关系。

UML 表示:

[订购] --- [产品] ^ | +-----+-----+ | | | [游览] | ... [票]

ERD:

[Order]-(1,n)-[Order_has_Product]-(n,1)-[Product]--(1,1)-[Tour] \-(1,1)-[票证] \-(1,1)-...

【讨论】:

  • 对于 OP,请务必阅读问题的 cmets,了解此建模模式的潜在缺陷。感谢@RandomSeed,谢谢我不知道那个方法!
  • 谢谢。你的答案是我想要的。
【解决方案2】:

那么你的建议是这样的吗?产品数量固定?


我认为你应该改用这个:

我的理由是:

  • 以后添加新产品会更加困难。
  • 我知道您目前有固定数量的产品,但情况会发生变化。
  • 我觉得你现在从“简单”中获得的东西,以后会花掉你的。
  • 我输入“简单”是因为您的查询会有点古怪!
  • OrderItem 表对我来说是发票中的 1 行。所以你有你的Order(==发票)和OrderItemOrder的一行)。
  • 我的模型还允许您跟踪OrderItem 中每种产品的数量。因此,如果您有一个家庭旅行,您不必为每个人创建 4 个OrderItem。你只需输入Quantity == 4。
  • 为了保持模型中每种产品的数量,您必须在OrderItem 表中添加 5 个额外字段,以存储每种产品类型的数量。它不干净,也不是标准化模型。你也可以有前任。 Tours_idTours == nullQuantity_Tours_idTours == 0 这毫无意义。这可能会导致完整性问题。
  • 在我的模型中,Products 表可能很大,具体取决于您需要创建的字段数量。对于通用字段,这并不是真正的问题(例如 ProductName)。对于仅针对 1 种类型的字段,您可以为其添加前缀。前任。导游。指南不适用于酒店,因此请添加前缀。
  • 在维护方面,添加列和添加整个表更容易。

【讨论】:

  • 如果我的产品详情不同怎么办?我的产品表可能包含一些在所有情况下都不需要但会浪费内存的字段。
  • 正如我在倒数第二点中所述,您可以根据需要在每行中包含任意数量的字段。空字段不占用任何内存。
  • 非常感谢。如果没问题,我想知道复杂的解决方案
  • 我的意思是我更喜欢在我的产品表中没有不必要的 col。我认为在产品表上使用它很好,但我希望我的每个产品都有新表以保存其中的详细信息。所以我的面向对象应用程序可以有更多更好的模型。
  • 我将与我的数据建模人员讨论这个问题,但我认为这两种解决方案都有优点,这是一个妥协的问题。其他人可能会提出其他解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 2018-06-24
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
相关资源
最近更新 更多