递归关系的实现

时间:2018-10-08 08:29:33

标签: sql sql-server

因此,我目前正在使用mssql服务器管理器,但遇到了问题。

我需要实现一个递归关系,而且我似乎并没有使其没有冗余的方式工作。

该问题发生在下表上: 我有一张桌子:“订单”, 一个订单可以有多个“子订单”

现在,我不知道如何在mssql中以没有冗余的方式来实现它。

对不起,我的描述不好等等。这是我第一次出现堆栈溢出,但我还是编程的新手。

谢谢。

编辑: 冗余意味着数据库可以多次保存数据。

在这种情况下,这意味着。主订单将被多次保存到数据库中,因为其中有多个子订单。

示例:

INSERT INTO order (order_id, order_name, suborder) VALUES (1, Intel, Network);
INSERT INTO order (order_id, order_name, suborder) VALUES (1, Intel, Finance);
INSERT INTO order (order_id, order_name, suborder) VALUES (1, Intel, Datamodel);
INSERT INTO order (order_id, order_name, suborder) VALUES (2, AMD, null);
INSERT INTO order (order_id, order_name, suborder) VALUES (3, NMI, null);

通过这种方式,它可以多次保存order_id和order_name,而这正是应该发生的情况。

1 个答案:

答案 0 :(得分:1)

您需要更多表来建立主子关系
查找术语Normalization,并详细了解

例如

 table Client (ClientID, Name, Addres, ...)

 table Article (ArticleID, Name, Stock, ...)

 table Order (OrderID, ClientID, DeliveryAddress, ...)

 table SubOrder (SubOrderID, OrderID, ArticleID, Quantity, ...)

在此设计中,订单数据仅保存一次,并且每个子订单仅保存OrderID以维持其与订单的关系。
此外,有关客户和文章的数据仅保存一次,只有ID的保存多次

在此示例中,我使用了诸如ClientIDArticleID之类的键名,您会发现经常使用名称ID来代替。这只是为了使示例中的关系更清楚