添加与Access数据库的关系

问题描述 投票:0回答:4

我有一个包含大量数据的MS Access数据库。它由我和我的团队正在开发的应用程序使用。但是,我们从未向此数据库添加任何外键,因为我们可以从代码本身控制关系。从来没有遇到任何问题,也许永远都不会。

然而,随着开发的进一步发展,我担心即使我们使用规范化的数据,也有可能忽视30多个表之间的所有关系。因此,至少要记录表格之间的关系是个好主意。

Altova已经创建了DatabaseSpy,可以显示数据库的结构,但没有关系,没有太多要显示。我仍然可以使用它来添加关系,但我不想修改数据库本身。

是否有任何软件可以通过它的结构和数据分析数据库,然后对其关系进行最佳猜测? (就像文档一样,不要修改数据库。)


This application was created more than 10 years ago and has over 3000 paying customers who all use it. It's actually document-based, using an XML document for it's internal storage. The database is just used as storage and a single import/export routine converts it back and to XML. Unfortunately, the XML structure isn't very practical to use for documentation and there's a second layer around this XML document to expose it as an object model. This object model is far from perfect too, but that's what 10 years of development can do to an application. We do want to improve it but this takes time and we can't disappoint the current users by delaying new updates.
Basically, we're stuck with its current design and to improve it, we need to make sure things are well-documented. That's what I'm working on now.
database ms-access
4个回答
2
投票

只有30多张桌子?不应该花半小时或一小时来创建所需的所有关系。我恳请你这样做。是的,我知道您说明了那些代码检查。但是,如果你错过了一些怎么办?如果确实有孤立的记录怎么办?你怎么会知道的?或者您是否有防弹程序通过所有表格寻找所有这些问题?

使用较大的23英寸液晶显示器并使用它。


1
投票

如果您的数据库没有在代码之外的某处定义关系,那么就没有真正的方法来猜测表之间的关系。 更糟糕的是,您无法知道关系的类型以及是否应该进行更新和删除的级联。

话虽如此,如果你遵循一些严格的规则来命名你的外键字段,那么就有可能重建关系的结构。

例如,我使用这样的方案:

Table Product
- Field ID          /* The Unique ID for a Product */
- Field Designation
- Field Cost

Table Order
- Field ID          /* the unique ID for an Order */
- Field ProductID
- Field Quantity

在查看Order时,这种关系很容易被发现:Order.ProductIDProduct.ID有关,这很容易通过代码确定,通过每个字段。

如果你有一个类似的方案,那么你可以从中获得多少取决于你遵循自己的约定的程度,但它可以达到100%的准确度,尽管你可能有一些例外(你可以内置你的代码,或者,更好的,查找某处)。

另一种解决方案是,如果每个表的唯一ID都遵循不同的编号方案。 假设你的Order.ID实际上遵循OR001OR002等方案,Product.ID跟随PD001PD002等。 在这种情况下,遍历所有表中的所有字段,您可以搜索与每个PK匹配的FK记录。

如果您遵循一个合理的约定来命名您的字段和表,那么您可以自动发现它们之间的关系,将其存储在表中并手动进行更正。 完成后,使用该结果表实际使用Database.CreateRelation()方法从代码构建关系(查看Access文档,其中包含示例代码)。


1
投票

您可以构建一小段VBA代码,分为两部分:

  1. 步骤1使用database.createrelation方法实现数据库关系
  2. 第2步删除了与database.delete命令的所有已创建的关系

正如托尼所说,30张表并不多,脚本应该很容易设置。完成此设置后,在步骤1之后停止该过程,运行访问文档(tools \ analyze \ documenter)以准备好文档,启动步骤2.您的数据库将保持不变并准备好文档。

我建议你保留这些代码并定期对你的数据库运行,以检查你的关系模型是否坚持数据。


0
投票

可能有一个工具可以“猜测”关系但我怀疑它。坦率地说,我害怕没有适当外键的数据库以及使用Access作为DBMS的多用户应用程序。我想应用程序必须是某种内部工具,否则我建议您转移到正确的DBMS(SQL Express是免费的)并添加外键。

© www.soinside.com 2019 - 2024. All rights reserved.