我有一个 PHP Web 应用程序,它使用 MySQL 数据库进行对象标记,其中我使用了接受的标记结构作为这个 SO question的答案。
我想实现一个标签层次结构,其中每个标签都可以有一个唯一的父标签。然后,对父标签 T 的搜索将匹配 T 的所有后代(即 T、父标签为 T(T 的子代)、T 的孙子代等)。
最简单的方法似乎是在标签表中添加一个 ParentID 字段,该字段包含标签的父标签的 ID,或者如果标签没有父标签,则包含一些幻数。然而,搜索后代需要对数据库进行重复的完整搜索以找到每个“世代”中的标签,我想避免这种情况。
一种(可能)更快但标准化程度较低的方法是拥有一个包含每个标签的所有子代,甚至每个标签的所有后代的表。然而,这会带来数据库中数据不一致的风险(例如,标签是多个父级的子级)。
有没有一种好方法可以让查询快速找到后代,同时保持数据尽可能规范化?