我觉得这是一个有点“愚蠢”的问题,但无论如何,它可能对其他人有用。它也有点长,因为我想介绍一下我的情况。
背景:
我正在开发一个数据库应用程序,以使我们能够“跟踪”各种项目的费用。我确信已经有一个可以做到这一点的应用程序,但我仅限于使用 VBA,所以 MS Access。有人告诉我,他们不想学习“新”东西,而且我确信任何其他“新”产品都需要进行大量“调整”才能提供我们需要的所有“补充”功能和细节.
问题(S):
这些可能是围绕我的原则问题的敲门声,欢迎您的想法,如果它可能会导致有趣的讨论,我很乐意将每一点分成一个新问题,但我包括这些东西在这里完成。
我有多个表,它们以“路径”相互链接,因此每个表都存储信息。为简单起见,让我们将其视为项目:位置(地理):要访问的人(实际上,该路径中还有另外 4 个表,但是...)由于每个位置都可以存在于每个项目中,因此我有一个链接的“project_2_location”表这些表在一起,以及每个中间表之间的另一个“链接”表。因此,如果表是 ABC 和 D,则链接表是 A_2_B:B_2_C:C_2_D:等...(我不做 A_2_C 和 A_2_D)。
我也有“大量”的 2 列“查找”表(事实上,我的“查找”类型表比“真实”表要多,这让我在“设计视图”中更加恼火)。
我的主要问题/问题。我还有另一组“一组”桌子让我感到“悲伤”,因为这是最好的继续。正是这些是我“问题”的根源。
我有 2 个表在 one_to_many 关系中链接,我使用父表中的“单一”值链接到子表(子表有自己的代理键)
显然他们对“子”表中的细节并不特别感兴趣,但我创建它是因为它是使界面工作并保持某种“第一范式”的最方便的方式。
现在我已经创建了这个子表,我知道他们将来会想要对它运行查询(即使他们现在说他们不这样做!)。为此,他们将“必须”在它、父表和他们的父表之间创建一个连接,以提取他们想要的所有信息。
所以简而言之,我有
祖父(充当项目名称的查找表)。
Parent(它有一个指向 Grandparent PK 的外键,并且是 'oneGranparent_to_ManyParent 类型的关系)。
Child(它有一个外键到 Parent 的 PK,并且是 'oneParent_to_ManyChild 类型的关系)。
因此,我想到了以下解决方案。
1)在孩子中添加一个指向祖父母的PK字段的字段(快速简单但多余,除了为将来人们想要搜索此子表时添加易用性)。
2)添加一个链接表,将祖父母中的 PK 链接到孩子中的 PK(这似乎足够合理,并且将导致搜索仅连接 2 个表)
3)别管闲事,(任何未来的搜索都需要将孩子加入父母和祖父母 - 这对于这里的“非”程序员来说可能太多了!)。目前我还没有被要求提供这个搜索,所以“对不起他们”,我确实提供了,但回答是“不,我们不需要那个”
4)我缺少其他一些解决方案。
就我个人而言,我倾向于使用解决方案#1,但喜欢使用#3(出于血腥的头脑)运行,我可能会在开发说明中记录所需的 SQL 以创建搜索。
非常欢迎您的想法和其他解决方案(例如影子表和连接表的预创建(在#3 中通过存储过程在有人打开应用程序时运行)。