【发布时间】:2026-02-01 11:05:01
【问题描述】:
我是数据库设计的新手,我只是想就我是否以合乎逻辑的方式处理这个问题提出一些意见。我正在构建一个简单的 MySQL 数据库,用户将通过该数据库将项目上传到以前存在的(不变的)分层树。
举个简单的例子:
第 1 节
1.1 部分
细分 1.1.1
细分 1.1.2
第 1.2 部分
细分 1.2.1
细分 1.2.2
第 2 节
第 2.1 节
细分 2.1.1
细分 2.1.2
第 2.2 节
细分 2.2.1
细分 2.2.2
树的结构不会改变,用户只需上传属于细分的产品(一种行业特定的方式来组织大量产品)。我已经对邻接列表和嵌套集进行了研究,但我倾向于使用 3 个单独的表,每个表都引用其父主键(因为树的顶层几乎永远不会改变)。上传新产品时,它将引用其所有三个父级(如果它在 1.1.2 小节下归档,则它必然是第 1 节第 1 节的一部分)。最终的树将有 4 个部分,每个部分有 10 个分区,每个分区有 10 个细分。这作为一个起始策略有意义吗?
与数据库的交互或多或少仅限于输入信息并对其进行准确分类,然后能够显示在任一部分、部门或细分中已归档的产品数量。该库将显示在一系列下拉列表中,单击列表项将显示存储的信息。
任何推荐或参考文献/教程将不胜感激!
【问题讨论】:
-
如果您永远不会拥有超过 3 个级别,那么您可以“便宜”并简单地拥有
(section_id, div_id, subdiv_id)并将其全部保存在一个表中。但是,它很容易受到像sec #1, div 2.1, subsec 1.1.1这样的层次结构错误的影响。 -
我同意 Marc B 的观点,您的结构在技术上是分层的,但它的结构不够动态,不足以保证高级数据结构。您可以通过简单的约束避免类别错误
-
非常感谢马克和大卫!大卫,你能扩展一下简单约束的含义吗? Marc B,如果所有产品都需要分配到一个小节(例如“Bill's Macintosh Apple Orchard”在 AmericanFruit>Apples>Macintosh 下归档),那么我是否正确地说我会有一张描述不变树的表,并且然后是第二个表,其中包含“Bill's Macintosh Apple Orchard”的特定信息和 id 以及对其父 subdiv_id 的引用?我希望这很清楚:)
标签: php mysql database hierarchy