sql >> Databasteknik >  >> RDS >> PostgreSQL

Utländsk nyckel till en-till-alla-relation

Jag antar att referenser till customer tabell och customer_id börjar med definitionen av dina users Tabell betyder egentligen att hänvisa till tenant och tenant_id .

Vid något tillfälle måste du lita på att din kod är korrekt. Om det inte är tillräckligt bra för dig och du måste ha begränsningar, så är det här jag skulle göra:


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

Annars har du fastnat för att duplicera tenant_id till user_roles .




  1. Kan jag kopiera :OLD och :NEW pseudo-poster i/till en Oracle-lagrad procedur?

  2. Hur man hittar tabeller som innehåller en specifik kolumn i SQL Server

  3. Hur man genererar satsen create table sql för en befintlig tabell i postgreSQL

  4. anslutning vägrade postgres docker