【发布时间】:2018-07-17 18:33:18
【问题描述】:
我正在将发票组件构建到我的 Web 应用程序中。 在我的架构中,我们有某些客户可能希望开具发票的级别。
Projects -> Sites -> Jobs -> Phases -> Teams
每一个都是数据库中的表,并且与它们的父级有关系。
我计划构建一个 Items 表,该表将包含有关我们将如何为每个级别完成的工作开具发票的一般信息,即名称、默认价格、计量单位等.
然后,用户将创建一个 发票模型,他们可以将 Items 列表关联到该模型,以便这些可以重复使用。
这就是我的问题发挥作用的地方。当需要开发票时,我需要将 发票模型 与上述级别之一相关联。我不想为这些级别中的每一个创建一个到发票模型的链接表。我想以某种方式保持表之间的关系完整性。但是,如果将来有其他东西可以计费,我不想为了考虑到这个新的“计费级别”而进行巨大的数据库更改和/或代码更改。
我有没有办法在不创建新表将发票模型链接到关卡的情况下保持关系完整性?
【问题讨论】:
-
多态关系丢失了参照完整性,但听起来这对您来说可能是一个不错的选择。
-
我不确定我是否理解“我需要将发票模型与上述级别之一相关联”。如果发票是,正如您所说的那样,是一个项目列表,那不就是 关系吗?您有一个 Invoices 表、Items 表和一个 Invoice_Item (invoiceId, itemId) 表。您只有 一个“链接”表,而不是每个项目类型一个。
-
你可以在单个表中对不同级别的表有多个可为空的 FK,因此完整性将在那里
-
@BillyStalnaker,专业人士将能够“附加”新实体类型而无需扩展您的表格。缺点是会丢失一些参照完整性,具体取决于实现。这可能是一个很好的阅读:hashrocket.com/blog/posts/…
-
@BillyStalnaker 是的,对于所有解决方案都是一样的,对于单个多态表,您必须多次阅读它,对于单独的表,您也将阅读所有这些表(它们总共等于单个表)
标签: php mysql invoice relational integrity