【发布时间】:2013-07-31 07:36:25
【问题描述】:
如果我将多部分报告输入到数据库中,我应该将每个部分都设为单独的表格吗?
随着时间的推移,报告可能会添加其他部分。
创建一个随着时间的推移会添加列的表是不好的做法吗?
谢谢
【问题讨论】:
标签: database-design database-normalization
如果我将多部分报告输入到数据库中,我应该将每个部分都设为单独的表格吗?
随着时间的推移,报告可能会添加其他部分。
创建一个随着时间的推移会添加列的表是不好的做法吗?
谢谢
【问题讨论】:
标签: database-design database-normalization
“创建一个随着时间的推移会添加列的表是不好的做法吗?”
不。只要是“一件事”。
将你的数据分成基本名词,然后计算出它们之间的关系类型。
如果它是一对多的,那么将一个外键放在指向一个的多个上。如果是多对多则引入映射表。
编辑:使用替代答案中给出的示例进行扩展...
Invoice 由 Description Date Notes 等组成,因此这些应该是发票上的字段。但是,由于它有 许多 InvoiceItems,因此它们应该是一个带有外键的单独表,以便于扩展。
【讨论】:
我是否应该将 [报告的] 每一部分制作成单独的表格?
一般不会。
报告是一种“显示”机制。一般来说,它们在数据库中没有任何结构。但是,报表结构可以从数据库结构派生。
例如,考虑一张发票。通常,发票(一种报告)至少会使用两个表格,每个表格代表发票的一个“部分”:
InvoiceHeader
Name
Address ...etc
InvoiceLineItems
ItemID
Quantity ...etc
此外,您可能拥有代表报告部分的表格,但这些表格并不是实际数据的一部分。但是,很难推测这些表格可能是什么样子不了解您的特定应用程序的更多信息。
【讨论】:
这真的取决于报告的内容。 “多部分”是由什么组成的?
例如,如果我要报告给定部门的员工,我希望有一个包含所有员工的表格(或者如果标准化是有意义的,则为一组表格 - 但为此目的,让我们对一张表格进行成像)。然后我可能会有一个包含多个部分的报告,每个工作人员一个。
但是,如果报告中有一个关于员工的部分,另一个是关于他们制作了多少小部件,另一个是关于他们工作了多少天,我希望有一张表用于员工,一张用于小部件,一张用于工作日。
然后我的报告将从适当的表格中提取以填充报告。
通常,规范化规则与有效存储数据的需求有关,而不是与报告的设计有关。规范化试图通过确保每条数据只保存一次并且不受其他数据条更改的影响来避免插入、删除和更新异常。这不仅仅是一份报告或任何其他单一活动推动了标准化。
【讨论】: