sql >> Database teknologi >  >> RDS >> PostgreSQL

Udenlandsk nøgle til en-til-alle forhold

Jeg antager, at referencer til customer tabel og customer_id startende med definitionen af ​​dine users tabel betyder virkelig at henvise til tenant og tenant_id .

På et tidspunkt skal du stole på, at din kode er korrekt. Hvis det ikke er godt nok for dig, og du skal have begrænsninger, så er dette, hvad jeg ville gøre:


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

Ellers sidder du fast ved at duplikere tenant_id ind i user_roles .




  1. Kan %NOTFOUND returnere null efter en hentning?

  2. genopfyldningsformel oracle sql-forespørgsel

  3. SQL vælger kun rækker med maks. værdi på en kolonne

  4. Fejl med oprettelse af MySQL-lagrede funktioner FEJL 1064 &1327