Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zapytania dotyczące EAV SQL Design

Musisz dodać predykat dla każdej kombinacji nazwy/wartości:

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

(Przepraszam, jeśli mój dialekt Sql Server świeci)

Aby wykonać dowolną liczbę porównań, musisz wygenerować kod SQL i wykonać go.

Jak powiedziano w komentarzu, pokazuje to, że EAV jest uciążliwy (właściwie anty-wzorzec), ale z doświadczenia wiem, że czasami po prostu nie ma alternatywy, jeśli jesteśmy przywiązani do relacyjnej bazy danych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę zdefiniować typ w oracle11g, który odwołuje się do kolekcji tego typu?

  2. Jak mogę zapytać o coś, co zaczyna się od określonych znaków?

  3. Jaki typ danych powinienem powiązać jako parametr zapytania, aby używać go z kolumną NUMBER(15) w Oracle ODBC?

  4. Oracle:sekwencja MySequence.currval nie jest jeszcze zdefiniowana w tej sesji

  5. Wybierz tylko kolumny bez wartości Null w Oracle