【发布时间】:2017-04-10 18:44:20
【问题描述】:
我有一个表“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 所做的更新,但这个解决方案看起来并不吸引人。
任何有关改进此设计的建议,因为我希望将此表的历史记录保留在单个表中。谢谢:)
【问题讨论】:
-
我正在使用 SQL 服务器
标签: sql sql-server database-design