【发布时间】:2016-08-10 08:12:11
【问题描述】:
我想检查一下这是否合乎逻辑。我一般是数据库新手,但我想节省一些空间并提高效率。
正在生成员工的每日快照(每天 50,000 多行,超过 70 列)。我只对何时发生更改感兴趣,所以我删除重复项,然后为effective_date 和expiration_date 添加一列以及is_current。每次我跟踪的维度发生变化时,我都会为该员工添加一个新行。
生成了许多文件,其中包含有关这些员工的日常事实。每个文件都有employee_id 和date,它们也存在于日常员工快照文件中。
我正在考虑在快照文件上添加一个整数键(递增),然后在插入之前查找该整数并将其添加到事实表(我将在 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... |
当我将其与每日快照文件(在生效日期和到期日期之间)加入时,该整数应反映特定日期的特定员工。这是一个不错的方法还是我应该尝试其他方法?
【问题讨论】:
-
实际发生了什么变化?抓拍的数据?在进行更新时创建自己的更改历史记录表,或者使用更新触发器直接对表进行更新,从而采用编程方式。您最关心的是实时数据,为什么不拆分更改和当前数据?用于广泛查询的仓库更改 + 实时数据可能是有益的。根据定义,代理键是人类可以理解的(您的employee_id),您正在查看的是一个身份列。
-
大约有 70 列描述员工。他们在哪个项目上,在哪个位置,他们向谁报告等等。(这些信息是在第三方的每日 .csv 文件中提供的,因此它是来自我们无法访问的更大数据库的非规范化快照)。我在大约 20 列中跟踪“重要”变化。如果其中一个维度发生变化,我会添加一个新行(在将任何内容插入数据库之前,我会在 python 中与旧数据进行比较)。我需要能够准确地知道某个人在某个日期的状态(谁是他们的经理等)。
-
如果您的设置是这样的,因为您的搜索条件仅基于日期和特定员工,您可以将其全部保存在包含所有字段的单个表中。 Select * from emptable where effective_date dateSearched and employee_id = empSearched。
标签: sql-server database