【问题标题】:int (id) or text based hierarchies?int (id) 还是基于文本的层次结构?
【发布时间】:2010-02-14 15:15:48
【问题描述】:

我有一个关于关系数据库和层次结构的最佳实践的问题。我的问题是,使用基于文本或 int (id) 的层次结构更明智吗?

我有一个层次结构,但它不是基于 id 的。层次结构基于文本 例如'level1', 'level2' 而不是 id1, id2

我使用 mysql 和 solr 来管理我的数据。

目前我保留了文本层次结构,如果我愿意,可以使用它。但是创建一个 id 层次结构似乎更健康(我也做过)。 Int (id) 层次结构似乎也更快,并且不太容易出现未规范化的数据(我从不需要 trim() ids 等)

非常感谢您对此的任何想法。了解其他人认为什么是最佳做法会很有趣。

干杯

【问题讨论】:

    标签: mysql solr rdbms hierarchy database


    【解决方案1】:

    如果我需要获取子树,我倾向于同时使用两者。

    行有 2 个 int 列,由一个 id 和一个 parentId 组成。这构成了树形结构。

    另外我还有一个文本级别,表示父行的索引。例如idName="44.21.31" 的行的 id 为 31,父 id 为 21,其祖父的 id 为 44。这样您就可以获取子树,其中 idName like "44.21.%" 会获取 id 为 21 的行的每个孩子、孙子等等。

    虽然这确实打破了正常形式,但现在有关于实体 id 的冗余信息 - 但这是值得的,特别是对于不支持分层结构的数据库系统。

    【讨论】:

    • 就像你提到的那样,我保留了两者,所以如果我需要使用文本信息,那么它是可能的。谢谢你,真的为我解决了问题。我会看看我怎么走,如果我遇到速度问题,我想我总是可以删除冗余数据。非常感谢这些答案。
    【解决方案2】:

    我更喜欢使用整数 - 它们更快、更小,并且不需要像基于文本的那样进行更改,因为它们不包含语义。

    【讨论】:

    • 我很高兴你这么说:)。我不是一个完全的菜鸟,但也不是一个 DB wizzkid。我认为我的方向是正确的,速度是必不可少的,而 Int 似乎也是保持层次结构之间严格关系的最佳方式。更改这对我的应用程序来说也是一个很大的解决方法,所以真的很高兴你觉得这也是最好的方法。我不知道没有stackoveflow我会做什么。希望你有一个美好的一天。
    【解决方案3】:

    如果您使用基于 id 的层次结构,将会有更好的性能。但是您可以在数据库中使用两列为您保留两个代码(IDCode 和 Code)。这段代码是这样的:

    子代码 = IDCode + 父代码

    注意 IDCode 是唯一的。

    这个解决方案不好,因为你需要一些操作来处理这个工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 2019-11-05
      相关资源
      最近更新 更多