首页 > 解决方案 > MySQL:“付款”表与多个可能的“服务”表相关联

问题描述

我会尽量简明扼要。

我想要一个名为“付款”的表,该表与代表公司提供的多种服务的多个表相关联。为每个服务表添加一个“Payment”外键并将它们链接到“Payments”中的主键是相当简单的,但问题是一个实际的问题:

我想创建一个添加付款的(Libre Office Base)表单。但这不仅需要在多个表中进行 INSERT(信息的“付款”和外键的给定“服务”表),还需要在表单本身创建主键之前将主键添加到外表. 所以这个选项似乎出来了。

我试图以另一种方式做到这一点 - 将外键“服务”放入“付款”表并从那里插入其他表的 ID(主键),但所述主键是简单整数并添加说 ServiceA 的 ID = 1会使数据库误以为所有其他表中的 ID = 1 对象也是“付费”的。我知道我可以通过使它们成为 varchars 而不是整数来区分这些表之间的 ID,但是我认为没有办法让它们自动填充,对吧?

最后,我认为“类别”选项可能会有所帮助 - 从服务类型中进行选择(例如“手术”、“药品销售”、“考试”),然后键入其中一个 ID。这可以让我选择在查询中分隔相同的 ID 号。但是,这并不能解决尝试从“Surgeries”插入 ID = 40 的问题,而其他任何表都没有这样的 ID,会引发明显的错误,即关系冲突,因为数据库会认为该条目无处可去。

我真的很难从这个混乱中找到一个简单的解决方案。我认为最适合我的选项是以某种方式使自动填充主键在表之间有所不同,但在这一点上我会接受任何建议。在 Libre Office Base 中是否有可能创建一个以某种方式符合我想要的表单?

标签: mysqlintegerprimary-keylibreoffice-base

解决方案


我想我已经找到了一种方法来做我需要的事情。

首先,我创建了一个名为“For”的表,其中只有一个字段 - 一个 auto_incrementing BIGINT ID。然后,我在这个表和我的“服务”表的 ID 之间创建了一个关系(现在显然也是 BIGINT)。有了这个,它们现在都有自动递增的 ID(来自“For”的外键),但它们之间没有一个重复。我的数据库不会因为 ID 属于哪个表而感到困惑。

接下来,我创建了一个名为“PS”(代表“Payments&Services”)的表,作为多-多关系中的“中间”表。如果人们愿意,我希望人们用一次付款来支付许多服务,但也让他们用多次小额付款来支付单一服务。因此,表“For”具有来自“Payments”的外键(ID)和来自“For”的外键(又名来自服务的 ID)的字段。

这听起来可能很混乱,但我认为这是最好的解决方案。

现在,我在尝试制作的“添加付款”表格中遇到了其他问题,所以......我猜,再见一个问题;)


推荐阅读