Saya berasumsi bahwa referensi ke customer
tabel dan customer_id
dimulai dengan definisi users
Anda tabel benar-benar berarti merujuk ke tenant
dan tenant_id
.
Pada titik tertentu Anda harus mempercayai kode Anda untuk menjadi benar. Jika itu tidak cukup baik untuk Anda, dan Anda harus memiliki kendala, maka inilah yang akan saya lakukan:
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)
);
Jika tidak, Anda akan terjebak menduplikasi tenant_id
ke dalam user_roles
.