Zapisywanie listy produktow, tak aby zachowac unikalna nazwe.

0

Pisze sobie aplikacje, w ktorej uzytkownik bedzie mogl zapisywac swoja liste zakupow do bazy danych po tym jak poda nazwe tej listy pod ktora chce ja zapisac(w bazie bedzie tabela z kolumna listname i innymi kolumnami do zapisywania wlasnosci produktow z listy). I teraz zalozmy ze stworzy sobie liste i zapisze ja pod nazwa lista1 a nastepnie stworzy druga i tez bedzie chcial ja zapisac, i jak teraz zrobic zeby nie mogl jej juz zapisac jako lista1? Moim rozwiazanie byloby takie, zeby kazda liste ktora uzytkownik chce zapisac zapisywac do odzielnej tabeli w bazie, jednak nie wiem czy to jest zgodne ze sztuka zeby tworzyc az tyle tabel w bazie?A jesli nie to jak proponowalibyscie rozwiazac to inacze?

Z gory dzieki za wszelkie odpowiedzi!

0
  1. nie jest
  2. Dlaczego nie miałby stworzyc dwóch list o tej samej nazwie?
  3. Zaloz unique na kolumnie
0
  1. Stwórz tabelę z informacjami o zapisanych listach.
  2. W tabeli z pozycjami zapisanych list odnoś się do id z tabeli z pkt. 1
0

No bo jak pozniej chcialbys je rozroznic przy wczytywaniu jesli listy mialy by miec taka sama nazwe?

0

@kdmrulez mówie Ci, że źle kombinujesz.
Zrób to w dwóch tabelach:

  1. listy z kolumnami id, nazwa, id_klienta może dodatkowo jakaś data utworzenia czy coś
  2. pozycje listy: id, id_listy - klucz do listy.id, id_produktu, ilosc, cena itp.
0

hipekk tak wlasnie robie,stosuje sie do Twoich zalecen(za ktore jestem wdzieczny )w 100%. Ogolnie tylko chcialem zapytac kolege czy moze on ma jakas magiczne rozwiazanie mojego problem, no ale chyba nie:)

0

Wydaje mi się że już odkryłeś najlepszy sposób w innym poście, masz tam pytanie o łapanie wyjątku SQLiteconstraintException. Ustawienie unique na kolumnie z nazwą w bazie danych i łapanie wyjątku naruszającego unique.

0
k0sta napisał(a):

Ustawienie unique na kolumnie z nazwą w bazie danych i łapanie wyjątku naruszającego unique.

Nie... to nie jest najlepszy sposób.

0

@k0sta, a co w sytuacji gdy więcej niż jeden "user" utworzą zamówienie o tej samej nazwie ??
jeśli już, to zapewnienie unikalności sumy pól "id_user, nazwa_zamówienia"

0

@grzegorz_so, faktycznie w tym przypadku to musi być suma pól. @hipekk, tworzenie innych tabel w tym przypadku prowadzi raczej do niepotrzebnej redundancji. Jeżeli już czepiacie się wyłapywaniem wyjątku to można stworzyć po prostu jakąś metode serwisową do wyszukania (przed zapisem) takiej samej nazwy oraz podobnych i wskazanie użytkownikowi nazwę która jest wolna. (sposób nazewnictwa wolnej nazwy należy sobie wybrać np. jakiś prefix),a i dla przyśpieszenia trzeba założyć index na nazwach.

0
k0sta napisał(a):

@hipekk, tworzenie innych tabel w tym przypadku prowadzi raczej do niepotrzebnej redundancji.

Nie.
Prowadzi do:

  1. Nie powtarzania tysiące razy tych samych danych (co jest bez sensu).
    Uważasz, że "lepiej" jest tak:
    idtowaru | ilosc | cena | idklienta | nazwa | data
    ---------------- | ---------------- | ---------------- | ---------------- | ---------------- | ----------------
    5644 | 28 | 88,02 | 123 | testtesttest | 16.09.2015
    1776 | 40 | 23,6 | 123 | testtesttest | 16.09.2015
    7420 | 97 | 33,76 | 123 | testtesttest | 16.09.2015
    1907 | 8 | 51,87 | 123 | testtesttest | 16.09.2015
    288 | 48 | 35,92 | 123 | testtesttest | 16.09.2015
    5244 | 13 | 49,78 | 123 | testtesttest | 16.09.2015
    7491 | 25 | 86,72 | 123 | testtesttest | 16.09.2015
    7151 | 49 | 87,02 | 123 | testtesttest | 16.09.2015
    698 | 72 | 59,16 | 123 | testtesttest | 16.09.2015
    9200 | 65 | 41,3 | 123 | testtesttest | 16.09.2015
    1430 | 37 | 80,77 | 123 | testtesttest | 16.09.2015
    9763 | 17 | 64,05 | 123 | testtesttest | 16.09.2015
    1094 | 8 | 75,6 | 123 | testtesttest | 16.09.2015
    8459 | 18 | 62,98 | 123 | testtesttest | 16.09.2015
    4610 | 68 | 57,05 | 123 | testtesttest | 16.09.2015
    7526 | 63 | 54,7 | 123 | testtesttest | 16.09.2015
    5472 | 27 | 97,77 | 123 | testtesttest | 16.09.2015

czy tak:

idlisty idtowaru ilosc cena
1 7376 90 35,03
1 185 93 31,41
1 9778 81 33,67
1 7013 77 97,22
1 6535 31 48,94
1 5138 99 38,28
1 3176 27 61,58
1 1897 72 1,2
1 3173 90 37,61
1 770 81 86,49
1 3694 95 79,34
1 5520 2 78,39
1 2667 23 90,4
1 999 19 33,32
1 8458 71 99,59
1 644 60 77,38
1 1882 49 87
id idklienta nazwa data
1 123 testtesttest 16.09.2015
?
  1. Daje możliwość łatwiejszej rozbudowy (nie pogarszając wydajności).
    Przyjmijmy na przykład, że na liście ma pokazać się wartość i ilość pozycji.
    W Twoim modelu trzeba wykonywać SELECT z grupowaniem (i z SUM() i COUNT()) dla całej tabeli (która może urosnąć do x tysięcy pozcji)
    W moim wystarczy dodać trigger który doda te informacje do tabeli z nagłówkami - co jest bardziej optymalne?

  2. Jest wygodniejsze - nie musimy tworzyć kontroli unikalności, metod generującej unikalne nazwy itp. Dodajemy i już.

0

@hipekk masz racje, szczególnie w przypadku zliczania wartości i odpowiedzialnego za to triggera. Pozdrawiam!

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