PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kunci Asing untuk hubungan satu-ke-semua

Saya berasumsi bahwa referensi ke customer tabel dan customer_id dimulai dengan definisi users Anda tabel benar-benar berarti merujuk ke tenant dan tenant_id .

Pada titik tertentu Anda harus mempercayai kode Anda untuk menjadi benar. Jika itu tidak cukup baik untuk Anda, dan Anda harus memiliki kendala, maka inilah yang akan saya lakukan:


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

Jika tidak, Anda akan terjebak menduplikasi tenant_id ke dalam 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. SET extra_float_digits =3 di postgresql

  2. Fungsi pemicu PostgreSQL 9.3 untuk dimasukkan ke dalam tabel dengan nama parameter

  3. Postgres Tertanam untuk Tes Boot Musim Semi

  4. Django. PostgreSQL. regexp_split_to_table tidak berfungsi

  5. Postgresql date_trunc dengan zona waktu menggeser zona sebesar 1 jam