我对关系数据库和层次结构的最佳实践有疑问。我的问题是,使用基于文本或基于int(id)的层次结构更加明智吗?
我有一个层次结构,但它不是基于id的。层次结构基于文本 例如'level1','level2'而不是id1,id2
我使用mysql和solr来管理我的数据。
目前我保留了文本层次结构,如果我愿意,可以使用它。但是创建一个id层次结构似乎更健康(我也做过)。 Int(id)层次结构看起来也更快,并且不太容易出现非标准化数据(我从来不需要修剪()ids等。)
对此的任何想法都非常感谢。找出别人认为最佳做法会很有趣。
干杯
柯
答案 0 :(得分:1)
我更喜欢使用整数 - 它们更快更小,并且不需要像基于文本的那样进行更改,因为它们不包含任何意义。
答案 1 :(得分:1)
如果使用基于id的层次结构,则会有更好的性能。但您可以在数据库中使用两列为您保留两个代码(IDCode和Code)。这段代码是这样的:
子代码= IDCode +父代码
注意IDCode是唯一的。
这个解决方案并不好,因为您需要一些操作来处理这项工作。
答案 2 :(得分:1)
如果我需要获取子树,我倾向于使用两者。
行有2个int列,由id和parentId组成。这构成了树结构。
此外,我还有一个文本级别,表示父行的索引。例如idName =“44.21.31”的行的id为31,父id为21,其祖父的id为44.这样你就可以获取子树,`其中idName就像“44.21。%”那样获取id为21的行的每个孩子,大孩子等等。
这确实打破了正常的形式,现在有关于实体id的冗余信息 - 但它值得,特别是对于不支持分层结构的数据库系统。