在数据库架构中加入表?

Posted

技术标签:

【中文标题】在数据库架构中加入表?【英文标题】:Join Table In Database Architecture? 【发布时间】:2012-08-01 16:33:02 【问题描述】:

我一直在研究数据库应用程序 (Access 2007),并且有几个关于架构的问题。这是迄今为止我编写的最复杂的应用程序。

我目前有 5 个表,每个表都有自己唯一的 ID 字段:

平台 车辆 手册 程序 故障

同一个故障可能出现在多个程序中,同一个程序可能出现在多个手册中。我想为用户提供复制和删除记录的机会,以及表之间的交叉链接记录。

目前,我在上面列出的每个表之间都有连接表,

platforms_vehicles vehicles_manuals manuals_procedures procedures_faults

编辑主表之间的关系(通过编辑连接表的内容)变得相当复杂,因为复制和删除操作会对其他表产生级联影响。在我看来,这可以使用递归有效地执行,但实际上让它工作完全是另一回事。

问题 #1:我描述的架构是安排这些数据的“好”方式,还是不必要地复杂? (我有这样做的习惯。)

问题 #2:是否有“首选”方法?

问题 #3:我最好以不同的方式组织表格,例如:

只有 5 张桌子,

平台 车辆 手册 程序 故障

每个表都有一个用于其内容字段的键,以及另一个表示其在下一个更高表中的父记录的键。例如,

平台 平台ID、平台名称 车辆 平台ID、车辆ID、车辆名称 手册 vehicleID、manualID、manualName ...

这对我来说似乎更简单,当然也不那么复杂。如果大家愿意提供一些专业的反馈,我将不胜感激。

谢谢!

【问题讨论】:

如果您的表是一对多的,比如每辆车只在一个平台上,我会跳过这些关系的连接表。只需在您的车辆表中添加一个平台 ID,并在您的手册表中添加一个车辆 ID。您需要下层表的连接表,这是一个多对多关系Each manual can have many procedures, and each procedure can appear in many manuals 谢谢幽灵。这对我来说很有意义。设置表维护程序已成为一件苦差事。你知道我可以放入我的应用程序中的任何预先编写的导航类模块吗? :) 【参考方案1】:

您需要使用 MS Access 的关系工具来设置参照完整性规则。这样,您可以自动级联删除和更新。我会避免“连接表”,因为只要父键在表中(称为外键),它们就是不必要的。

【讨论】:

对于较低级别的表来说,这里不需要加入表,因为有可能for the same procedure to appear in multiple manuals 并且可能一本手册包含许多过程。 Holger - 我按照您的描述设置了参照完整性规则。如果每个表(第一个除外)都有一个由父键字段和单个记录键字段组成的键,那么这足以完成连接表的操作吗? @ScottChristensen,是的,应该这样做。但是,请注意 Ghost 的评论。例如,如果手册有多个过程,那么您需要一个子表(或您所称的连接表)来实现一对多关系。

以上是关于在数据库架构中加入表?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法限制在 spark sql 中加入表时读取的数据?

如何在名称作为参数提供的用户定义函数中加入表?

如何在 r2dbc 中加入表?

在 TypeORM 和 NodeJS 中加入表

在 MySQL 中加入表的转置

经验小结(个人笔记)