2012-11-21 103 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文章。

相關問題