Do większości komentarzy na ten temat zamierzam przedstawić odmienną opinię. Chociaż EAV jest ZŁE ze wszystkich powodów, które można znaleźć dokładnie wyjaśnione wiele razy tutaj na SO i DBA.SE i gdzie indziej, istnieje jedna naprawdę powszechna aplikacja, dla której większość wadliwych rzeczy z EAV jest w dużej mierze nieistotna, a (nieliczne) zalety EAV są bardzo ważne. Ta aplikacja to katalogi produktów online.
Główny problem z EAV polega na tym, że nie pozwala on bazie danych robić tego, w czym jest naprawdę dobry, czyli pomaga nadać odpowiedni kontekst różnym atrybutom informacji o różnych jednostkach poprzez ułożenie ich w schemacie . Posiadanie schematu niesie ze sobą wiele, wiele korzyści związanych z dostępem, interpretacją i egzekwowaniem integralności danych.
Faktem o katalogach produktów jest to, że atrybuty produktu są prawie całkowicie nieistotne dla systemu katalogów samo. Systemy katalogów produktów robią (co najwyżej) trzy rzeczy z atrybutami produktów.
-
Wyświetl atrybuty produktu na liście użytkownikom końcowym w postaci:{nazwa atrybutu}:{wartość atrybutu}.
-
Wyświetlaj atrybuty wielu produktów w siatce porównawczej, w której atrybuty różnych produktów są ze sobą zgodne (produkty to zazwyczaj kolumny, atrybuty to zwykle wiersze)
-
Kieruj regułami czegoś (np. cenami) w oparciu o określone kombinacje atrybutów/wartości.
Jeśli wszystko, co robi twój system, to zwraca informacje, które są semantycznie nieistotne (dla systemu), to schemat tych informacji jest w zasadzie nieprzydatny. W rzeczywistości schemat wchodzi w drogę w internetowym katalogu produktów, zwłaszcza jeśli Twój katalog zawiera wiele różnych rodzajów produktów, ponieważ zawsze musisz wrócić do schematu, aby przy nim majstrować, aby umożliwić tworzenie nowych kategorii produktów lub typów atrybutów.
Ze względu na sposób użycia nawet typ danych wartości atrybutu w katalogu produktów niekoniecznie jest (istotnie) ważny. W przypadku niektórych atrybutów możesz chcieć nałożyć ograniczenia, takie jak „musi być liczbą” lub „musi pochodzić z tej listy {...}”. Zależy to od tego, jak ważna jest spójność atrybutów w Twoim katalogu i jak skomplikowana ma być Twoja implementacja. Patrząc na katalogi produktów kilku sprzedawców internetowych, większość z nich jest gotowa zamienić prostotę na spójność.
Tak, EAV jest zły, chyba że tak nie jest.