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 に保存されます。

これらのテーブルの適切な設計は何ですか?

4

1 に答える 1

1

テーブル設計レベルでは、2 つのテーブルに同じタイプ (クラス) のデータが含まれているかどうかを確認する必要があります。いずれかのテーブルの行がエンティティの同じクラスのインスタンスを参照している場合、それらはおそらく同じテーブルにあり、返されるかどうかを示すフラグ フィールドが必要です。外部キーが特定の行に関連しない場合は、null のままにします。

2 種類の行が同じクラスに属しているがサブクラスが異なる場合、2 つのデザインから選択できます。これらを「単一テーブル継承」「クラステーブル継承」と呼びます。SO で対応するタグを検索するか、Web 上の目を見張るような記事を参照してください。

于 2012-11-21T12:09:39.893 に答える