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