Database design SQL数据库规范化基础

Database design SQL数据库规范化基础,database-design,database-normalization,Database Design,Database Normalization,如果我在数据库中输入一个多部分报告,我是否应该将每个部分作为一个单独的表 随着时间的推移,报告可能会添加其他部分 随着时间的推移,创建一个将添加列的表是一种不好的做法吗 谢谢“创建一个随时间推移而添加列的表是一种不好的做法吗?” 没有。只要这是一件“事” 将数据分成基本名词,然后计算出它们之间的关系类型 如果是一对多,则在指向一的多上放置一个外键。如果是多对多,则引入映射表 编辑:使用备选答案中给出的示例展开 发票由说明日期注释等组成,因此这些字段应该是发票上的字段。但是,由于它有许多发票项目,

如果我在数据库中输入一个多部分报告,我是否应该将每个部分作为一个单独的表

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


随着时间的推移,创建一个将添加列的表是一种不好的做法吗

谢谢

“创建一个随时间推移而添加列的表是一种不好的做法吗?”

没有。只要这是一件“事”

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

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

编辑:使用备选答案中给出的示例展开

发票
说明
日期
注释
等组成,因此这些字段应该是发票上的字段。但是,由于它有许多
发票项目
,因此这些项目应该是一个带有外键的单独表,以便轻松扩展

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

一般来说,没有

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

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

InvoiceHeader
    Name
    Address ...etc

InvoiceLineItems
    ItemID
    Quantity ...etc

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

这实际上取决于报告的内容。“多部分”由什么组成

例如,如果我要报告某个部门的员工,我希望一个部门有一个包含所有员工的表格(或者一组表格,如果标准化有意义的话——但是为了这个目的,让我们对一个表格进行成像)。然后我可能会有一份包含多个部分的报告,每个工作人员一个

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

然后,我的报告将从相应的表中提取,以填充报告

通常,规范化规则与有效存储数据的需要有关,而不是与报告的设计有关。标准化通过确保每个数据段只保存一次,并且不受其他数据段更改的影响,从而避免插入、删除和更新异常。这不仅仅是一份报告或任何其他单一活动推动了标准化