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