sql - 如何在数据库中存储级联类别

标签 sql sql-server database stored-procedures categories

我在存储多个分类数据时遇到问题。一个类别可以具有任意大小的级联深度。我认为创建更多具有关系的表不是一个好主意。存储此类分类数据的最佳方式是什么。

ex categories:
 -MainCategory1
     -subcategory1
            -subcategory11
            -subcategory12
            -subcategory13
                   --subcategory131
     -subcategory2
            -subcategory21
            -subcategory22
                   -subcategory221
            -subcategory23
                   -subcategory231
                        -subcategory2311
 -MainCategory2
     -subcategory21
            -subcategory211
                   -subcategory2131
                        -subcategory2131
            -subcategory212
            -subcategory213
                   -subcategory2131

最佳答案

一种常见的做法是创建一个表,其中每个类别都有一个 ID、一个名称和一个父 ID(顶级类别的父 ID 为 null):

CREATE TABLE categories (
     id NUMERIC PRIMARY KEY,
     name VARCHAR(100),
     parent_id NUMERIC FOREIGN KEY REFERENCES categories(Id)
)

您的一些数据例如如下所示:

INSERT INTO categories VALUES (1, 'MainCategory1', null);
INSERT INTO categories VALUES (2, 'subcategory1', 1);

关于sql - 如何在数据库中存储级联类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24823655/

相关文章:

c# - Entity Framework 如何使用带有谓词函数的 LINQ 检索行?

sql - 为什么此代码在 PostgreSQL 中失败以及如何修复它(解决方法)?是 Postgres SQL 引擎缺陷吗?

sql - SQL Server 2008 R2 的 Try_Convert

mysql - 当表达式不涉及列时,查询优化器是否将表达式转换为常量

c# - 在 Entity Framework 中重复创建和删除数据库

java - 液碱 : link main yaml changelog from test

mysql - Varchar类型和性能问题

sql-server - 从 SQL Server 查询结果中删除列标题

arrays - 如何获取数组的最后 25 项?

sql - 使用 SQL Server 作为具有多个客户端的数据库队列