SQL数据库规范化基础知识

时间:2013-07-30 23:26:43

标签: database-design database-normalization

如果我要将多部分报告输入数据库,我应该将每个部分作为一个单独的表吗?

随着时间的推移,报告可能会添加其他部分。

创建一个随时间推移会添加列的表是不好的做法?

由于

3 个答案:

答案 0 :(得分:0)

“随着时间的推移,创建一个会在其中添加列的表格是不好的做法吗?”

不。只要它是一个“东西”。

将您的数据分成基本名词,然后计算它们之间的关系类型。

如果它是一对多,那么将一个外键放在指向一个的多个上。如果是多对多,则引入映射表。

编辑:使用备用答案中给出的示例进行扩展...

InvoiceDescription Date Notes等组成,因此这些字段应为发票上的字段。但是,因为它有很多 InvoiceItems,所以这些应该是一个带有外键的单独表,以便轻松扩展。

答案 1 :(得分:0)

  

我是否应该将[报告]的每个部分都作为一个单独的表格?

一般来说,没有。

报告是一种“显示”机制。一般来说,它们在数据库中没有任何结构。但是,报告结构可以派生自数据库结构。

例如,考虑一个发票。通常,发票(一种报告)将使用至少两个表,每个表代表发票的“部分”:

InvoiceHeader
    Name
    Address ...etc

InvoiceLineItems
    ItemID
    Quantity ...etc

此外,您可能拥有表示报告各个部分的表,但不是实际数据的一部分。但是,很难推测这些表可能是什么样的不了解您的特定应用程序。

答案 2 :(得分:0)

这实际上取决于报告的内容。 'mulitpart'是由什么构成的?

例如,如果我要报告给定部门的工作人员,我希望有一个包含所有工作人员的表(或者如果规范化有意义,则为一组表 - 但为此目的,我们可以对一个表进行成像)。然后我可能会有一个包含多个部分的报告,每个工作人员一个。

然而,如果报告中有关于工作人员的部分,另一部分关于他们制作了多少小部件,另一部分关于他们工作了多少天,我希望有一个工作人员表,一个用于小部件,一个用于工作日。

然后我的报告将从适当的表中抽取来填充报告。

通常,规范化规则涉及有效存储数据而不是报告设计的需要。规范化尝试通过确保每个数据只保留一次并且不受其他数据的更改影响来避免插入,删除和更新异常。这不止一个报告或任何其他单个活动推动了规范化。

相关问题