在这种情况下如何在Access中创建子表?

时间:2018-05-17 03:26:31

标签: sql database ms-access relationships

我知道有人会看到这个并说'#34;我确定已经回答了"我如何制作子表",所以这个问题很重复。"好吧,没有答案似乎与这种情况有关。开始: 我拥有一家汽车公司。我想列出与每辆车相关的成本滚动列表,最终总结为" totalCosts"。

我有桌子

require 'date'; arr = a.map do |h|; key, value = h[:data].flatten; h.merge(data: { Date.parse(key)=>value }); end

和表

ASSETS
     stock#, 
     make, 
     model, 
     purchase price, 
     totalCosts

所以我希望COSTS表包含几个成本,如:

COSTS
     description, 
     cost (in $)

我可以弄清楚如何总结成本,但主要是我需要知道如何为每辆车或股票制作COSTS表#。因此,每个股票#将有其COSTS列表,我将汇总并插入总成本中。

我现在看到的唯一解决方案是在同一行上制作一个包含每股成本的成本表,但我希望每个股票都有一个单独的成本表#

1 个答案:

答案 0 :(得分:0)

这是你可以做的最基本的相关表 - 非常适用于任何数据库系统附近。

您的费用表将有

Id - pk id(所有表都应该有这个PK) 资产ID - 用于关联资产表的标准长号列。

项目(成本说明(油漆,轮胎,座椅修理等)等 成本(给定项目的金额)

因此,您构建一个基于资源的主窗体,然后构建一个子窗体,可能最好设置为“重复行”或所谓的多个项目形式(您将其放入主窗体中,以及因此,“成本”形式成为资产的子形式。

因此,实际上,您将每行成本附加到给定的单一资产记录。如果您将成本表单作为子表单放入资产表单,访问权限将自动为您设置“资产ID”列。

因此表格看起来像这样:

enter image description here

在上面,(访问应用程序和我在Access中构建的基本表单)我实际上有“两个”列,可以在其中选择“项目”或“成本”类型。我有太阳镜,但在下一排我可以添加轮胎,然后涂漆,然后我想要的任何人。随着时间的推移,您可以添加任何类型的“新”成本项,而无需创建新表或更改数据库结构。

如果您的设计需要在表格结构中为您输入的每个新“事物”进行“更改”,那么您的设计是错误的。你能想象一个会计软件包,你必须一直“停止”并修改软件吗?

然后,当您尝试构建报告时,真正的混乱就会出现。再一次,报告仅适用于预定义的表 - 您可以动态“切换”表格以进行报告。

因此,您对电子表格等的任何概念都必须被抛弃。计算机信息系统简单地不工作,不能以这种方式工作!

因此请记住,关系数据库不是电子表格,您不能并且不能采用需要动态更改结构的设计。表单,报表,查询甚至计算机代码都无法在为您输入的每条记录更改的表上运行 - 您必须采用反映当前需求的数据模型。如果做得好,那么数据模型可以用于非常复杂的会计系统,ERP系统,甚至是拥有1000甚至数百万种不同产品的网络商店。首先设计这样的数据模型,然后创建表格和用户界面,报告等。

同样的工作成本也是如此。您可能有液体,人工成本,脚上使用的墙纸,加仑使用的油漆以及米中使用的瓷砖。因此,就像发票系统一样,作业成本核算系统可以处理“不同”类型的成本,并且不需要更改表格。

在上面,我们有一个类似设置的发票,我们可以添加我们想要的旅游预订。 (门票,夹克,书籍,冰鞋,轮胎,油漆,座椅和窗户 - 无论我们想要什么 - 我们只需为我们需要的东西添加新的一排。

考虑您使用的任何类型的“发票”软件 - 您可以在该发票中添加任意数量的项目。

关系数据库不支持您要构建的每个新“成本”的全新表 - 数据库简单不能以这种方式工作。因此,您(到目前为止)只需要资产的主表,然后是“成本”的子表。

您无法为每个资产创建全新的“成本”表,因为任何和所有数据库附近的内置工具都不支持也不能为您创建的每个新数据集创建新表。

为了便于输入数据,您可以构建一个成本项目表,这样用户就不必输入油漆,轮胎等,而是从下拉组合框中选择该项目。

因此,互联网上的每一个例子,每本书以及解释如何将主表与子表关联起来的每篇文章实际上都是100%相关的,并且是您必须解决此问题的方法。

关系数据库不支持为“一个”新数据集创建一个完整的新表,因为这种方法不能在报表中使用,查询语言也不支持这样的设计。