如何在数据库中对此类进行建模?

我需要一点帮助。 这是我设计的几个类别。

Category 1 Sub Category 1.1 Sub Category 1.1.1 Sub Category 1.2 Sub Category 1.3 

这将是一个集合。 我想将它存储在数据库中,但我不知道如何在数据库表中对其进行建模。 我正在使用SQL Server CE。

在此处输入图像描述

更新

我忘了把目标号放在class上(1.1,1.1.1)。

你有一个像这样的表:

  • 类别
    • id(主键,非null)
    • name(text,not null)
    • parent_category_id(category.id的外键,可为空)

然后,如果某个类别具有父级,则引用该另一行的id 。 因此该表是自我指涉的。 Toplevel类别具有null parent_category_id

在构建这样的表时,您需要注意不要创建循环引用。

我会使用一个简单的递归关系 。 每个类别应具有唯一ID(主键)和指定其父级的可选字段,该字段将是映射回同一表的外键。 具有NULL父级的类别是顶级类别。

我链接到的页面还提供了有关如何查询此结构以查找顶级或中级类别的信息。

为此,您可以拥有一个表,其中项可以引用其父项(如果有)。

在此处输入图像描述

如果ParentId列为NULL ,则类别为根类别。 如果不是,则引用父级。

然后,您可以通过遍历表格并搜索ParentId等于该类别的Id的项目来查找类别的子类别。

请注意,必须将ParentId编入索引以获得更好的性能,并且必须有ParentIdId的外键才能确保数据的有效性。

递归存储类别:

 private void SaveCategoryRecursively(Category category) { foreach (var subCategory in category.SubCategories) { query(@" insert into [dbo].[Categories] ([Id], [ParentId], ...) values (@id, @parentId, ...)", ...); this.SaveCategoryRecursively(subCategory); } } public void SaveCategories(IEnumerable rootCategories) { foreach (var category in rootCategories) { query(@" insert into [dbo].[Categories] ([Id], [ParentId], ...) values (@id, NULL, ...)", ...); this.SaveCategoryRecursively(category); } } 

这是我的建议。 创建三个表。 我假设每个表都有不同的列

 Category { Id, Name,...} SubCategory {Id, Name, ..., **ParentID**} [ParentID is a FK from Category table Id Column] SubSubCategory {Id, Name, ..., **SubParentID**} [SubParentID is a FK from SubCategory table ParentID Column]