如何验证函数参数关系?

时间:2018-04-27 17:39:15

标签: sql postgresql

我有多个postgres函数,它们接受许多参数以便在多个表上写入。

fn_trade
(
  _product_id BIGINT[],
  _user_id BIGINT[],
  _location_id BIGINT
)

由于参数来自客户端或Node.js服务器,我需要验证数据是否存在(由FK约束处理,但不是在BIGINT []的情况下),我需要确认参数&# 39;关系是有效的。例如,我必须检查user是否存在productlocationproduct是否属于user。这种检查的复杂性随着更多的争论而增长。我最终可能会得到10个以上的论点,检查他们之间的关系会很复杂而且成本很高。

通过尝试验证函数参数,我不知道自己是否错过了一张重要图片。这是正确的方法吗?有没有更好的方法来建立对论证关系的信心,以便始终预期填充的数据?

一种可能的方法可能是预测结果并检查写入完成后是否写入结果(否则回滚)?

Postgres 9.6 +

编辑:添加了一个示例来澄清问题

表格

location (id, name) -- e.g. 1, 'Canada'

user (id, name, location_id) -- e.g. 1, Jane, 1

product (id, name, user_id, location_id) -- e.g. 1, 'skates', 1, 1

trade (id, user_id[], product_id[]) -- e.g. 1, [1,2], [1,2,3,4]

当交易发生时,我需要确认给出的数据是否与数据库中的数据相匹配。

例如,我得到:

fn_trade
(
  [1,2,3,4],
  [1,2],
  1
)

因此,加拿大产品[1,2,3,4]的用户[1,2]进行交易。用户可以将项目放在不同的位置,用户可以移动到不同的位置。

user_id[]product_id[]插入trade时,对各个ID的检查不会自动进行。我不知道是否可以将数组中的值设置为FK,因此这里的检查是手动的。我需要保证产品存在ID [1,2,3,4]。

但关系怎么样?我需要检查id是否也属于用户[1,2]。

属于用户是不够的。产品应存在于交易发生的同一地点。

对于用户,我需要知道他们是否有可能进行交易。如果他们住在不同的地方(加拿大对台湾),那么交易就不会发生。

由于客户端数据依赖于数据库,并且传递给fn_trade的数据可能不可靠,如何验证关系以证明数据对于我们的用户,产品,位置关系是真的?

0 个答案:

没有答案