当前位置:  开发笔记 > 编程语言 > 正文

如何在数据库中创建嵌套类别?

如何解决《如何在数据库中创建嵌套类别?》经验,为你挑选了3个好方法。

我正在制作一个视频网站,其中的类别将被嵌套:

例如编程 - > C语言 - > MIT视频 - >视频1编程 - > C语言 - >斯坦福视频 - >视频1编程 - > Python - >视频1

这些类别和子类别将由用户即时创建.当人们以可导航菜单的形式创建它们时,我将需要显示它们,以便人们可以轻松浏览该集合.

有人可以帮助我如何创建这样的数据库吗?



1> TheTXI..:

使用以下字段创建类别表:

CategoryID - 整数

CategoryName - String/Varchar/Whatever

ParentID - 整数

然后,您的ParentID将引用其父级的CategoryID.

例:

CategoryID CategoryName ParentID
---------------------------------
1          Dog          NULL
2          Cat          NULL
3          Poodle       1
4          Dachsund     1
5          Persian      2
6          Toy Poodle   3



2> 小智..:

Quassnoi说:

您应该使用嵌套集或父子模型.

我过去常常实现它们.我能说的是:

如果您的类别表不经常更改,请使用嵌套集架构,因为在select子句上它很快且只有一个请求,您可以获取给定条目的层次结构的整个分支.但是在插入或更新子句上,比父子模型花费更多时间来更新左侧和右侧(或下面示例中的下部和上部)字段.

另一点,我必须承认,
这是非常微不足道的,但是:直接在数据库中手动更改层次结构非常困难(可能在开发期间发生).因此,请务必首先实现一个接口以使用嵌套集(更改父节点,移动分支节点,删除节点或整个分支等).

这里有两篇关于这个主题的文章:

在数据库中存储分层数据

在MySQL中管理分层数据

最后一件事,我没有尝试过,但我读到某个地方,你可以在一个嵌套的集合表中有多个树,我的意思是几个根.



3> Dan Tao..:

从您问题中的示例看起来您希望某个类别可以拥有多个父项(例如,"MIT视频 - >视频1编程"以及"视频 - >视频1编程"),在这种情况下,简单地添加ParentID列是不够的.

我建议创建两个表:一个带有CategoryID和CategoryName列的简单Categories表,以及一个带有ParentCategoryID和ChildCategoryID列的单独CategoryRelationships表.这样,您可以为任何特定类别指定任意数量的父子关系.甚至可以使用这个模型来建立双重关系,其中两个类别是彼此的父母和孩子同时.(在我的脑海中,我无法想到这个场景的用处,但至少它说明了模型的灵活性.)

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有