PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Khóa ngoại cho mối quan hệ một-tất cả

Tôi giả sử rằng các tham chiếu đến customer bảng và customer_id bắt đầu với định nghĩa về users của bạn bảng thực sự có nghĩa là tham chiếu đến tenanttenant_id .

Tại một số thời điểm, bạn cần tin tưởng mã của mình là chính xác. Nếu điều đó không đủ tốt cho bạn và bạn phải có những ràng buộc, thì đây là những gì tôi sẽ làm:


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

Nếu không, bạn đang gặp khó khăn khi sao chép tenant_id vào 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. ĐẶT HÀNG THEO danh sách giá trị IN

  2. Giới hạn tham gia vào một hàng

  3. Cách kiểm tra các hoạt động đang chờ xử lý trong một giao dịch PostgreSQL

  4. Làm cách nào để chuyển đổi các đối tượng NaN numpy sang SQL null?

  5. Chênh lệch múi giờ trong giờ làm việc