我正在设计一个数据库来存储我公司的历史数据。简而言之,我们希望存储过去十年中产品的费用(费用)。费用通常每年更改一次或两次,我们希望存储所有更改。
我根据以下链接的文章提出了一个主意: https://jiripik.com/2017/02/04/optimal-database-architecture-super-fast-access-historical-currency-market-data-mysql/
我正在考虑为每个产品创建一个表格,并以日期作为主键。然后,我可以在2008年1月1日至2018年12月31日之间使用空值预填充表。因此,我可以简单地更新费用而不是插入新记录。
此方法完全基于文章。但是,问题在于,在本文中,此方法用于历史货币汇率,这种变化的频率比我的数据更频繁。因此,如果遵循此方法,则表中将包含大多数null值。
谁能告诉我此方法应用于我的数据有哪些缺点?还有设计数据库的更好方法吗?
注意:没有规则规定产品一年更改收费多少次,并且每年没有固定的日期。
答案 0 :(得分:2)
许多Null值本身并不是问题,但是这种设计很糟糕。
您只需要两个表,
产品(ID,名称)和
历史记录(ID,产品ID,开始日期,费用)
,如果您要查询“在日期Y上产品X的费用是多少?”,只需执行
SELECT TOP 1 Charge
FROM History
WHERE ProductID = X
AND StartDate <= Y
ORDER BY StartDate DESC
获取最后一个早于日期Y的条目。