【发布时间】:2025-09-21 22:40:02
【问题描述】:
我有一个包含多个表的 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,它会自动出现在所有子表中。
最后,假设我进行了外观更改,例如重新排列列的顺序。假设在我的文档相关表格中,页码出现在末尾。相反,我将页码移动到表的最开头 - 这将传播到 DocumentTable 和 LetterTable 但不会传播到不相关的表。
请记住,我正在使用 MS Access 2013 的 GUI 手动编辑这些表。在编辑与单个项目类别有关的信息时,我不想在表或查询之间来回切换以编辑不同部分相同的记录 - 我希望能够在一个地方查看和编辑任何给定记录的所有信息。因此,一些基于链式查询的复杂解决方案可能不切实际。
我是否可以使用某种面向对象的方案在 Access 中完成我想要的(继承结构)?是否有其他获得相同福利的方法?除了放弃并手动将每个更改传播到所有表之外,我别无选择?
【问题讨论】:
标签: oop database-design ms-access-2013