我的数据有章节和子章节和项目 任何项目都需要在章节或子章节下。 这些章节可以分为多个层次(章节 - >子章节 - >子章节......)。
每一章都有一个数字,我需要显示每个项目和章节的路径。
example :
---------------------
01 - chapter 1
01.0001 - item 1
01.001 - sub chapter 1
01.001.0001 - item 1
01.001.0002 - item 2
01.002 - sub chapter 2
01.003 - sub chapter 3
01.003.0001 - item 1
我认为将章节保存在一个表格中,将项目保存在另一个表格中,因为项目具有其他属性(价格,类型......)
任何章节都有父ID。
任何想法?
答案 0 :(得分:1)
在DB系统中存储树结构并非易事。通常会出现的第一件事是ParentId。如果您具有较小且固定数量的级别,则此解决方案可以。问题是为这种类型的表编写查询并不是那么简单。您必须递归查询(对于动态的级别数)或者您必须编写多个联接(对于固定数量的级别)。我建议使用varchar Path列而不是ParentId列。让我们看看例子:
CREATE TABLE Chapters (
ID PRIMARY KEY,
Path VARCHAR(1000),
Title VARCHAR(255) NOT NULL
);
数据示例:
| Id | Path | Title |
|------------|-------------|-----------------|
| 1 | 1/ | Chapter 1 |
| 2 | 1/2/ | Chapter 1.1 |
| 3 | 1/2/3 | Chapter 1.1.1 |
| 4 | 1/4/ | Chapter 1.2 |
| 5 | 1/4/5 | Chapter 1.2.1 |
| 6 | 1/4/5/6 | Chapter 1.2.1.1 |
然后查询第1章的所有后代写:
SELECT *
FROM Chapters AS c
WHERE c.Path LIKE '1/' || '%';
选择第1.1.1章的所有祖先写:
SELECT *
FROM Chapters AS c
WHERE '1/2/3/' LIKE c.Path || '%';