Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据库计算树结构,规则复杂_Sql_Sql Server_Database_Tree_Hierarchy - Fatal编程技术网

Sql 数据库计算树结构,规则复杂

Sql 数据库计算树结构,规则复杂,sql,sql-server,database,tree,hierarchy,Sql,Sql Server,Database,Tree,Hierarchy,我需要在数据库中映射计算树。 假设我有以下10个实体: id, name, unit 1, "Household", "USD" 2, "Household income", "USD" 3, "Household expences", "USD" 4, "Mother income job", "USD" 5, "Father income

我需要在数据库中映射计算树。

假设我有以下10个实体:

id, name,                          unit
1,  "Household",                   "USD"
2,  "Household income",            "USD"
3,  "Household expences",          "USD"
4,  "Mother income job",           "USD"
5,  "Father income",               "USD"
6,  "Father income job",           "USD"
7,  "Father income investment",    "USD"
8,  "Father investment portfolio", "USD"
9,  "Father investment yield",     "Percentage"
10, "Income from job",             "USD"
规则是每个实体要么是一个叶级,要么正好有两个子级

即:

  • 每一位家长正好有两个孩子
  • 每个孩子有一对多的父母
  • 每个实体有零个或两个子实体
  • 每个实体都有零个、一个或多个父实体
如果一个实体不在叶级(它有两个子级),它将有一个运算符(加号、减号、乘法或除法)

我需要的是:

1。数据结构。

2。列出实体的所有直接父级的查询。

对于“父亲收入工作”,结果应为:

3。为实体输出以下树状图的查询。

对于“家庭”,结果应为:

对于“父亲收入投资”,结果应为:

对于“工作收入”,结果应为:

Ekstra信息。

数据库:SQLServer2005

有一个为实体提供值的外部系统,但稍后将添加该系统,因此这超出了本问题的范围

计算树的规则是继承的,不能更改

真正的用例是一个有500多个实体的复杂系统

因为减法和除法是可能的,所以孩子们的顺序很重要


我可以处理从数据库外部正确插入的数据。也就是说,不需要进行约束或检查,以确保每个家长有两个孩子。

关系数据库是基于集合的,而不是基于树或图。我认为使用图形数据库会更好。@duffymo谢谢,但我只能访问SQL Server 2005:/Trees是递归的。您需要一个带有主键(当然)和一个指向自身的外键的表。至于规则,如果可能的话,它们应该表示为约束。我想您会发现这个实现很难、很复杂,而且很难维护。也许这个答案可以帮助您:
"Father income"
"Income from job"
level, name,                          unit,         operator
0,     "Household",                   "USD",        "Minus"
1,     "Household income",            "USD",        "Plus"
2,     "Mother income job",           "USD",        NULL
2,     "Father income",               "USD",        "Plus"
3,     "Father income job",           "USD",        NULL
3,     "Father income investment",    "USD",        "Multiply"
4,     "Father investment portfolio", "USD",        NULL
4,     "Father investment yield",     "Percentage", NULL
1,     "Household expences",          "USD",        NULL
level, name,                          unit,         operator
0,     "Father income investment",    "USD",        "Multiply"
1,     "Father investment portfolio", "USD",        NULL
1,     "Father investment yield",     "Percentage", NULL
level, name,                          unit,         operator
0,     "Income form job",             "USD",        "Plus"
1,     "Mother income job",           "USD",        NULL
1,     "Father income job",           "USD",        NULL