Większość ludzi nie poleca EAV i znam niektóre z powodów. Jaka jest jednak różnica pomiędzy podejściem EAV a takim podejściem?
Stół komputer:
id, price, description
Stół znajomości:
id, name (possible values: LAN, USB, HDMI, ..., all all about 10)
Stół connections_computer
comp_id, conn_id
Czy to też jest EAV? Jeśli tak, jaka byłaby znormalizowana alternatywa?
Rozważ, że chcę wyszukiwać w ten sposób:
Wszystkie komputery, które mają ZARÓWNO LAN i HDMIpołączenie. W tym przypadku potrzebowałbym 1 atrybutu łączenia / filtrowania, mając go jako 1 kolumnę / atrybut, wyszukiwanie byłoby łatwe, ale miałbym wiele wartości NULL.
Jakieś zalecenia, jak to zrobić?
Odpowiedzi:
0 dla odpowiedzi № 1Twój przykład to zwykłe wiele do wielu. w EAV na nazwa atrybutu jest wartość kolumny, zamiast być Nazwa kolumny. Na przykład,
computer: {computer_id, attr_name, attr_value}
insert into computer (computer_id, attr_name, attr_value)
values
(1, "connection", "HDMI")
, (1, "connection", "USB")
, (1, "memory", "2 GB")
;
byłoby podejściem EAV.
Oto przykład ceny, którą płacisz za podejście EAV (elastyczność) w RDBMS.