sql >> Database >  >> RDS >> PostgreSQL

Buitenlandse sleutel tot een-op-alles-relatie

Ik neem aan dat verwijzingen naar de customer tabel en customer_id te beginnen met de definitie van uw users tabel betekent echt verwijzen naar tenant en tenant_id .

Op een gegeven moment moet je erop vertrouwen dat je code correct is. Als dat niet goed genoeg voor je is, en je moet beperkingen hebben, dan zou ik dit doen:


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

Anders zit je vast met het dupliceren van tenant_id in user_roles .




  1. mySQL hiërarchische groepering sorteren

  2. Oracle naar mysql database spiegelen

  3. Kan geen verbinding maken met MySQL - Glassfish en Hibernate

  4. MySQL Selecteer de beste rondetijden, gegroepeerd op gebruiker