Sql 基于层次结构对对象进行分类的好模式是什么

Sql 基于层次结构对对象进行分类的好模式是什么,sql,mysql,database,database-design,Sql,Mysql,Database,Database Design,我有一个视频列表,我想按层次分类 category (id, name, parent) video (id, name) video_category (id, video_id, category_id) 我的分类如下所示 /A/B/C/[C1, C2] /D/E/F/[D1, D2] 所以如果我的视频分类如下 v1 categorized as C1 v2 categorized as C2 If I view underneath "C" it should show me bot

我有一个视频列表,我想按层次分类

category (id, name, parent)
video (id, name)
video_category (id, video_id, category_id)
我的分类如下所示

/A/B/C/[C1, C2]
/D/E/F/[D1, D2]
所以如果我的视频分类如下

v1 categorized as C1
v2 categorized as C2

If I view underneath "C" it should show me both videos.

这是一个合适的设计吗?

我认为你的设计相当不错,有一些小的评论和一个大的,但是

小评论:

  • video_类别不需要id,它的列已经形成了唯一的复合主键。在这里添加一个额外的id允许您存储重复的数据
  • 尽量避免使用“id”作为列;调用视频表“video_id”中的id列,以便更容易记住可以在其他表中加入它的列(模式越大、越复杂,这就越有用)
虽然很大,但MySQL不支持connect by Previor,这是一个问题,因为这是遍历这样的树的最直观的方法。有很多方法可以解决这个问题,或者通过实现更复杂的模式,或者通过迭代而不是递归地构造树遍历过程。您可能会发现以下链接非常有用:


这只是一个两级继承权还是更多?甚至没有限制?您可能需要格外小心,以确保您可以选择类别C(可能是C+C_1+C_2+C_1_1等)下的所有视频。这不是一个2级层次结构,肯定是多级的,“C”的行为将与您描述的相同。