如何检查其中一个值是否存在

How to check if one of the values is present

我正在对旧架构进行更改,新要求是 table 中有 3 个不同的列。至少要填一个ID。

我正在考虑实施服务以在插入之前检查是否存在任何字段。但仍然想知道是否有解决方案可以在数据库端实现这一点。

假设 table 看起来像这样:

businessId  int     businessId or userId or followerId   
userId      int     businessId or userId or followerId   
followerId  int     businessId or userId or followerId

我无法将这些字段中的任何一个标记为必填,因为插入数据时可能会插入到不同的列中。因此,如果存在任何字段,它应该允许数据库插入。

我了解到您正试图在 3 列上设置复合 NOT NULL 约束。在 Postgres 中,您可以按如下方式设置检查约束:

ALTER TABLE mytable
  ADD CONSTRAINT at_least_one_non_null
  CHECK (
      businessId IS NOT NULL
      OR userId IS NOT NULL
      OR followerId IS NOT NULL
  );

这将确保每条记录的 3 列中至少有一个不为空。