关系数据库模式:多贡献者表,多贡献表

Relational database schema: multiple contributor tables, multiple contribution tables

我正在 Microsoft Access 2007 中开发组成关系管理系统。我们有两种类型的贡献者,每一种都有自己的 tables:

  1. tableConstituents,其中有个人姓名和年龄以及一堆外键指向不同的联系信息tables

  2. tableOrganizations,其中包含有关组织特定信息的字段。

选民和组织都可以做出多项贡献,这些贡献由 3 个 table 之一的记录表示 PledgesInKindDonations,以及 MonetaryContributions。这 3 个 table 无法合并,它们包含不同类型的信息。

允许组织做出贡献将是现有数据库中的一项新功能。目前只有选民可以做出贡献:3 个贡献 table 中的每一个都有一个 ConstituentId 字段,它是 [Constituents].[ConstituentId] 字段的 FK。

我无法想出一个好方法来 link 具有贡献记录的选民和组织的贡献者记录,同时使用 Access 中可用的功能保持参照完整性,并对许多现有查询和引用 5 tables.

的程序

我唯一的想法是,我可以在 3 个贡献 table 中的每一个中添加一个 OrgId 字段,这将是 Organizations.OrgId 的 FK -- 但我必须确保其中一个并且每个贡献仅存在 2 个 FK 字段(ConstituentId 和 OrgId)中的一个,并且它们是有效的 FK。

这是一个好的解决方案还是一个丑陋的 hack?

您的解决方案将需要最少的更改,但是您将无法保持参照完整性,因为参照完整性不会让您在 承诺InKindDonationsMonetaryContributions 除非您在 both Organizations 中有 FK 值] 和 Constituents 每条记录。例如,如果您为 Organizations 设置参照完整性并为 Constituents 添加记录,则贡献 tables 中的 OrgId 必须为空,这将违反参照完整性对于 table 与 组织 table.

如果您仍想保持参照完整性,另一种方法(需要修改许多表格和报告)是将 ConstituentId 添加到 Organizations table 或将 OrgId 添加到 Constituents table,您将不得不修改报告以及列出组织、成员和贡献的表格,以区分个人所做的贡献和组织所做的贡献。

为了保持使用参照完整性的可能性,您还可以添加一个新的 Contributors table 并添加一个 CcontributorId FK to Constituents and Organizations table,与之前一样,您必须对报告、列表和总计表格进行更改。

您应该考虑最后两个选项,因为您可能会被要求 change/create 报告也涉及组织的贡献。