在事实表中添加代理键?

时间:2016-04-18 14:14:54

标签: sql-server database

我想检查这是否是一个逻辑设置。我是数据库的新手,但我想节省一些空间并提高效率。

正在生成员工的每日快照(每天50,000多行,超过70列)。我只对更改发生时感兴趣,因此我删除了重复项,然后为effective_dateexpiration_date以及is_current添加了一列。每当我跟踪的维度发生变化时,我都会为该员工添加一个新行。

生成了大量文件,其中包含有关这些员工的日常事实。每个文件都有employee_iddate,这些文件也存在于每日员工快照文件中。

我在考虑在快照文件上添加一个整数键(递增),然后查找该整数并将其添加到事实表中(我将在ETL设置期间使用pandas / python执行此操作),然后再插入数据进入数据库。

每日快照:

employee_integer_key | effective_date | employee_id | all employee info... |
            86            2016-01-06      abc123            stuff

事实档案:

date | employee_id | facts... |

然后,我会根据日期和employee_id列合并表格,并仅将employee_id列替换为employee_integer_key

事实档案:

date | employee_integer_key | facts... |

当我将日期快照文件(在有效日期和到期日期之间)加入某个日期时,此整数应反映特定员工。这是一个不错的方法,还是我应该尝试别的东西?

1 个答案:

答案 0 :(得分:1)

避免使您的方法复杂化。 KISS方法。 在发生更改时,您将获得一个新的csv文件。只需插入一下即可找到所有内容。让您的SQL表具有标识列以及在该csv上找到的所有列。

实际上,我会使用SQL Server提供的“导入和导出数据”工具,这样您就可以将csv文件的列与表格相匹配。 搜索与日期和/或员工相关的内容时:

SELECT * FROM Emp_table WHERE effective_date < @dateSearched AND expiry_date > @dateSearched AND employee_id = @employeeSearched

您希望拥有一个标识列来帮助编制索引。当然,该表将有很多行,但SQL服务器无法处理它。

最后,如果您关注重复项(完全相同的行 - 当然减去标识列),请研究如何删除SQL Server中的重复项。这篇kb文章很理想:https://support.microsoft.com/en-ca/kb/139444