Szczęśliwego nowego roku dla wszystkich! Właśnie rozpocząłem modelowanie danych aplikacji ASP.NET MVC 5 dla klienta, który prowadzi działalność związaną z wynajmem narzędzi. Częścią rozwiązania jest utworzenie funkcji administratora (zaplecza), za pomocą której użytkownicy administracyjni mogą tworzyć/edytować niestandardowe atrybuty lub metadane narzędzi, które są dołączone do każdego narzędzia z określonej grupy narzędzi. Pracuję nad stwierdzeniem, że w czasie wykonywania aplikacja nie powinna wiedzieć, jaki będzie schemat metadanych. Zacząłem od tego: Tak, wiem ... kolejny koszmar EAV! Wiem, że jeśli dane są poprawnie normalizowane i tworzone są odpowiednie indeksy, to nie powinno być tak źle. Ale szczerze mówiąc, nie widzę innego wyboru. Tak więc na przykład: zbożoweEntityFramework 6 - Obsługa zdefiniowanych przez użytkownika atrybutów
akumulatorowe Bosch
- grupy narzędzi: Wiertła
- Marka: Bosch (listitem - oznakowane od
MetaAttributeListOption
tabeli) - Typ: Cordless (listitem - oznakowane od
MetaAttributeListOption
tabeli) - Uchwyt bezkluczowy: Tak (boolean)
- Napięcie: 14,4 V (tekst)
- ...
Teraz Atrybuty te będą służyć celom: 3
- Wyświetl na Frontend jako "Specyfikacje"
- użyte do filtrowania Narzędzia na Frontend
- (potencjalnie) Używane w raportowaniu określ "Popularne marki" (na przykład)
Zgaduję więc, że utknąłem z RDBMS (SQL Server) do tego. Wiem, że popularnym podejściem do tego byłoby użycie jakiegoś rozwiązania NoSQL, ale szczerze mówiąc, nie mam zbyt dużego doświadczenia, aby używać go w połączeniu z MSSQL. Mogłabym połączyć tabele Values
w jedną tabelę, gdzie każda wartość typu danych jest we własnej kolumnie, ale to pozostawi mnie z mnóstwem null do walki.
Więc ja zostaję z następującymi pytaniami gdyby był Pan uprzejmy mi pomóc z:
- Czy tego modelu pracy pod względem mojego wymogu? Nie jestem pewien, czy poprawnie zaprojektowałem relację tabeli
MetaAttributeListOption
. - Czy istnieje alternatywa dla tej metody EAV?
- Zakładając, że mój model powyżej (lub jego pochodnej) jest moją jedyną opcją, w jaki sposób mam to wdrożyć z Entity Framework 6? W przypadku stron ASP View w zapleczu administracyjnym, wyobrażam sobie, że potrzebuję jakiegoś HTML Helper, aby określić poprawnego edytora do renderowania, a następnie zapełnić go odpowiednio.
Byłbym wdzięczny za pomoc społeczności StackOverflow w tej sprawie. Daj mi znać, jeśli potrzebujesz więcej informacji i nie zamykaj tego, jeśli uważasz to za nie na temat, ponieważ uważam, że moje pytania dotyczą programowania. Dziękuję Ci!
EDIT: Zaczynam bounty na tej wartości 200 moich własnych punktów ... 100 za pomoc/doradza mi na moje pytania 1 & 2 i 100 punktów na pytanie 3. podziękowaniem Ci
Hey Dave, Wow! Dziękuję za wyczerpującą odpowiedź. Proszę pozwolić mi trochę czasu na przeczytanie, zrozumienie i wdrożenie. Jeśli mam jakieś pytania lub uwagi, opublikuję je tutaj :) – Shalan
Przepraszamy za niedostarczenie - używam EF Code First, ale z C#. Ale jestem całkowicie komfortowy, konwertując twój VB – Shalan
Cieszę się, że znalazłeś go kompletnie :) Na szczęście znalazłem to pytanie w tym samym dniu, w którym tworzyłem bardzo podobny model dla siebie, więc właśnie włożyłem twój model do mojego kodu do pisania i testowania.Przepraszam za brak źródeł, moja pamięć jest trochę niewyraźna, gdy widziałem ten wzór. –