sql >> データベース >  >> RDS >> PostgreSQL

1対すべての関係への外部キー

    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. SQL Serverで、OracleのSELECT FOR UPDATE WAITと同様の方法で単一の行をロックするにはどうすればよいですか?

    2. postgresql:オフセット+制限が非常に遅くなります

    3. テーブルでの自己結合と再帰的選択

    4. PostgreSQLのlast_valueはnullを無視します