PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Външен ключ за връзката "един към всички".

Предполагам, че препратките към customer таблица и customer_id започвайки с дефиницията на вашите users таблица наистина означава да се отнася до tenant и tenant_id .

В даден момент трябва да се доверите, че вашият код е правилен. Ако това не е достатъчно добро за вас и трябва да имате ограничения, тогава ето какво бих направил:


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

В противен случай сте блокирали дублирането на tenant_id в user_roles .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres клиент се заключва при създаване на нова таблица

  2. Относно pglogical производителност

  3. django.db.migrations.RenameModel и име на последователност на AutoField

  4. ruby sequel gem - как да правите заявки за масиви с разширението pg_array

  5. Как да се свържете с PostgreSQL база данни през SSL?