MySQL:“付款”表绑定到多个可能的“服务”表

时间:2018-10-19 11:37:37

标签: mysql integer primary-key libreoffice-base

我会尽量简洁明了。

我希望有一个称为“付款”的表,该表与代表公司提供的多种服务类型的多个表绑定在一起。将“ Payment”外键添加到每个服务表中并将它们链接到“ Payments”中的主键是相当简单的,但是问题是一个实际的问题:

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

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

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

我真的很难从这个混乱中找到一个简单的解决方案。我认为最适合我的选择是以某种方式使自动填充主键在表之间有所不同,但是在这一点上我会提出任何建议。在Libre Office Base中根本可以创建某种形式的表单来满足我的需求吗?

2 个答案:

答案 0 :(得分:0)

尝试使用触发器,在插入主触发器之后,将调用触发器,并将其他信息添加到其他表中。

答案 1 :(得分:0)

我想我已经找到了一种完全可以满足我需求的方法。

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

接下来,我创建了一个名为“ PS”的表(对于“ Payments&Services”),用作多对多关系中的“中间”表。我希望人们愿意的话,可以用一种付款方式来支付许多服务的费用,但也要让他们用一笔较小的费用来支付一项服务的费用。因此,表“ For”具有一个字段,其中包含来自“付款”(ID)的外键和来自“ For”(即服务的ID)的外键。

也许听起来很烂,但是我认为这是最好的解决方案。

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