树像数据库订单SQL

时间:2011-11-11 21:42:55

标签: sql tree 3-tier hierarchical

enter image description here![在此处输入图像描述] [2]我正在开发一个将创建三层结构的数据库。这个想法看起来像这样:

  • 第一级:Order
    • 主键 - OrderID
  • 第二级:OrderlineItemHeader
    • 主键 - OrderID
    • 主键 - OrderLineItemHeaderID
  • 第3级:OrderLineItem
    • PrimaryKey - OrderLineItemHeaderID
    • PrimaryKey - OrderLineItemSequence

问题是它不允许我在第二和第三级(OrderlineItemHeader.OrderLineItemHeaderIDOrderLineItem.OrderLineItemHeaderId)之间创建外键。我一直在阅读hierarchyid数据类型,但问题是它们将它们关联在同一个表中。我正在展示的是主要栏目,但每个表格中有五到十列需要的信息。

我正在使用SQL Server 2008,并且将它关联的程序将是VB.NET 4.我无法添加我的图表的图像,因为我是网站的新手。

再次使用食物示例进行说明:

您为拥有美国所有Restaraunts的Food Providor下了一份巨额订单。

下达的订单包含一个巨大的订单列表的一般信息。

OrderID,OrderNO,OrderDate

现在订单中有许多不同类型的食物,这是第二级。

比萨饼,鸡肉,肉类,鱼类。

你订购了1000个,你需要知道什么时候到来。

所以他们给你这些信息,你需要告诉每个人在吃饭时会吃东西。

所以从比萨开始你将有100个星期二乘飞机来。下周将有500人来到水中。其余的陆地在2周内完成。

今天肉类有500人即将到来,但由于他们没有更多的准备,其余的日期缺货。

因此所有这些信息都需要放在tablkes中,因此需要3层模型

2 个答案:

答案 0 :(得分:1)

此外还有很多其他工作,但这是基于我们目前讨论的基本概念:

enter image description here

修改

基于讨论的第二个图表(保留历史记录中的旧图表)

enter image description here

答案 1 :(得分:0)

在原始问题陈述中,您有:

3rd Level : OrderLineItem table
PrimaryKey - OrderLineItemHeaderID
PrimaryKey - OrderLineItemSequence

为了创建OrderLineHeader的外键,必须包含完整的PK,所以你需要:

3rd Level : OrderLineItem table
PrimaryKey - OrderID
PrimaryKey - OrderLineItemHeaderID
PrimaryKey - OrderLineItemSequence

但如果所有ID都是人为的,那么更好的解决方案可能是:

1st level: Order table
Primary Key - OrderID

2nd Level: OrderlineItemHeader table
Primary Key - OrderLineItemHeaderID
Foreign Key - OrderID

3rd Level : OrderLineItem table
Primary Key - OrderLineItemID
Foreign Key - OrderLineItemHeaderID