【问题标题】:Inter referencing vs external referencing内部引用与外部引用
【发布时间】:2016-02-14 04:43:50
【问题描述】:

我必须设计一个具有父子关系(类别和子类别)的表 是在子表中有两个以 parent_id 作为外键的表,还是在列上有一个以 parent_id 作为外键的表。

【问题讨论】:

  • 我的选择是将两者都放在一张桌子上。没有任何父母的记录应该包含 -1 否则父母 id

标签: mysql sql optimization query-optimization


【解决方案1】:

IF主类和子类相同架构,一张表。

IF 他们有不同的模式,两个表。 “做错了”的一个例子是论坛(或电子邮件)架构试图将 ThreadsMessages 放入同一个表中。

“顶级”类别的parent_id 可以等于0 或NULL。子类别应将parent_id 设置为直接父级的id。请注意,这提供了类别的任意嵌套(在树中,无循环等)。

【讨论】:

    【解决方案2】:

    您可以尝试使用一个表,只需为父类别添加一列“has_child”,如果它有子类别,则值为 1,如果没有,则为 0,然后对于子类别,您可以有一个值 > 0 的“parent_id”如果它有一个父母,如果没有,只是 0

    【讨论】:

    • 我知道逻辑,我的问题是在优化方面什么更好。
    • has_child 很少需要 - 只需执行“自连接”即可发现是否有孩子。
    • 您的问题是“有两张桌子”或“有一张桌子”哪个更好? ,我的建议是“有一张桌子”。 :))
    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多