sql >> Databáze >  >> RDS >> PostgreSQL

Cizí klíč ke vztahu one-to-all

Předpokládám, že odkazy na customer tabulka a customer_id počínaje definicí vašich users tabulka skutečně znamená tenant a tenant_id .

V určitém okamžiku musíte svému kódu věřit, že je správný. Pokud to pro vás není dost dobré a musíte mít omezení, pak bych udělal toto:


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)
);

V opačném případě zůstanete při duplikování tenant_id do user_roles .




  1. Zobrazit náhodný výsledek mysql

  2. Agregační dotazy MongoDB vs. tabulka MySQL SELECT pole1 FROM

  3. MySQL:Co je to stránka?

  4. Jak udělat MySQL Looped Připojte se ke kterým testům, pokud jsou výsledky kompletní?