我有一个视频列表,我想将其按层次结构进行分类
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_category 不需要 ID,它的列已经形成了唯一的复合主键。在这里添加额外的 ID 可以让您存储重复的数据。
- 尽量避免使用“id”作为列;将视频表中的 id 列称为“video_id”,这样就可以更轻松地记住可以将其加入到其他表中的哪些列(随着您的架构变得越来越大、越来越复杂,这会变得越来越有用)
最大的问题是但是MySQL不支持先验连接,这是一个问题,因为这是遍历此类树的最直观的方式。有多种方法可以解决这个问题,要么实现更复杂的模式,要么以迭代方式而不是递归方式构造树遍历过程。您可能会发现以下链接很有用:
关于sql - 根据层次结构对对象进行分类的良好模式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4825934/