根据不同表中的相关数据约束数据。这应该在数据库级别还是应用程序级别完成?

Zac*_*ber 5 database-design referential-integrity data-integrity relations

我正在开发一个数据库,其中包含我们的客户信息以及有关我们供应商的信息。其中一部分包括将我们的客户与我们的供应商匹配、这些供应商为我们的客户提供给我们的帐号以及我们向客户收取使用这些供应商服务的费用。

背景

在我现在处理的情况下,我有一个表格,其中包含我们客户的帐号、供应商 ID 和该供应商分配给我们客户的帐号。

我还有一个表格,其中包含我们所有供应商的信息和一个相关表格,其中列出了他们的所有服务以及该服务的“基本成本”。

问题

我遇到的问题是将客户与供应商的服务相关联。

如果我只是创建一个表,其中包含我们客户的帐号、供应商的服务 ID 和该服务的成本,那么我可能会遇到不提供该服务的供应商将服务分配给客户的问题。

这是我正在谈论的内容的图表(尽管很粗糙):

图表

因为 VendorServices 和 CustomerVendorServices 之间没有“检查”,所以我可能会在 CustomerVendorServices 表中 VendorServiceID 的位置插入一条记录,用于供应商不提供的服务。

这显然是一个问题,我可以通过与该数据库交互的应用程序的接口来防止它发生,但是如果有一种方法可以让数据库“检查”VendorServiceID 被插入到CustomerVendorServices 表匹配由与 VendorAccountsID/VendorAccountNumber 关联的供应商提供的服务。

我确信这不会令人困惑,如果有人试图理解它,老实说我会感到惊讶,但我想我会试一试。:)

任何帮助和/或建议将不胜感激。

Art*_*jji 1

根据我对你问题的理解,我觉得这可能有效。

  1. 从您的设计中删除 CustomerVendorServices 表。
  2. 在 VendorAccounts 表中添加 ServiceID 和 CustomerCost。
  3. 从 Vendors 表中删除 VendorAccounts 表中 VendorID 的 FK 引用。
  4. 在 VendorServices 表中的 VendorAccounts 表中添加 VendorID 的 FK 引用。
  5. 还有一个单独的服务表,由具有 ServiceDescription 和 DefaultCost 的 ServiceID 标识。
  6. 然后,VendorServices 将具有 VendorID 和 ServiceID 的复合主键。