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

Tạo trình kích hoạt

Những gì bạn có ở đây là ràng buộc bảng nhiều hàng - tức là bạn không thể chỉ đặt một Oracle CONSTRAINT duy nhất trên một cột, vì chúng chỉ có thể xem dữ liệu trong một hàng duy nhất tại một thời điểm.

Oracle chỉ hỗ trợ hai loại ràng buộc chéo hàng - tính duy nhất (ví dụ:khóa chính và ràng buộc duy nhất) và tính toàn vẹn tham chiếu (khóa ngoại).

Trong trường hợp của bạn, bạn sẽ phải tự viết mã ràng buộc - và kèm theo đó là trách nhiệm đảm bảo rằng ràng buộc không bị vi phạm khi có nhiều phiên, mỗi phiên không thể thấy dữ liệu được chèn / cập nhật bởi các phiên đồng thời khác (ít nhất, cho đến khi họ cam kết).

Một cách tiếp cận đơn giản là thêm một trình kích hoạt đưa ra một truy vấn để đếm có bao nhiêu bản ghi xung đột với bản ghi mới; nhưng điều này sẽ không hoạt động vì trình kích hoạt không thể nhìn thấy các hàng đã được chèn / cập nhật bởi các phiên khác nhưng chưa được cam kết; vì vậy, trình kích hoạt đôi khi sẽ cho phép các thành viên thuê 6 video, miễn là (ví dụ) họ có được hai nhân viên thu ngân để nhập dữ liệu vào các thiết bị đầu cuối riêng biệt.

Một cách để giải quyết vấn đề này là đưa một số yếu tố của tuần tự hóa vào - ví dụ:trước tiên trình kích hoạt sẽ yêu cầu khóa hồ sơ thành viên (ví dụ:với CHỌN CẬP NHẬT) trước khi nó được phép kiểm tra các khoản cho thuê; theo cách đó, nếu phiên thứ hai cố gắng chèn video cho thuê, nó sẽ đợi cho đến khi phiên đầu tiên thực hiện cam kết hoặc khôi phục.

Một cách khác xung quanh vấn đề này là sử dụng Chế độ xem Vật liệu hóa tổng hợp, sẽ dựa trên một truy vấn được thiết kế để tìm bất kỳ hàng nào không đạt yêu cầu kiểm tra; kỳ vọng là MV sẽ trống và bạn đặt một bảng ràng buộc lên MV sao cho nếu một hàng nào đó xuất hiện trong MV, thì ràng buộc đó sẽ bị vi phạm. Tác động của điều này là bất kỳ câu lệnh nào cố gắng chèn các hàng vi phạm ràng buộc sẽ gây ra vi phạm ràng buộc khi MV được làm mới.

Viết truy vấn cho vấn đề này dựa trên thiết kế của bạn được để lại như một bài tập cho người đọc :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lịch sử cơ sở dữ liệu cho việc sử dụng máy khách

  2. Nội năng của bảng KÉP?

  3. biểu thức oracle sai kiểu trong khi kiểm tra biến

  4. Cách Hiển thị Tất cả Đặc quyền Cơ sở dữ liệu Oracle cho Người dùng

  5. thư mục oradiag_ <user> là gì?