一个表中包含太多空值有什么缺点?

时间:2018-07-17 18:04:45

标签: ms-access

我正在设计一个数据库来存储我公司的历史数据。简而言之,我们希望存储过去十年中产品的费用(费用)。费用通常每年更改一次或两次,我们希望存储所有更改。

我根据以下链接的文章提出了一个主意: https://jiripik.com/2017/02/04/optimal-database-architecture-super-fast-access-historical-currency-market-data-mysql/

我正在考虑为每个产品创建一个表格,并以日期作为主键。然后,我可以在2008年1月1日至2018年12月31日之间使用空值预填充表。因此,我可以简单地更新费用而不是插入新记录。

此方法完全基于文章。但是,问题在于,在本文中,此方法用于历史货币汇率,这种变化的频率比我的数据更频繁。因此,如果遵循此方法,则表中将包含大多数null值。

谁能告诉我此方法应用于我的数据有哪些缺点?还有设计数据库的更好方法吗?

注意:没有规则规定产品一年更改收费多少次,并且每年没有固定的日期。

1 个答案:

答案 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的条目。