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