2012-11-21 75 views
1

我有一个原始表:数据库设计:两个表相同的列,但不同的外键

CREATE TABLE [dbo].[tblSalesOrderPayment] 
( 
    [PaymentID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL, 
    [SalesOrderID] [int] NOT NULL, 
    [PaymentType] [int] NOT NULL, 
    [AmountPaid] [decimal](18, 2) NOT NULL, 
    [AmountTendered] [decimal](18, 2) NOT NULL, 
    [PaymentDate] [datetime] NOT NULL, 
    [Cashier] [int] NOT NULL, 
    [PaymentStatus] [bit] NOT NULL 
) 

..我设计了另一台这样

CREATE TABLE [dbo].[tblReturnOrderPayment] 
( 
    [PaymentID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL, 
    [ReturnOrderID] [int] NOT NULL, 
    [PaymentType] [tinyint] NOT NULL, 
    [AmountPaid] [decimal](18, 2) NOT NULL, 
    [AmountTendered] [decimal](18, 2) NOT NULL, 
    [PaymentDate] [datetime] NOT NULL, 
    [Cashier] [int] NOT NULL, 
    [PaymentStatus] [bit] NOT NULL 
) 

..正如你所看到的它具有相同数量的列和类型,但它们具有不同的外键。 tblSalesOrderPayment从tblSalesOrder的SalesOrderID和tblReturnOrderPayment从tblReturnOrder ReturnOrderID。


  1. 一旦销售订单已经恢复,所有的付款细节应转移到tblReturnOrderPayment,但我需要从tblSalesOrderPayment保持记录以供参考。
  2. 而一旦销售订单已经恢复,日后的款项将会被保存到tblReturnOrderPayment。

应该是什么这些表进行正确的设计?

回答

1

在餐桌的设计水平,你应该问两个表是否包含数据不属于同一类型(类)。如果任一表中的一行是指同一类实体的实例,那么也许他们应该在同一个表,其中的标志字段说无论是返回与否。如果外键不属于给定行,请将其保留为空。

如果两种行属于同一类,但不同的子类,那么你有两种设计可供选择。这些被称为“单表继承”和“类表继承”。你可以在这里查找相应的标签,或者你可以在网络上查看ogle文章。

相关问题