加入有多糟糕?

时间:2013-10-08 07:56:39

标签: mysql sql join

我正在建立一个新的网站,所以我的想法是我有3种不同类型的产品,他们共享一些数据,每一个都有自己的数据,我想创建一个product表对于共享数据,为每种类型的特定数据创建3个表。但很快我发现如果没有父表和{3}之间的JOIN,我就无法加载任何产品。我不确定我是否应该使用此解决方案,或者我应该创建3个表并复制它们之间的共享列。

每种方法的优缺点是什么?

我应该遵循哪一个?

2 个答案:

答案 0 :(得分:2)

简单的答案是“这取决于你想做什么” 以下是在不同场景中使用每种方法的一些优点和缺点:

每种产品类型的产品表和3个子表

优点

  1. 如果您有许多与非类型相关的查询,那么这就是获胜者。例如,如果您有一个“类别”列表,其中显示所有产品而不管其类型,那么这是一个简单的查询 - 没有连接,一切都很酷。
  2. 如果您想要添加另一种产品类型,需要另一个包含数据的表
  3. ,那么您在一个表中的所有产品都有利于将来的自定义。
  4. 没有重复数据。不通。
  5. 缺点

    1. 这种方法唯一真正的缺点实际上就是你的产品。我的意思是:如果你不需要每种产品类型的额外数据,那将会容易得多。所以,你必须使用JOIN。但是,没有什么可以解决的。
    2. 3个产品表,每个产品类型用于不同的产品类型

      优点

      1. 嗯,如果您始终按产品类型显示数据,则此方法有明显的优势。我的意思是:如果您的数据库产品是 pizzas 计算机宠物,则可能永远不会对所有3种产品类型一起运行查询。在这种情况下,您可能想要考虑这种方法。
      2. 在类型中更容易查询。
      3. 缺点

        1. 如果您需要在类别视图中显示所有产品,则必须对此运行一些严重的UNION查询。这比选择JOIN要差得多。
        2. {li> n n种产品类型的表格。
        3. 可能重复列。坏事。
        4. P.S。:上述内容未考虑您的具体需求。在通用条件下,这是一个通用建议,不考虑查询性能 虽然,如果你的数据大小合理,你不应该担心这两种方法中的任何一种(在第一种方法上有明显的优势)。

答案 1 :(得分:1)

JOIN是关系数据库的组成部分。它可能是“坏”的唯一方法是在查询中不得不重复创建一个是一个小麻烦。 JOIN非常有助于消除重复数据