如何在数据库中对此类进行建模?
我需要一点帮助。 这是我设计的几个类别。
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
编入索引以获得更好的性能,并且必须有ParentId
到Id
的外键才能确保数据的有效性。
递归存储类别:
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]
- 代表行动
- 如何使用DataContext.ExecuteCommand并获取执行的存储过程返回值?
- 如何使用nuget package explorer创建一个包含release和debug dll的nuget包?
- 在C#中,如何读取存储在web.config文件连接字符串中的连接字符串?
- 如何在C#中更改Windows窗体上Groupbox的边框粗细?
- LINQ查询执行投射,跳过或包装exception,其中源抛出IEnumerable.GetNext()
- InternetSetCookie不会在临时Internet文件中存储cookie
- ReactiveUI(RxUI)与Reactive Extensions
- 如何通过SOCKS代理将文件上传到FTP服务器?