我有一张桌子" AvailableProducts"以下字段:
StoreID int,
ProductID int,
ProductPrice decimal,
IsAvailable bit
ProductPrice
可以由商店中的销售人员更改,也可以通过品牌的价格更新进行更新。
现在,为了存储价格变化的历史记录,我创建了一个历史表,如下所示:
Table ProductPriceHistory
UpdateID int,
StoreID int,
ProductID int,
ProductPrice decimal,
IsAvailable bit,
UpdatedBy int,
UpdatedAt datetime
我面临的问题是在UpdatedBy
字段中保留BrandID或SalesPersonID(这会对价格进行更改)是错误的设计。
我可以将其修改为:
Table ProductPriceHistory
UpdateID int,
StoreID int,
ProductID int,
ProductPrice decimal,
IsAvailable bit,
BrandId int,
SalesPersonID int,
UpdatedAt datetime
这将允许我使用Id字段通过Brand
和SalesPerson
表中的外键引用更新实体。但它也会导致许多空列或空列值,因为只有一个实体,即brand
或SalesPerson
可以在给定时间更新价格。
我还可以创建两个不同的历史记录表来分别保存SalesPerson
和Brands
所做的更新,但此解决方案看起来并不吸引人。
有关此设计的任何改进建议,因为我希望将此表的历史记录保存在单个表中。谢谢:))
答案 0 :(得分:0)
您可以创建一个包含2个项目的ObjectType
表:
CREATE TABLE [dbo].[ObjectType](
[ObjectTypeId] [int] NOT NULL,
[ObjectTypeName] [nvarchar](100) NULL)
GO
INSERT INTO dbo.ObjectType VALUES (1, 'Brand')
INSERT INTO dbo.ObjectType VALUES (2, 'SalesPerson')
然后向表ObjectTypeId
ProductPriceHistory
ALTER TABLE ProductPriceHistory
ADD ObjectTypeId int
您不仅可以为SalesPerson
和Brands
答案 1 :(得分:0)