我如何在数据库中创建嵌套类别? 我正在制作一个视频网站,其中将嵌套类别: 例如编程 - > C语言 - > MIT视频 - >视频1 编程 - > C语言 - > Stanford视频 - >视频1 ...

问题描述 投票:0回答:3
有人可以帮助我如何创建这样的数据库?

	

制定具有以下字段的类别表:

categoryid-整数
database nested categories
3个回答
19
投票
categoryname-字符串/varchar/whything

parentid -Integer
  • 然后,您的parentid将引用其父级的类别。
  • 示例:
  • CategoryID CategoryName ParentID --------------------------------- 1 Dog NULL 2 Cat NULL 3 Poodle 1 4 Dachsund 1 5 Persian 2 6 Toy Poodle 3

quassnoi说:

您应该使用嵌套集或亲子模型。
我曾经实施两者。我能说的是:

14
投票
,另一个重点,我必须承认,但很琐碎,但是:

直接在数据库中手动更改层次结构非常困难(可能在开发过程中发生)。因此,请确保首先实现一个接口以播放嵌套集(更改父节点,移动分支节点,删除节点或整个分支等)。

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

将层次数据存储在数据库中 mysql

中的层次数据管理

last的事情,我没有尝试过,但是我在某个地方读到您可以在嵌套的表中有多个树,我的意思是几个根。

您应该使用

nested sets
  • parent-child

    型。 Parent-child

  • typeid父母名称 1 0买家 2 0卖家 3 0裁判 4 1电气 5 1机械师
  • SELECT * FROM mytable WHERE group IN ( SELECT typeid FROM group_types START WITH typeid = 1 CONNECT BY parent = PRIOR typeid ) 将在

    Oracle
  • 中选择所有买家。

Nested sets


5
投票

SELECT * FROM group_types JOIN mytable ON group BETWEEN lower AND upper WHERE typeid = 1

将在任何数据库中选择所有买家。

请参阅此答案

以获取更多细节。

Nested sets
查询更容易,但是很难更新,更难构建树结构。

从您的问题中的示例中,您似乎希望给定类别有多个父母(例如,“ MIT视频 - >视频1编程”以及“视频 - >视频1编程”) ,在这种情况下,简单地添加parentid列就不够了。

我建议创建两个表:一个带有类别和类别名称列的简单类别表,以及带有parentCategoryId和childCategoryId列的单独的类别关系表。这样,您可以根据需要指定任何特定类别的父母关系。甚至有可能使用此模型具有双重关系,其中两个类别是彼此的父母和子女。 (在我的头顶上,我想不出很有用,但至少它说明了模型的灵活性。)

您需要的是基本的亲子关系:

Category (ID: int, ParentID: nullable int, Name: nvarchar(1000))

    

更好地存储表格的parent_id的方法是将其嵌套在ID中
例如

100000编程 110000 C语言 111000视频1编程 111100 C语言 111110斯坦福视频
ETC..因此,您需要它一个脚本来处理ID
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.