![]() |
1
2
看看 adjacency list model -它并不完美(更新速度很慢),但在某些情况下(层次查询),它是一种很好的表示,特别是对于像您这样的问题。 |
![]() |
2
1
有 a whole book 充满了在SQL中表示树的设计策略。这是值得一看的纯粹的聪明点。 |
![]() |
3
1
假设类别树足够小,可以进行缓存,那么最好将类别树保存在内存中,并在该树上具有一个函数,该函数将生成一个类别ID列表,该列表位于给定类别之下。
然后在查询数据库时,只需使用
|
![]() |
4
0
一种可能的解决方案是将层次结构与实际的分类分离开来。例如,苹果可以分为水果和食物两类。分类法不知道水果是食物,但你可以在其他地方定义它。那么,您的查询将简单到
或者,您可以在构建查询之前遍历层次结构,它需要
|
![]() |
5
0
我认为您的数据库模式很好,但是这个搜索的实现实际上取决于您的特定RDBMS。它们中的很多都有执行这种递归的方法。我能想到的一个例子是SQL Server支持 Common Table Expressions 它们是那些讨厌的光标的快速替代品。 如果指定要使用的RDBMS,可能会得到更具体的答案。 |
![]() |
developer · 带外键的SQL表设计 8 月前 |
![]() |
relatively_random · 确保两个表之间一致的共同参考 9 月前 |
![]() |
b126 · 在两种不同的Oracle模式上执行相同查询的速度差异很大 1 年前 |
![]() |
robertspierre · 在多对多关系中自动删除未引用的行 1 年前 |
![]() |
Michael Samuel · MYSQL在以下情况下自动创建索引 7 年前 |