我已经在各种数据库中看到了这一点,但我将使用最新的示例。在AdventurWorks2012 数据库中,有
- 采购订单标头
- 采购订单详情
和
- 销售订单页眉
- 销售订单详情
我试图理解当您可以将所有信息放在一个表而不是两个表中时,为什么会有这种设置的概念。对不起,我对这种类型的设置缺乏了解。我想确保当我创建新表时,我想知道这种类型的设计,这将如何工作类似于我可能合并以使用 Header 和 Detail 将数据输入捕获到表中以及原因。
例如
- 当前的日期
- 这个月
- 本财政年度
- 公司编号
- 修订号
- 服务产品 1 金额
- 服务产品 2 金额
- 服务产品 3 金额
- 服务产品 4 金额
- 服务产品 5 金额
- 总金额(以上 6-10 项总和)
- 认证日期
- 认证官
- 提交日期
希望我的问题很清楚。
=======================
通过我对@Szymon 的回复,编辑了使用 Header/Detail 设置的详细示例
在我上面的示例中,将其布局为 Header/Detail 设置。提交记录时,它会生成一个 ID 所以我的 Header Table 看起来像:
标题表
1, '11/13/13',11,2013,'000001',0,10.00,'11/12/13','总统','查克','11/12/13'
然后在我的详细信息表中它也会生成一个 ID,但使用以前的记录作为 FK,它看起来像这样...... 1(新 ID),1(以前的 Header Table 的 FK),2(作为服务产品 1) , 2 (作为服务产品 2), 2 (作为服务产品 3), 2 (作为服务产品 4), 2 (作为服务产品 5)
明细表
1,1,2.00,2.00,2.00,2.00,2.00
====================================================
再次修订:提供更好的后续示例。
WKS_Header 表:(PK 为 WKS_Header_ID)
WKS_Header_ID [int] IDENTITY(1,1) NOT NULL,
Company_ID [varchar](6) NOT NULL,
Current_Date [DateTime] NOT NULL,
Current_Month [int] NOT NULL,
Current_Fiscal_Year [int] NOT NULL,
Revision_Number [int] NOT NULL,
Worksheet_ID [varchar] (13) NOT NULL,
Total_Amt [money] NOT NULL,
Certification_Date [DateTime] NOT NULL,
Certification_Officer [varchar] (50) NOT NULL,
Submission_Date [DateTime] NOT NULL
WKS_Header 表的样本记录:
1,'000001','11/5/13',11,2013,0,'0000001111300',20.00,'11/1/13','Chuck','11/2/13'
2,'000001','11/7/13',11,2013,1,'0000001111301',10.00,'11/4/13','Chuck','11/5/13'
3,'000500','11/10/13',11,2013,0,'0005001111300',50.00,'11/5/13','Bob','11/7/13'
WKS_LineItems 表:(PK 为 WKS_LineItems_ID)
WKS_LineItems_ID [int] IDENTITY(1,1) NOT NULL,
LineItem_Description [varchar] (50) NOT NULL,
Create_User_ID [varchar] (50) NOT NULL,
Create_Date [datetime] NOT NULL,
Modify_User_ID [varchar] (50) NOT NULL,
Modify_Date [datetime] NOT NULL
WKS_LineItems 表示例
1,'Service Product Widget A Amount','Admin','10/1/13',Null,Null
2,'Service Product Widget B Amount','Admin','10/1/13',Null,Null
3,'Service Product Widget C Amount','Admin','10/1/13',Null,Null
4,'Service Product Widget D Amount','Admin','10/1/13',Null,Null
5,'Service Product Widget E Amount','Admin','10/1/13',Null,Null
6,'Final Total Widgets Amount','Admin','10/1/13',Null,Null
WKS_Details 表:(PK 是 WKS_Details_ID,FK 是 WKS_Header 表中的 WKS_Header_ID)
WKS_Details_ID IDENTITY(1,1) NOT NULL,
WKS_Header_ID [int] NOT NULL,
WKS_LineItems_ID [int] NOT NULL,
WKS_Amount [decimal] (18,2) NOT NULL,
Create_User_ID [varchar] (50) NOT NULL,
Create_Date [datetime] NOT NULL
WKS_Details 表示例
1,1,1,4.00,'Chuck','11/5/13'
2,1,2,0.00,'Chuck','11/5/13'
3,1,3,0.00,'Chuck','11/5/13'
4,1,4,5.00,'Chuck','11/5/13'
5,1,5,11.00,'Chuck','11/5/13'
6,1,6,20.00,'Chuck','11/5/13'
7,2,1,0.00,'Chuck','11/7/13'
8,2,2,0.00,'Chuck','11/7/13'
9,2,3,0.00,'Chuck','11/7/13'
10,2,4,0.00,'Chuck','11/7/13'
11,2,5,0.00,'Chuck','11/7/13'
12,2,6,10.00,'Chuck','11/7/13'
13,3,1,10.00,'Bob','11/10/13'
14,3,2,10.00,'Bob','11/10/13'
15,3,3,10.00,'Bob','11/10/13'
16,3,4,10.00,'Bob','11/10/13'
17,3,5,10.00,'Bob','11/10/13'
18,3,6,50.00,'Bob','11/10/13'
场景:从表单输入信息。它在 WKS_Header 表中创建 3 条记录,并将相关的详细记录记录到 WKS_Details 表中。
记录 ID 1 是原始提交,然后该用户需要修改数字。该用户输入另一条记录。即记录 ID 2,是取代记录 ID 1 的修订提交。记录 ID 3 是原始提交。
我是否正确地将其标准化?