在这种情况下我应该进行去标准化吗?

时间:2010-07-13 08:13:10

标签: database database-design denormalization

情况如下:

[工作]属于[工作类别],[工作类别]属于[工业]

所以,我的初步设计是这样的: Job有一个fk可以找到工作类别,而一个工作类别有一个fk可以引用Industry。 但问题是,当我想知道工作属于哪个行业时,我需要找到工作类别,并根据工作类别ID,回顾行业表。所以,我在考虑进行去规范化。

但我有两种方法可以这样做,我认为哪种方法更好。首先,记录所有内容,包括工作类别,行业在同一个地方(工作表)。

另一种方法是Job仍然引用Job Category,但Job Category有一个存储行业信息的字段。

您认为哪种方法更好?谢谢。

2 个答案:

答案 0 :(得分:2)

你的第二种方法很好。您描述的问题,即为某个特定工作获得行业,实际上不是问题。请参阅以下结构:

Table jobs
ID PK
REF_CATEGORY FK

Table jobcategories
ID PK
REF_INDUSTRY FK

Table industries
ID PK

现在,为了一个特定的工作获得行业:

SELECT j.ID, i.ID
FROM jobs j
JOIN jobcategories c ON j.REF_CATEGORY = c.ID
JOIN industries i ON c.REF_INDUSTRY = i.ID

有时候非正规化有很好的理由,但在这种情况下你不应该。如果将JOB,JOBCATEGORY和INDUSTRY放在一个表中,您就有可能拥有属于多个行业的工作类别,从而打破了您的1-n关系。

答案 1 :(得分:1)

但是,这种指涉关系始终存在。如果仅将“工作”表和作业类别表用于“作业”详细信息,则可以考虑取消规范化。但是,如果这些表也连接到其他一些数据/表,则应该检查规范化方案。不应孤立地进行去标准化。并且,我不认为您在RDBMS上连接三个表的开销非常高。