制定具有以下字段的类别表:
categoryid-整数
parentid -Integer
CategoryID CategoryName ParentID
---------------------------------
1 Dog NULL
2 Cat NULL
3 Poodle 1
4 Dachsund 1
5 Persian 2
6 Toy Poodle 3
quassnoi说:
您应该使用嵌套集或亲子模型。
我曾经实施两者。我能说的是:
直接在数据库中手动更改层次结构非常困难(可能在开发过程中发生)。因此,请确保首先实现一个接口以播放嵌套集(更改父节点,移动分支节点,删除节点或整个分支等)。
这里有两篇关于该主题的文章:将层次数据存储在数据库中 mysql
中的层次数据管理
last的事情,我没有尝试过,但是我在某个地方读到您可以在嵌套的表中有多个树,我的意思是几个根。
您应该使用
nested sets
parent-child
:SELECT *
FROM mytable
WHERE group IN
(
SELECT typeid
FROM group_types
START WITH
typeid = 1
CONNECT BY
parent = PRIOR typeid
)
将在
Oracle
Nested sets
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