我正在使用Microsoft Access 2007中的组成关系管理系统。我们有两种类型的贡献者,每种都有自己的表:
表成分,其中包含姓名和年龄的个人以及不同表格中不同联系信息的一堆外键
表组织,其中包含有关组织信息的字段。
成分和组织都可以做出多种贡献,这些贡献由3个表格中的记录表示承诺, InKindDonations 和 MonetaryContributions 。这三个表无法合并,它们拥有不同类型的信息。
允许组织进行贡献将是现有数据库中的新功能。目前只有三方成员可以做出贡献:3个贡献表中的每一个都有一个ConstituentId字段,它是[成分]。[ConstituentId]字段的FK。
我无法想出一个很好的方法来链接来自三方成员的贡献者记录。具有贡献记录的组织,同时使用Access中可用的功能保持参照完整性,并对引用5个表的许多现有查询和过程进行最小的更改。
我唯一的想法是,我可以在3个贡献表中的每一个中添加一个OrgId字段,这对于Organizations.OrgId是一个FK - 但我必须确保2个FK字段中的一个且只有一个( ConstituentId& OrgId)存在于每个贡献中,并且它们是有效的FK。
这是一个很好的解决方案还是丑陋的黑客?
答案 0 :(得分:1)
您的解决方案只需要进行最少的更改,但是您无法保持参照完整性,因为参照完整性不会让您在承诺,中创建记录InKindDonations 和 MonetaryContributions ,除非您在每个记录的 组织和成分中都有FK值。例如,如果为组织设置参照完整性并为成分添加记录,则贡献表中的 OrgId 必须为空白,这将违反这些表的参照完整性< strong>组织表。
如果您仍希望保持参照完整性,则采用不同的方法(需要修改许多表单和报告),将 ConstituentId 添加到组织表或在成分表中添加 OrgId ,您必须修改列出组织,成员和贡献的报表和表单,以区分人员所做的贡献和组织的贡献。
为了保持使用参照完整性的可能性,您还可以添加新的贡献者表,并将 CcontributorId FK添加到成分和组织表,与之前必须更改报表,列表和总计表单相同。
您应该考虑最后两个选项,因为您可能会被要求更改/创建涉及组织贡献的报告。