我有一个包含大量数据的MS Access数据库。它由我和我的团队正在开发的应用程序使用。但是,我们从未向此数据库添加任何外键,因为我们可以从代码本身控制关系。从来没有遇到任何问题,也许永远都不会。
然而,随着开发的进一步发展,我担心即使我们使用规范化的数据,也有可能忽视30多个表之间的所有关系。因此,至少要记录表格之间的关系是个好主意。
Altova已经创建了DatabaseSpy,可以显示数据库的结构,但没有关系,没有太多要显示。我仍然可以使用它来添加关系,但我不想修改数据库本身。
是否有任何软件可以通过它的结构和数据分析数据库,然后对其关系进行最佳猜测? (就像文档一样,不要修改数据库。)
只有30多张桌子?不应该花半小时或一小时来创建所需的所有关系。我恳请你这样做。是的,我知道您说明了那些代码检查。但是,如果你错过了一些怎么办?如果确实有孤立的记录怎么办?你怎么会知道的?或者您是否有防弹程序通过所有表格寻找所有这些问题?
使用较大的23英寸液晶显示器并使用它。
如果您的数据库没有在代码之外的某处定义关系,那么就没有真正的方法来猜测表之间的关系。 更糟糕的是,您无法知道关系的类型以及是否应该进行更新和删除的级联。
话虽如此,如果你遵循一些严格的规则来命名你的外键字段,那么就有可能重建关系的结构。
例如,我使用这样的方案:
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.ProductID
与Product.ID
有关,这很容易通过代码确定,通过每个字段。
如果你有一个类似的方案,那么你可以从中获得多少取决于你遵循自己的约定的程度,但它可以达到100%的准确度,尽管你可能有一些例外(你可以内置你的代码,或者,更好的,查找某处)。
另一种解决方案是,如果每个表的唯一ID都遵循不同的编号方案。
假设你的Order.ID
实际上遵循OR001
,OR002
等方案,Product.ID
跟随PD001
,PD002
等。
在这种情况下,遍历所有表中的所有字段,您可以搜索与每个PK匹配的FK记录。
如果您遵循一个合理的约定来命名您的字段和表,那么您可以自动发现它们之间的关系,将其存储在表中并手动进行更正。
完成后,使用该结果表实际使用Database.CreateRelation()
方法从代码构建关系(查看Access文档,其中包含示例代码)。
您可以构建一小段VBA代码,分为两部分:
正如托尼所说,30张表并不多,脚本应该很容易设置。完成此设置后,在步骤1之后停止该过程,运行访问文档(tools \ analyze \ documenter)以准备好文档,启动步骤2.您的数据库将保持不变并准备好文档。
我建议你保留这些代码并定期对你的数据库运行,以检查你的关系模型是否坚持数据。
可能有一个工具可以“猜测”关系但我怀疑它。坦率地说,我害怕没有适当外键的数据库以及使用Access作为DBMS的多用户应用程序。我想应用程序必须是某种内部工具,否则我建议您转移到正确的DBMS(SQL Express是免费的)并添加外键。