Tôi giả sử rằng các tham chiếu đến customer
bảng và customer_id
bắt đầu với định nghĩa về users
của bạn bảng thực sự có nghĩa là tham chiếu đến tenant
và tenant_id
.
Tại một số thời điểm, bạn cần tin tưởng mã của mình là chính xác. Nếu điều đó không đủ tốt cho bạn và bạn phải có những ràng buộc, thì đây là những gì tôi sẽ làm:
create or replace function user_role_check(_user_id uuid, _role_id uuid)
returns boolean as $$
select count(*) = 1
from roles r
join users u
on u.tenant_id = r.tenant_id
where u.id = _user_id
and r.id = _role_id;
$$ language sql;
create table user_roles (
id uuid not null primary key,
user_id uuid references users(id),
role_id uuid references roles(id),
check (user_role_check(user_id, role_id)),
unique (user_id, role_id)
);
Nếu không, bạn đang gặp khó khăn khi sao chép tenant_id
vào user_roles
.