Mam takie pytanko odnośnie modeli i przechowywania danych mam model User który ma mieć wiele wiele (wiadomo z góry ile maksymalnie) portfeli (Wallets) .
I teraz taka sprawa czy mieć jeden uniwersalny model Wallet gdzie będę trzymał wszystkie portfele użytkownikówlub np 3 modele Wallet_Euro, Wallet_Dollar, Wallet_Pln, każdy User może mieć po jednym portfelu z każdej waluty.
Co będzie bardziej wydajne powiedzmy że mamy 100 userów i możemy mieć w jednej tabeli 400 wpisów(dla unwersalnego modelu Wallet) lub w 3 tabelach po 100 wpisów dla ( Wallet_Euro, Wallet_Dollar, Wallet_Pln)
Tylko we wszystkich portfelach będą takie same pola z różnicą nazwy i nie bardzo widzę zastosowanie STI chyba będę trzymał wszystko w jednym modelu. Będzie to wyglądać mniej więcej tak
id | wallet_type | balance | user_id
1 euro 1000 1
2 pln 0 1
3 usd 100 2
Gdyby miał być to STI to nawet nie wiem jak za bardzo miało by to wyglądać, może gdy by była różnica więcej niż jednego pola to bym widział zastosowanie .
Czy rozwiązanie każda waluta = nowy model jest zła ? Z góry wiem że będę używał tylko trzech walut (jeżeli dojdzie potrzeba czegoś nowego to dodaję nowy model).
Właśnie takie same pola sugerują, aby użyć STI I wcale nie musisz mieć jednego modelu. Możesz mieć model podstawowy (bazowy), w którym trzymasz metody typowe dla każdego modelu (np. Wallet) oraz modele dziedziczące z modelu bazowego z własnymi metodami (np. Wallet_euro, Wallet_dollar itp.).
Moim skromnym zdaniem (więc możesz się nie zgodzić ) takie rozwiązanie jest zdecydowanie złe. Nawet delikatnie bym zasugerował, że nawet bardzo zdecydowanie złe.
Po pierwsze - dodanie modelu (czyli przeprogramowanie całego systemu) tylko po to, żeby obsłużyć nową walutę jest kiepskim pomysłem - przynajmniej z punktu widzenia programisty, bo biznesowo to może być strzał w dziesiątkę. Musisz tylko każdą walutę włączać oddzielnie i za każdą kasować tygodniową stawkę serwisową.
Po drugie, czym tak na prawdę różni się portfel euro od portfelu złotówek? Po co tworzyć na to nowy model? Jeden model z atrybutem currency wystarczy w zupełności. Fizycznie przecież nie szukam po sklepach skórzanego portfela do euro. A czy może ma Pani też takie same, tylko do rubli?
Jeżeli chcesz tworzyć nową klasę obiektów, to podstawowe pytanie jest: czy ich działanie czymś się różni? Bo chyba tylko różnice w działaniu (a i to nie zawsze - czasami wystarcza if w jakiejś metodzie) uzasadnia tworzenie nowej klasy obiektów. Zobacz, że masz jedną klasę Array, a nie każdą na inny typ przechowywanych obiektów.
Niezupełnie.
Jeżeli wszystkie typy portfeli będą miały takie same metody, a różniły się np. tylko wartościami do przeliczeń walut, nie ma sensu korzystać z STI. Po co niepotrzebnie dodawać kilka pustych klas? W tej chwili mogą to być 3 typy, ale później walut może być 50.
Na początek zrobiłbym 1 model, dodał rzeczywiście kolumnę “wallet_type”, a z STI skorzystał tylko jeżeli zachowanie różnych typów portfeli zacznie się od siebie mocno różnić.