Sql 从N维表创建关系数据库

Sql 从N维表创建关系数据库,sql,database,database-design,relational-database,Sql,Database,Database Design,Relational Database,我有一堆函数,它们有许多输入参数,但相对较少的唯一输出,我正试图将输出制成表格,以便查看输入。通常,对于给定的函数,我会有一组2D表,其中包含一些确定要查看哪个表的规则。例如,如果某个变量的值小于1,我应该看表1,但如果该变量大于或等于1,我应该看表2以确定输出(但更典型的是,要使用的表将取决于5或6个变量的值)。还有一个问题-表2和表1不一定有相同的行和列 到目前为止,我的解决方案是创建平面文件表,其中包含所有表的所有信息(因此我最终得到一个复杂的大表),表中的值在表末尾的一列中表示(在此之前

我有一堆函数,它们有许多输入参数,但相对较少的唯一输出,我正试图将输出制成表格,以便查看输入。通常,对于给定的函数,我会有一组2D表,其中包含一些确定要查看哪个表的规则。例如,如果某个变量的值小于1,我应该看表1,但如果该变量大于或等于1,我应该看表2以确定输出(但更典型的是,要使用的表将取决于5或6个变量的值)。还有一个问题-表2和表1不一定有相同的行和列

到目前为止,我的解决方案是创建平面文件表,其中包含所有表的所有信息(因此我最终得到一个复杂的大表),表中的值在表末尾的一列中表示(在此之前的所有列中都表示输入)。因为不是所有的表都是相同的,这意味着我有很多零或空格(其中一个表不适用)。这个解决方案适用于我的目的,但是当我尝试将更多的函数制成表格时,表格变得越来越复杂,有人能够轻松地检查和验证表格值是非常重要的。我希望有一种更清晰的方式使用关系数据库来表示信息,但我不确定这是否会让事情变得更清晰。使用我的分类平面文件到目前为止已经相当清楚了,但随着表格变得越来越复杂,人类阅读变得越来越困难,问题开始出现

我研究过数据库设计原则,但我发现所有的介绍性材料都使用了比我简单得多的示例,我不知道如何扩展我所读的内容以满足我的需要。我的理解是,如果我的函数有N个输入,那么我需要N+1个表来创建关系数据库;所以我不确定这会让事情变得更清楚还是不那么清楚。我希望这是数据库专家的一个常见问题,希望有人能给我一些建议

编辑:

已经要求了一个例子,所以我编了一个与我的问题类似的例子。假设我想算出某一天衣服的价格。我有三个2D表格,提供了这些信息:

2010年1月1日之前:

+--------+----------+----------+----------+----------+
|        | Fabric A | Fabric B | Fabric C | Fabric D |
+--------+----------+----------+----------+----------+
| Size S |        1 |        2 |        3 |        4 |
| Size M |        5 |        6 |        7 |        8 |
| Size L |        9 |       10 |       11 |       12 |
+--------+----------+----------+----------+----------+
2010年1月1日之后:

+--------+----------+----------+----------+----------+
|        | Fabric A | Fabric B | Fabric C | Fabric D |
+--------+----------+----------+----------+----------+
| Size S |        1 |        2 |        3 |        4 |
| Size M |        5 |        6 |        7 |        8 |
| Size L |        9 |       10 |       11 |       12 |
+--------+----------+----------+----------+----------+
如果设计者是p:

+--------+------------+------------+------------+
|        | Location X | Location Y | Location Z |
+--------+------------+------------+------------+
| Size S |          1 |          2 |          3 |
| Size M |          5 |          6 |          7 |
| Size L |          9 |         10 |         11 |
+--------+------------+------------+------------+
如果设计师是Q:

+--------+------------+------------+------------+
|        | Location X | Location Y | Location Z |
+--------+------------+------------+------------+
| Size S |          2 |          2 |          3 |
| Size M |          4 |          5 |          5 |
| Size L |          6 |          7 |          8 |
+--------+------------+------------+------------+
这是三张桌子。我所做的是创建一个表,如下所示:

+------------+----------+------+--------+----------+-------+
|    Date    | Designer | Size | Fabric | Location | Price |
+------------+----------+------+--------+----------+-------+
| 01/01/2010 | P        | L    | A      | X        |     6 |
| 01/01/2010 | P        | L    | A      | Y        |     7 |
| 01/01/2010 | P        | L    | A      | Z        |     8 |
| 01/01/2010 | P        | L    | B      | X        |     6 |
| 01/01/2010 | P        | L    | B      | Y        |     7 |
| 01/01/2010 | P        | L    | B      | Z        |     8 |
| 01/01/2010 | P        | L    | C      | X        |     6 |
| 01/01/2010 | P        | L    | C      | Y        |     7 |
| 01/01/2010 | P        | L    | C      | Z        |     8 |
| 01/01/2010 | P        | L    | D      | X        |     6 |
| 01/01/2010 | P        | L    | D      | Y        |     7 |
| 01/01/2010 | P        | L    | D      | Z        |     8 |
| 01/01/2010 | P        | M    | A      | X        |     4 |
| 01/01/2010 | P        | M    | A      | Y        |     5 |
| 01/01/2010 | P        | M    | A      | Z        |     5 |
| 01/01/2010 | P        | M    | B      | X        |     4 |
| 01/01/2010 | P        | M    | B      | Y        |     5 |
| 01/01/2010 | P        | M    | B      | Z        |     5 |
| 01/01/2010 | P        | M    | C      | X        |     4 |
| 01/01/2010 | P        | M    | C      | Y        |     5 |
| 01/01/2010 | P        | M    | C      | Z        |     5 |
| 01/01/2010 | P        | M    | D      | X        |     4 |
| 01/01/2010 | P        | M    | D      | Y        |     5 |
| 01/01/2010 | P        | M    | D      | Z        |     5 |
| 01/01/2010 | P        | S    | A      | X        |     2 |
| 01/01/2010 | P        | S    | A      | Y        |     2 |
| 01/01/2010 | P        | S    | A      | Z        |     3 |
| 01/01/2010 | P        | S    | B      | X        |     2 |
| 01/01/2010 | P        | S    | B      | Y        |     2 |
| 01/01/2010 | P        | S    | B      | Z        |     3 |
| 01/01/2010 | P        | S    | C      | X        |     2 |
| 01/01/2010 | P        | S    | C      | Y        |     2 |
| 01/01/2010 | P        | S    | C      | Z        |     3 |
| 01/01/2010 | P        | S    | D      | X        |     2 |
| 01/01/2010 | P        | S    | D      | Y        |     2 |
| 01/01/2010 | P        | S    | D      | Z        |     3 |
| 01/01/2010 | Q        | L    | A      | X        |     9 |
| 01/01/2010 | Q        | L    | A      | Y        |    10 |
| 01/01/2010 | Q        | L    | A      | Z        |    11 |
| 01/01/2010 | Q        | L    | B      | X        |     9 |
| 01/01/2010 | Q        | L    | B      | Y        |    10 |
| 01/01/2010 | Q        | L    | B      | Z        |    11 |
| 01/01/2010 | Q        | L    | C      | X        |     9 |
| 01/01/2010 | Q        | L    | C      | Y        |    10 |
| 01/01/2010 | Q        | L    | C      | Z        |    11 |
| 01/01/2010 | Q        | L    | D      | X        |     9 |
| 01/01/2010 | Q        | L    | D      | Y        |    10 |
| 01/01/2010 | Q        | L    | D      | Z        |    11 |
| 01/01/2010 | Q        | M    | A      | X        |     5 |
| 01/01/2010 | Q        | M    | A      | Y        |     6 |
| 01/01/2010 | Q        | M    | A      | Z        |     7 |
| 01/01/2010 | Q        | M    | B      | X        |     5 |
| 01/01/2010 | Q        | M    | B      | Y        |     6 |
| 01/01/2010 | Q        | M    | B      | Z        |     7 |
| 01/01/2010 | Q        | M    | C      | X        |     5 |
| 01/01/2010 | Q        | M    | C      | Y        |     6 |
| 01/01/2010 | Q        | M    | C      | Z        |     7 |
| 01/01/2010 | Q        | M    | D      | X        |     5 |
| 01/01/2010 | Q        | M    | D      | Y        |     6 |
| 01/01/2010 | Q        | M    | D      | Z        |     7 |
| 01/01/2010 | Q        | S    | A      | X        |     1 |
| 01/01/2010 | Q        | S    | A      | Y        |     2 |
| 01/01/2010 | Q        | S    | A      | Z        |     3 |
| 01/01/2010 | Q        | S    | B      | X        |     1 |
| 01/01/2010 | Q        | S    | B      | Y        |     2 |
| 01/01/2010 | Q        | S    | B      | Z        |     3 |
| 01/01/2010 | Q        | S    | C      | X        |     1 |
| 01/01/2010 | Q        | S    | C      | Y        |     2 |
| 01/01/2010 | Q        | S    | C      | Z        |     3 |
| 01/01/2010 | Q        | S    | D      | X        |     1 |
| 01/01/2010 | Q        | S    | D      | Y        |     2 |
| 01/01/2010 | Q        | S    | D      | Z        |     3 |
| 01/01/1900 | P        | L    | A      | X        |     9 |
| 01/01/1900 | P        | L    | A      | Y        |     9 |
| 01/01/1900 | P        | L    | A      | Z        |     9 |
| 01/01/1900 | P        | L    | B      | X        |    10 |
| 01/01/1900 | P        | L    | B      | Y        |    10 |
| 01/01/1900 | P        | L    | B      | Z        |    10 |
| 01/01/1900 | P        | L    | C      | X        |    11 |
| 01/01/1900 | P        | L    | C      | Y        |    11 |
| 01/01/1900 | P        | L    | C      | Z        |    11 |
| 01/01/1900 | P        | L    | D      | X        |    12 |
| 01/01/1900 | P        | L    | D      | Y        |    12 |
| 01/01/1900 | P        | L    | D      | Z        |    12 |
| 01/01/1900 | P        | M    | A      | X        |     5 |
| 01/01/1900 | P        | M    | A      | Y        |     5 |
| 01/01/1900 | P        | M    | A      | Z        |     5 |
| 01/01/1900 | P        | M    | B      | X        |     6 |
| 01/01/1900 | P        | M    | B      | Y        |     6 |
| 01/01/1900 | P        | M    | B      | Z        |     6 |
| 01/01/1900 | P        | M    | C      | X        |     7 |
| 01/01/1900 | P        | M    | C      | Y        |     7 |
| 01/01/1900 | P        | M    | C      | Z        |     7 |
| 01/01/1900 | P        | M    | D      | X        |     8 |
| 01/01/1900 | P        | M    | D      | Y        |     8 |
| 01/01/1900 | P        | M    | D      | Z        |     8 |
| 01/01/1900 | P        | S    | A      | X        |     1 |
| 01/01/1900 | P        | S    | A      | Y        |     1 |
| 01/01/1900 | P        | S    | A      | Z        |     1 |
| 01/01/1900 | P        | S    | B      | X        |     2 |
| 01/01/1900 | P        | S    | B      | Y        |     2 |
| 01/01/1900 | P        | S    | B      | Z        |     2 |
| 01/01/1900 | P        | S    | C      | X        |     3 |
| 01/01/1900 | P        | S    | C      | Y        |     3 |
| 01/01/1900 | P        | S    | C      | Z        |     3 |
| 01/01/1900 | P        | S    | D      | X        |     4 |
| 01/01/1900 | P        | S    | D      | Y        |     4 |
| 01/01/1900 | P        | S    | D      | Z        |     4 |
| 01/01/1900 | Q        | L    | A      | X        |     9 |
| 01/01/1900 | Q        | L    | A      | Y        |     9 |
| 01/01/1900 | Q        | L    | A      | Z        |     9 |
| 01/01/1900 | Q        | L    | B      | X        |    10 |
| 01/01/1900 | Q        | L    | B      | Y        |    10 |
| 01/01/1900 | Q        | L    | B      | Z        |    10 |
| 01/01/1900 | Q        | L    | C      | X        |    11 |
| 01/01/1900 | Q        | L    | C      | Y        |    11 |
| 01/01/1900 | Q        | L    | C      | Z        |    11 |
| 01/01/1900 | Q        | L    | D      | X        |    12 |
| 01/01/1900 | Q        | L    | D      | Y        |    12 |
| 01/01/1900 | Q        | L    | D      | Z        |    12 |
| 01/01/1900 | Q        | M    | A      | X        |     5 |
| 01/01/1900 | Q        | M    | A      | Y        |     5 |
| 01/01/1900 | Q        | M    | A      | Z        |     5 |
| 01/01/1900 | Q        | M    | B      | X        |     6 |
| 01/01/1900 | Q        | M    | B      | Y        |     6 |
| 01/01/1900 | Q        | M    | B      | Z        |     6 |
| 01/01/1900 | Q        | M    | C      | X        |     7 |
| 01/01/1900 | Q        | M    | C      | Y        |     7 |
| 01/01/1900 | Q        | M    | C      | Z        |     7 |
| 01/01/1900 | Q        | M    | D      | X        |     8 |
| 01/01/1900 | Q        | M    | D      | Y        |     8 |
| 01/01/1900 | Q        | M    | D      | Z        |     8 |
| 01/01/1900 | Q        | S    | A      | X        |     1 |
| 01/01/1900 | Q        | S    | A      | Y        |     1 |
| 01/01/1900 | Q        | S    | A      | Z        |     1 |
| 01/01/1900 | Q        | S    | B      | X        |     2 |
| 01/01/1900 | Q        | S    | B      | Y        |     2 |
| 01/01/1900 | Q        | S    | B      | Z        |     2 |
| 01/01/1900 | Q        | S    | C      | X        |     3 |
| 01/01/1900 | Q        | S    | C      | Y        |     3 |
| 01/01/1900 | Q        | S    | C      | Z        |     3 |
| 01/01/1900 | Q        | S    | D      | X        |     4 |
| 01/01/1900 | Q        | S    | D      | Y        |     4 |
| 01/01/1900 | Q        | S    | D      | Z        |     4 |
+------------+----------+------+--------+----------+-------+
我不能把小桌子用在我的目的上(我不认为),但我可以很容易地用大桌子。然而,这引入了第二个要求:其他人现在需要能够定期检查大表是否完全包含小表中的所有信息。对于某人来说,检查大表中的给定价格是否与相应小表中的价格一致并不难,但随着我们添加更多的表和更多的参数,发现其他问题(例如,缺少条目)变得非常困难。需要回答的问题是“能否使用大表正确查找一件衣服的所有可能价格?”

我目前的想法是,我想建立一个很容易检查的小表,也许可以自动化生成大表的过程,以便过程中的信心=>大表中的信心。我还想知道,我是否需要大表来执行我希望能够执行的查找,或者是否有一种聪明的方法来直接从小表中获取输出(可能使用聪明的数据库设计?)

也许这只是一个困难的问题,但我想知道是否有一个解决方案明显优于其他解决方案

编辑:

感谢到目前为止的所有评论。不幸的是,我正在努力理解一些答案,而问题似乎仍然太模糊,无法正确回答。我将尝试在前面给出的例子中充实我的问题

在我上面的服装示例中,我是说一件衣服的价格通常是销售日期、销售地点、设计师、尺寸和面料的函数。我创建了一个表来表示这些输入和价格之间的关系

然而,此表中的许多行并没有从所有列中受益——例如,对于2010年1月1日之前售出的任何产品,都不依赖于designer。为了在我的大表中对其进行编码,我必须添加许多额外的行,以确保在2010年1月1日之前售出的任何产品都能为designer P提供与designer Q相同的答案,以用于任何其他输入组合。这似乎效率低下,但我不确定如何(或是否)更好地表述这一点。我试图理解标准化的过程,但我很难看到这对这个服装示例的效果——而且,我不确定标准化是否会让表格更清晰(因为这是我现在的主要目标)

作为一个额外的业务限制,我可以随时收到更多关于价格的信息,或者新的定价方法。因此,完全可以想象,我可能需要向我的大表中添加更多的输入(列),并加载更多的行,以捕获价格现在如何依赖于每个输入,即使这只会导致一个或两个不同的新价格点。在我的例子中,我有三张小桌子,但实际上我有数百张。这是大量的信息,没有办法解决,但我相信有一种方法可以做到这一点,它既不需要数百个小表,也不需要一个大表中数千个基本上冗余的行。我只是努力想看看我会如何打破它。有没有更清晰的方法来分解它
+------+--------+------+----------+----------+
| Size | Fabric | Price| Designer |   After  |
+------+--------+------+----------+----------+
|    S |      A |    1 |        P | 1/1/2010 |
|    S |      A |    1 |        P | 1/1/2010 |
...
|    L |      D |   12 |        P | 1/1/2010 |
+------+--------+------+----------+----------+
+------+--------+-------+----------+----------+
| Size | Fabric | Price | Designer |   After  |
+------+--------+-------+----------+----------+
|    S |      A |     1 |        P | 1/1/2010 |
...
|    M |      D |     8 |        Q | 1/1/1900 |
...
+------+--------+-------+----------+----------+
+-------+----------+----------+
| Price | Designer |   After  |
+-------+----------+----------+
|     1 |        P | 1/1/2010 |
...
|     8 |        Q | 1/1/1900 |
...
+-------+----------+----------+