【发布时间】:2013-02-09 06:17:19
【问题描述】:
我必须为一个学校项目使用 b 树实现一个数据库。该数据库用于存储音频文件(歌曲),并且可以进行许多不同的查询,例如询问给定艺术家或特定专辑的所有歌曲。
直观的想法是在b树上为每个字段使用(歌曲、专辑、艺术家...),问题是可以要求删除任何字段的任何成员,并且如果您删除一个艺术家,您必须从其他 b 树中删除他的所有专辑和歌曲,请记住,例如,给定艺术家的所有歌曲不必在 b 树中彼此靠近对应歌曲。
我的问题是:有没有办法这样做(在删除作者后删除歌曲),而不必遍历其他 b 树的所有元素?我不是在寻找代码只是想法,因为我提出的所有想法都是蛮力的。
【问题讨论】:
-
是的,这就是你应该做的。删除一首歌意味着从所有的树中删除。删除艺术家意味着删除他所有的歌曲。这里没有捷径。您不必在其他树中搜索,因为歌曲记录应该有指向所有树节点的指针。
-
在您的问题中,您可能有字段和表格。如果你规范化你的模式,你最终会得到几个表。在设计程序时需要牢记这一点。