MS Access中表的面向对象模型

时间:2014-12-16 02:10:00

标签: oop database-design ms-access-2013

我有一个包含多个表的MS Access数据库。几乎所有表都包含有关不同类项的库存信息(有一些实用程序表存储额外信息,例如类列表和常用查找值列表)。某些类别的项目具有特定于它们的特定数据 - 例如,体积与液体相关但不与实体对象相关,但所有对象都具有位置。我的数据库的逻辑结构是一个教科书示例,其中面向对象的模型提供了清晰度和可维护性的好处:

  • 有一个基本表,它是所有不适合其他类别的项目的全能表。它包含一些列,例如项目名称,日期,位置和适用于任何项目的注释。这将是顶级超类,例如class InventoryTable
  • 有特定类的表格,例如打印机墨盒的表格。此表格包含InventoryTable所有的列,但也包含一些仅与打印机墨盒相关的专用信息,例如打印机型号,墨水颜色和品牌。该表将是一个子类,例如class PrinterCartridgeTable : InventoryTable
  • 有时会有更深层次的继承结构。例如,可能存在所有文档的表(class DocumentTable : InventoryTable,包括文档具有多少页的额外字段),然后是另一个字母表(class LetterTable : DocumentTable,其中还包含发件人和收件人的列)这封信)。假设人们会在LetterTable中查找字母,如果没有找到,可以尝试查看DocumentTable和顶级InventoryTable

假设我的日期目前显示为MM/DD/YYYY。我想将它们更改为ISO格式(YYYY-MM-DD)。目前,我必须打开我拥有的每个表(大约20个)并逐个更改每个表中的格式。如果存在某种继承机制,我只能在我的顶级InventoryTable中更改格式,而我的所有其他表都将继承更改。

或者,假设我决定为所有项目存储一个名为“所有者”的新数据。这将描述谁将物品输入库存。我可以简单地将此列添加到InventoryTable,它将自动显示在所有子表中。

最后,假设我进行了外观修改,例如重新排列列的顺序。让我们说在我的文档相关表格中,页面编号出现在最后。我改为将页码移到表格的最开头 - 这会传播到DocumentTableLetterTable,但不会传播到不相关的表格。

请记住,我正在使用MS Access 2013的GUI手动编辑这些表。当编辑有关单个类项目的信息时,我不想在表或查询之间来回切换以编辑不同的部分。相同的记录 - 我希望能够在一个地方查看和编辑任何给定记录的所有信息。因此,基于链接查询的一些复杂解决方案可能是不切实际的。

我是否有可能使用某种面向对象的方案在Access中完成我想要的(继承结构)?是否有另一种获得相同福利的方法?除了放弃并手动将每个更改传播到所有表格之外,我别无选择吗?

2 个答案:

答案 0 :(得分:1)

无法在面向对象中创建表,因为无法直接将方法与表关联。对象被定义为属性和方法。访问不是为此而设计的。

另请注意,Access不是Microsoft提供的最佳选择。您将获得SQL Server的更多功能和功能。

答案 1 :(得分:1)

关系数据模型没有内置的继承。有几种设计模式允许数据库设计者模仿关系表系统中的继承行为。两种常见的设计被称为"单表继承"和"类表继承"。此区域中有两个标签,其中包含与这两种技术相关的问题,以及标签下信息中的简要说明。使用这两种技术之一,您将能够建模超类/子类的情况。

有关更完整的描述,您可以在网上搜索Martin Fowler对这两种技术的处理方法。还有第三种技术,叫做#34;共享主键"它允许您强制子类成员和超类成员之间的IS-A关系的一对一性质。

MS Access中的大问题是实现这些技术留给应用程序员的代码。准备好在VBA中进行大量编码,并将此代码绑定到用户的仪表板。