【问题标题】:help with tree-like structure帮助树状结构
【发布时间】:2010-03-15 22:01:03
【问题描述】:

我有一些财务数据要存储和操作。假设我有 2 个部门,在 2 个城市设有办事处,使用 2 种货币和 4 个银行账户。 (实际上比这更复杂。)我想显示一个这样的列表:

Electronics
    Chicago
        Dollars
            Account 2 -> transactions in acct2 in $ in chicago/electronics
        Euros
            Account 1 -> transactions in acct1 in E in chicago/electronics
            Account 3 -> etc.
            Account 4
    Brussles
        Dollars
            Account 1
        Euros
            Account 3
            Account 4
Dessert Toppings
    Chicago
        Dollars
            Account 1
            Account 4
        Euros
            Account 2
            Account 4
    Brussles
        Dollars
            Account 2
        Euros
            Account 3
            Account 4

因此,在除顶部之外的每个级别,该类别都可以出现在多个位置。我一直在readingaround 讨论各种方法,但这些示例似乎都没有解决我的特定用例,其中节点可以出现在层次结构中的多个位置。 (也许这个名称不同于“树”或“层次结构”。)

我想我的层次结构实际上类似于部门 > 城市 > 货币,其中“电子”和“欧元”只是每个级别的实例,但我不太确定这有什么帮助或伤害。

一些注意事项:这是一个演示站点,所以数据集不会很大——易于设置和维护比查询效率更重要。 (我实际上正在考虑仅手动构建一个数据对象,尽管我更愿意以正确的方式。)另外,FWIW,我们正在使用 php 并具有 ms 访问权限-最后,因此在该环境中使这变得容易的任何库都会有所帮助。 (我已经找到了嵌套集合模式的几个实现。)

【问题讨论】:

    标签: sql database-design data-structures tree


    【解决方案1】:

    您确定要为此使用分层设计吗?对我来说,层次结构似乎更多是所需输出格式的结果,而不是数据结构固有的结果。

    如果您必须以不同的顺序显示数据,例如城市 > 货币 > 部门,该怎么办?会不会很麻烦?

    您可以改为使用简单的结构,其中一张表用于 Branches,一张用于 Cities,一张用于 Currencies,然后是一张 Account 表,其中 Branch_ID、City_ID 和 Currency_ID 作为外键。

    【讨论】:

    • 这也是我得出的结论,至少在这些领域是这样。对“任意嵌套组”有一个模糊的要求,但在决定如何实施它们之前,我必须了解更多关于这真正含义的细节......
    【解决方案2】:

    我不确定您使用的是什么数据库平台。但是,如果您使用的是 MS SQL Server,那么您应该查看 使用公用表表达式的递归查询 (CTE)。它们易于使用,并且专为您所说明的情况类型而设计(例如材料清单)。查看此网站了解更多详情:http://www.mssqltips.com/tip.asp?tip=1520

    祝你好运!

    【讨论】:

    • 很遗憾,我们使用的是 MS Access。
    猜你喜欢
    • 2018-10-04
    • 1970-01-01
    • 2021-12-03
    • 2011-10-11
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多