代码之家  ›  专栏  ›  技术社区  ›  SeaBass

我应该标记子帖子以便删除,还是用主帖子就足够了?

  •  0
  • SeaBass  · 技术社区  · 7 年前

    我不确定这个问题是否太主观,但让我知道是否有一个更适合它的论坛。

    我有三张桌子: Products , Variations Colors .

    每个表都有字段 visibility 如果设置为 1 如果设置为 0 它是隐藏的。 产品 是父表,它与子表有关系 变化 颜色 另外。可以从任何表中删除文章,但如果从 产品 表,任何来自 变化 颜色 也被视为已删除,无论 可见度 字段设置为 1个 0个 .

    如果产品被删除,最好扫描所有表并将所有内容标记为已删除,还是只在父表中标记文章就足够了?

    我可以看到取消删除父post和保持子表的历史完整的好处,但您也可以争辩说,它们是间接删除的,应该这样标记,可能会在查询时间上获得一些微秒,并最终避免在代码中缺少连接或检查可见性字段时出错。你能为这两种方法想出其他的论点吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   codtex    7 年前

    如果 visibility 列决定是否删除post我认为您只能在父表中拥有它 Products 子表中不需要它 Variations Colors . 如果 产品 另外两张桌子你可以一直用 JOIN 知道什么标记为已删除。

    例如,如果您有以下查询:

    SELECT * FROM `Products` p 
    LEFT JOIN `Variations` v ON p.product_id = v.product_id
    LEFT JOIN `Colors` c ON p.product_id = c.product_id
    WHERE p.visibility = 1;
    

    您将只获取可见产品的数据,如果要从子表中删除数据,可以执行以下操作:

    SELECT v.* FROM `Variations` v 
    LEFT JOIN `Products` p ON v.product_id = p.product_id
    WHERE p.visibility = 0;
    

    最后一个查询将从 变化 标记为已删除的。

    结论

    使用时,始终可以按一对多关系中的父字段确定子字段的状态 加入 语句,所以只需更新父表中的字段,我认为子表中相同的字段是多余的。