我有一张原始表:
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。
这些表的正确设计应该是什么?
答案 0 :(得分:1)
在表设计级别,您应该询问这两个表是否包含相同类型(类)的数据。如果任一表中的一行引用同一类实体的实例,那么它们可能应该在同一个表中,并带有一个标志字段来说明它是否被返回。如果外键不属于给定行,则将其保留为空。
如果这两种行属于同一个类但属于不同的子类,那么您可以选择两种设计。这些被称为“单表继承”和“类表继承”。你可以在SO中查找相应的标签,或者你可以在网上找到文章。