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

Truy vấn trên thiết kế SQL EAV

Bạn phải thêm một vị từ cho mỗi tổ hợp tên / giá trị:

  SELECT <whatever you need>
    FROM Entity_Table et
   WHERE et.e_name = 'Joe'
     AND EXISTS (SELECT 1 
                   FROM AttributeValue_Table avt
                   JOIN Entity_AttrVal ea ON ea.e_id = et.e_id
                  WHERE ea.a_id = avt.av_id
                    AND avt.prop_name = 'color'
                    AND avt.prop_value = 'black')
     AND EXISTS (SELECT 1 
                   FROM AttributeValue_Table avt
                   JOIN Entity_AttrVal ea ON ea.e_id = et.e_id
                  WHERE ea.a_id = avt.av_id
                    AND avt.prop_name = 'whiskers'
                    AND avt.prop_value = 'short')

(Tôi xin lỗi nếu phương ngữ Máy chủ Sql của tôi vượt qua được)

Để thực hiện một số phép so sánh tùy ý, bạn phải tạo SQL và thực thi nó.

Như đã nói trong một bình luận, điều này cho thấy rằng EAV là một vấn đề (thực sự là một mô hình phản đối), nhưng theo kinh nghiệm, tôi biết rằng đôi khi không có giải pháp thay thế đơn giản nếu chúng ta bị ràng buộc vào một cơ sở dữ liệu quan hệ.




  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ài liệu Oracle

  2. PRVG-2027 Chủ sở hữu tệp không nhất quán giữa các nút

  3. Thay thế hoặc xóa nhiều dòng văn bản trong quy trình được lưu trữ oracle

  4. ODP.NET có thể phân phối lại không?

  5. Làm cách nào để xem các truy vấn được thực thi với Oracle?