Model EAV - problem z zaprojektowaniem części bazy

0

Witam,

chciałbym prosić użytkowników forum "Bazy danych" o pomoc w rozwiązaniu następującego problemu. Projektuję sobie model bazy EAV, który miałby korzystać z Allegro API i pozwalać generować formularze na podstawie tego, do jakiej kategorii chciałoby się wstawić produkt. Inna kategoria - inne pola formularza wymagane itd.

No i zaprojektowałem sobie część mojego rozwiązania jak widać na poniższym obrazku:
bazaEAV

Moje pytanie dotyczy fragmentu wyróżnionego strzałką. Nie wiem czy w dobry sposób przemyślałem to, iż w zależności od produktu (w tym przykładzie ubrania) i tego do jakiej kategorii należy inne będzie posiadał wartości danych wymaganych pól formularza. Najpierw zrobiłem to w ten sposób, iż w tabelę Pole_Kategoria wrzuciłem kolumnę wartosc_pola, ale doszedłem do wniosku, że dla danego pola z danej kategorii dla różnych ubrań będą różne wartości, więc to rozwiązanie odpada. Później stworzyłem to, co widać na rysunku po prawej (tabela wartosci_pól mająca przechowywać wartości przypisane do id z tabeli pośredniej pole_kategoria). Aczkolwiek po głębszym zastanowieniu się stwierdziłem, że powstanie z tymi kluczami obcymi id_ubrania i id_pole_kat zapętlenie (chyba, że się mylę).

Będę bardzo wdzięczny za wszelkie wskazówki, które pomogą mi zrozumieć, czy w poprawny sposób podszedłem do tego problemu, a jeśli nie, to od którego momentu powinienem zmienić swój tok myślenia.

Pozdrawiam

1
lukusm napisał(a):

Aczkolwiek po głębszym zastanowieniu się stwierdziłem, że powstanie z tymi kluczami obcymi id_ubrania i id_pole_kat zapętlenie (chyba, że się mylę).

A na czym takie zapętlenie miałoby polegać? :)
Będziesz miał po prostu cztery tabele, z których każda jest połączona z dwiema innymi. Każde Ubranie będzie miało tyle rekordów w Wartość_pola, ile rekordów w Pole_kategoria ma Kategoria danego ubrania.

Będę bardzo wdzięczny za wszelkie wskazówki, które pomogą mi zrozumieć, czy w poprawny sposób podszedłem do tego problemu, a jeśli nie, to od którego momentu powinienem zmienić swój tok myślenia.

Jeśli chodzi o EAV, to wygląda ok, chociaż ja nie rozumiem tego rozdzielenia na Pole_kategoria i Pole_formularza. Jak dla mnie, to powinna być jedna tabela.

0
somekind napisał(a):

Jeśli chodzi o EAV, to wygląda ok, chociaż ja nie rozumiem tego rozdzielenia na Pole_kategoria i Pole_formularza. Jak dla mnie, to powinna być jedna tabela.

Zrobiłem w taki sposób, gdyż chciałem zaimplementować relację wiele do wielu za pomocą tabeli pośredniej pole_kategoria ze względu na to, że dana kategoria może mieć wiele pól, a dany rodzaj pola może należeć do kilku kategorii. A co do tej tabeli dodatkowej, to połączyć ją i z tabelą z ubraniami i z tabelą pole_kategoria, czy tylko z jedną z nich? Bo nie wiem co będzie bardziej optymalne...

1
lukusm napisał(a):

Zrobiłem w taki sposób, gdyż chciałem zaimplementować relację wiele do wielu za pomocą tabeli pośredniej pole_kategoria ze względu na to, że dana kategoria może mieć wiele pól, a dany rodzaj pola może należeć do kilku kategorii.

Poprzez "rodzaj pola" rozumiesz możliwy typ danych?

A co do tej tabeli dodatkowej, to połączyć ją i z tabelą z ubraniami i z tabelą pole_kategoria, czy tylko z jedną z nich?

Z obiema, masz tam przecież zarówno id pola kategorii jak i id ubrania.

Bo nie wiem co będzie bardziej optymalne...

Albo coś jest optymalne albo nie jest. Nie ma czegoś takiego "bardziej optymalne".

0
somekind napisał(a):

Poprzez "rodzaj pola" rozumiesz możliwy typ danych?

Nie tyle typ danych, co typ pola. W allegro Api każde pole jest w postaci tablicy asocjacyjnej: ma fid, czyli id pola, rodzaj przechowywanej informacji (czyli np. czy to jest kolor, fason, itd.) jako string, lista możliwych wartości do wyboru itd itd.

A co do tego połączenia do obu, to moje podejście z id_ubioru i id_pola_kategorii jako dwóch kluczy obcych do odpowiednich tabel jest poprawne?

0

No tak - przecież każde ubranie musi mieć ustawioną każdą wartość pola, więc musisz mieć dwa klucze obce.

0

Ok, no to mi się już sporo rozjaśniło :) Dzięki wielkie za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1