1

这是一个理论问题,我最近因为一个请求而出现了请求。我拥有主操作数据存储的支持,它维护一组数据表(包含主数据)以及一组查找表(其中包含参考代码列表及其描述)。最近来自下游应用程序的推动将逻辑上将两种结构(数据和查找值)统一在表示层中,以便他们更容易地发现整个数据中是否存在更新。 虽然这个请求是可以理解的,但我的第一个想法是它应该在接口级而不是在源头上实现。逻辑上将两个表(last_update_date)组合在ODS级别与数据的非规范化几乎相似,并且似乎与保持查找和数据分离的想法相反。 这就是说,我想不出为什么它不应该在消耗臭氧层物质水平上完成,除了它看起来不是正确的事实吗?有人有任何想法,为什么这种方法应该或应该不被遵守?为什么要在数据库中使用查找表

为了简单起见,我在此列举一个例子。

Data table 
ID Name Emp_typ_cd Last_update_date 
1  X  E1   2014-08-01 
2  Y  E2   2014-08-01 

Code table 
Emp_typ_cd  Emp_typ_desc Last_Update_date 
E1    Employee_1  2014-08-23 
E2    Employee_2  2013-09-01 

下游请求是把数据表示为

Data view 
ID Name Emp_typ_cd Last_update_date 
1  X  E1   2014-08-23 
2  Y  E2   2014-08-01 

Data view 
ID Name Emp_typ_cd Emp_typ_desc Last_update_date 
1  X  E1   Employee_1  2014-08-23 
2  Y  E2   Employee_2  2014-08-01 

回答

1

你是正确的,那是因为有人想看到特定的数据士气受挫数据库办法。如您所知,副作用是您复制数据,降低灵活性,增加表格大小,将不同的对象存储在一起等等。您也应该正确地解决他们的问题应该在某处或其他地方解决。如果他们以改变数据库的方式改变数据库,他们就不会得到他们想要的东西。如果他们想让他们“更容易地发现整体数据中是否有更新”,但是他们重复了大量数据,他们只是自行解决错误。在您的示例中,Emp_typ_cd更新值必须为使用该emp类型代码的所有员工更新。一个好的更新语句可以做到这一点,但仍然不是更新查找表中的单个行,而是更新每个具有emp类型的员工。

我们一直使用查找表。我们可以为查找表添加一个新值,使用fk将雇员添加到数据库中,并且添加到该表上的任何报表现在都具有ID,值,排序顺序等。假设我们添加'退伍军人'到lu_Work_Experience。我们添加一名雇员与老将fk_Id,现在任何现有的查询加入lu_Work_Experience有这个价值。他们按照字母顺序或按照我们预先定义的顺序对工作经历进行分类

虽然有一个平坦的数据结构的正当理由,那就是速度。如果你正在运行一个非常大的报告,现在连接(和良好的索引)会更快。如果企业知道它会多次运行一个非常大的报告并且担心最终用户的等待时间,那么为该报告构建单个表是一个不错的主意。我们一直在为计算好的措施做到这一点。如果我们知道某个分析报告会产生大量聚合并加入,我们会将数据预先聚合到数据存储中。这就是说,我们在SQL中不经常这样做,因为我们使用多维数据集进行分析。

那么为什么要在数据库中使用查找表?数据的逻辑分离。员工有员工代码,但没有员工代码更新时间的日期。减少重复的数据。最小化设计复杂性。避免为特定报告构建表格,然后必须针对不同报告构建不同的表格,即使它具有相似的数据。

无论如何,我的论点的其余部分将由数据库规范化维基百科页面的事实组成,因此我将跳过它。

相关问题