帮助树状结构

时间:2010-03-15 22:01:03

标签: sql database-design data-structures tree

我有一些财务数据需要存储和操作。假设我有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

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

我想我的层次结构实际上就像是Division>城市> “电子”和“欧元”的货币仅仅是每个级别的实例,但我不太确定这有多大帮助或伤害。

一些注意事项:这是针对演示网站的,因此数据集不会很大 - 设置和维护的简便性比查询效率更重要。 (我实际上正在考虑手工构建一个数据对象,不过我更喜欢正确的方式。)另外,FWIW,我们正在使用ms访问后台的PHP工作 - 结束,所以任何在那个环境中使这个变得容易的库都会有所帮助。 (我已经找到了几个嵌套集模式的实现。)

2 个答案:

答案 0 :(得分:1)

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

如果您必须以不同的顺序显示数据,例如City>货币>师?这不是很麻烦吗?

您可以使用普通结构,使用分支表,一个用于城市,一个用于货币,然后使用一个Account表,其中Branch_ID,City_ID和Currency_ID作为外键。

答案 1 :(得分:0)

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

祝你好运!