int(id)或基于文本的层次结构?
我有关于关系数据库和层次结构的最佳实践的问题。我的问题是,使用基于文本或int(id)的层次结构更理智吗?int(id)或基于文本的层次结构?
我有一个层次结构,但它不是一个基于id的。层次结构基于文本 ,例如'level1','level2',而不是id1,id2
我使用mysql和solr来管理我的数据。
目前我保留了文本层次结构,所以如果我愿意的话,也可以使用它。但是,创建一个id层次结构似乎更健康(我也完成了这项工作)。 Int(id)层次结构似乎也更快,并不真正倾向于非标准化的数据(我从来不必修剪()ID等)。
任何想法都非常感谢。找出别人觉得最好的做法是很有趣的。
干杯
柯
我倾向于同时使用,如果我需要获取子树。
行有2个int列,由id和parentId组成。这构成了树结构。
另外我还有一个文本级别,代表父行的索引。例如idName =“44.21.31”的行的ID为31,父ID为21,其父母的ID为44.这样你可以获取子树,其中idName类似于“44.21。%”取id为21的行的每个孩子,大孩子等等。
虽然现在已经破坏了正常形式,但现在有了关于实体id的冗余信息 - 但它可能是值得的,特别是对于db系统否则不支持层次结构。
我更喜欢使用整数 - 它们是速度更快,体积更小,不需要像一个基于文本的人们可能会改变,因为它们不包含思迈特意义。
我很高兴你说这个:)。我不是一个完全noob,但也不是一个数据库wizzkid要么。我认为我正朝着正确的方向前进,速度至关重要,而且Int也是维持层级间严格关系的最佳方式。改变这也将是我的应用程序的一个很大的解决方法,所以真的很高兴你觉得这是最好的方式。 我不知道我会做什么没有stackoveflow。希望你有美好的一天。 – 2010-02-14 15:37:14
如果使用基于id的层次结构,将会有更好的性能。但是你可以在你的数据库中使用两列,为你保留两个代码(IDCode和Code)。这个代码是这样做:
儿童代码= IDCODE +父代码
做的注意,IDCODE是独一无二的。
此解决方案不好,因为您需要一些操作来处理此工作。
我一直都像你提到的一样,所以如果我需要使用文本信息,那么它是可能的。感谢你,真的为我清除了一些东西。 我会看看我如何去,如果我遇到速度问题,我想我总是可以删除冗余数据。非常感谢这些答案。 – 2010-02-14 16:31:10