Preferencje uzytkownika

0

Witam, pozno jest moj mozg ma zwiechy wiec moze ktos mi tutaj pomoze:)

Powiedzmy ze jest wielu uzytkownikow

wiec:

User

UserID
UserName
itd.

teraz kazdy z tych uzytkownikow ma swoje preferencje do procesow ktore dzialaja na kompie

Preferences

PrefID
Name
ProcessName

czyli przykladowo:

  1. | MSOFFICE | word.exe
  2. | MSOFFICE | excel.exe
    itd.

Tak wiec potrzebuje sposobu na to zeby kazdy uzytkownik mogl miec wiele takich preferencji np. Uzytkownik ID1 ma PrefID 1,2,5,10 itd., Uzytkownik ID2 ma PrefID 1 3 4 9 itd itd itd.
Uzywam MYSQL i Javy (JDBC) i bede musial pobrac te dane i stworzyc obiekty, tak wiec jak myslicie jaki jest najlepszy sposob na to zeby pozniej nie musial lapac sie za glowe jak bede pobieral dane?:) Chodzi mi o to jak zrobic tak zeby baza danych byla "znormalizowana". Przy pobieraniu danych pewnie bede tworzyl "widoki" zeby bylo lajtowniej ale chodzi mi ogolnie o szkielet jak to powinno wygladac...

Za wszelkie sugestie, dzieki baaaaaaardzo:)
Pozdro, Marcin

0

Tabela Preferences powinna mieć też UserID.

0
somekind napisał(a)

Tabela Preferences powinna mieć też UserID.

dobra ale wtedy mam

  1. | MSOFFICE | word.exe | 1 , 3 , 4

albo

  1. | MSOFFICE | word.exe | 1
  2. | MSOFFICE | word.exe | 3
  3. | MSOFFICE | word.exe | 4

?

update.

obie opcje wydaje mi sie ze nie beda dobrze trybic bo:

  1. jezeli mam 1, 3,4 to jak pobiore processy dla uzytkownika np. nr1 ? select * from apppref where userid like '%1%'; ? a jak bedzie ponad 10 uzytkownikow to pobierze mi tez i 11 i 12 i 13 i 14 itd

  2. PrefID juz nie jest unikalnym ID ;s

Pozdro
Marcin

0

Tabela pośrednia z UserId, PrefID (klucz na obu)

0
marcinEQ napisał(a)

obie opcje wydaje mi sie ze nie beda dobrze trybic bo:

  1. jezeli mam 1, 3,4 to jak pobiore processy dla uzytkownika np. nr1 ? select * from apppref where userid like '%1%'; ? a jak bedzie ponad 10 uzytkownikow to pobierze mi tez i 11 i 12 i 13 i 14 itd

Po pierwsze to nie jest żadna postać normalna, pomysł przechowywania danych w ten sposób jest zły i nigdy tak nie rób.

  1. PrefID juz nie jest unikalnym ID ;s

Jak może nie być unikalne, skoro jest kluczem głównym?

Nie rozumiem, co złego jest w tabeli z kolumnami: PrefID, UserID, Name, ProcessName? (PrefID jest kluczem głównym, UserID kluczem obcym do tabeli użytkowników.)
Taka konstrukcja spełnia założenie przechowywania wielu preferencji dla jednego użytkownika, wybrać je będzie można bez problemu zapytaniem select * from Preferences where UserID=77.

0

Taka konstrukcja tabeli powoduje wielką redundancję (niepotrzebną), a poza tym umożliwia pomyłki typu:
1 | MSOFFICE | word.exe
2 | MSOFFICE | winword.exe
3 | MSOFFICE | word

0
Marcin.Miga napisał(a)

Taka konstrukcja tabeli powoduje wielką redundancję (niepotrzebną), a poza tym umożliwia pomyłki typu:
1 | MSOFFICE | word.exe
2 | MSOFFICE | winword.exe
3 | MSOFFICE | word

Żadnej redundancji, wszakże każdy użytkownik może stworzyć swoją dowolną listę, tak przynajmniej można zrozumieć pytanie autora.
No chyba, że jest jakiś słownik tych procesów, wówczas lepszym rozwiązaniem jest tabela pośrednia łącząca ID użytkownika z ID słownika. Tylko w tym wątku o słowniku nie wspominał jeszcze. ;]

0

No właśnie wydaje mi się, że w pierwszym poście była (nieświadoma) mowa o słowniku. Właśnie ta tabela z preferencjami (bez użytkowników). Dlatego mu pisałem o tabeli pośredniej.

0
Marcin.Miga napisał(a)

No właśnie wydaje mi się, że w pierwszym poście była (nieświadoma) mowa o słowniku. Właśnie ta tabela z preferencjami (bez użytkowników). Dlatego mu pisałem o tabeli pośredniej.

bedzie ~10 preferencji z gory ustalonych i uzytkownik dodatkowo bedzie mogl dodac 'zaawansowany' process i wtedy w name bedzie 'advanced' czy cos w tym stylu, ale moze sie tez zdarzyc ze 2ch uzytkownikow poda jednak takie same processy i nie ma sensu dodawac 2x ten sam process do bazy danych...

po prostu chcialbym sie dowiedziec jak zrobic aby tabele preferencji polaczyc z wieloma uzytkownikami, czyli mam np 15 preferencji i np 10 uzytkownikow korzysta z tych preferencji gdzie paru uzytkownikow moze korzystac z tego samego processu np. ID 4... Sposob z UserID w pref tabeli jest raczej miernym rozwiazaniem, zreszta tak mi sie wydaje bo albo bede mial UserID po przecinku w tej tabeli a pozniej problem z pobraniem takich danych albo bede mial od cholery danych co sie powtarzaja... Moze macie jakies inne pomysly jak to wykonac, ogolne jest zalozenie ze kazdy uzytkownik ma xx preferencji. Wspomnieliscie o tabeli posredniej, jak to mialoby dokladnie wygladac?

Dzieki,
Marcin.

0

Tabela_posrednia
UserId
PrefId

users - tabela_posrednia - preferencje

czyli realizuje to relację n:n

Ale ładny tekst na stronie MS znalazłem :)

Relacje wiele-do-wielu
W przypadku relacji wiele-do-wielu dla wiersza w tabeli A może istnieć wiele zgodnych wierszy w tabeli B i odwrotnie. Relacja tego typu jest tworzona przez zdefiniowanie trzeciej tabeli, zwanej tabelą skrzyżowań, której klucz podstawowy składa się z kluczy obcych zarówno z tabeli A, jak i z tabeli B. Na przykład tabele Autorzy i Tytuły są związane relacją wiele-do-wielu, definiowaną przez relację jeden-do-wielu z każdej z tych tabel, skierowaną do tabeli AutorzyTytułów. Klucz podstawowy tabeli AutorzyTytułów jest kombinacją kolumny id_au (klucz podstawowy tabeli Autorzy) i kolumny id_tytułu (klucz podstawowy tabeli Tytuły).

0
marcinEQ napisał(a)

bedzie ~10 preferencji z gory ustalonych i uzytkownik dodatkowo bedzie mogl dodac 'zaawansowany' process i wtedy w name bedzie 'advanced' czy cos w tym stylu, ale moze sie tez zdarzyc ze 2ch uzytkownikow poda jednak takie same processy i nie ma sensu dodawac 2x ten sam process do bazy danych...

Czyli potrzebujesz słownika z możliwością dodawania rekordów przez użytkowników. I tu się rodzi pewien problem - czy użytkownik A może mieć dostęp do procesów dodanych przez użytkownika B, czy tylko tych wspólnych i swoich?

0
somekind napisał(a)
marcinEQ napisał(a)

bedzie ~10 preferencji z gory ustalonych i uzytkownik dodatkowo bedzie mogl dodac 'zaawansowany' process i wtedy w name bedzie 'advanced' czy cos w tym stylu, ale moze sie tez zdarzyc ze 2ch uzytkownikow poda jednak takie same processy i nie ma sensu dodawac 2x ten sam process do bazy danych...

Czyli potrzebujesz słownika z możliwością dodawania rekordów przez użytkowników. I tu się rodzi pewien problem - czy użytkownik A może mieć dostęp do procesów dodanych przez użytkownika B, czy tylko tych wspólnych i swoich?

Chodzi o to ze kazdy uzytkownik bedzie mial pare opcji:

  1. Bedzie mial przedstawione pare 'preferencji' standardowych typu word excel itd. i bedzie mogl zaznaczyc sobie 'ptaszkiem' ktore programy sobie wybiera

[ ] Word
[ ] Excel
[ ] Costam

i przycisk [SAVE] czyli jak zaznaczy Worda to dodaje Worda do swoich preferencji

  1. Opcja 'zaawansowana' czyli uzytkownikownikowi odpala sie jakis tam jFrame i w nim zaprezentowane jest JList z wszystkimi 'zaawansowanymi' processami ktore dodal do swoich preferencji. Dodatkowo bedzie mogl zaznaczyc jakis proces na jList i usunac go ze swoich preferencji (usunie z preferencji, ale jezeli 2ch uzytkownikow korzysta z tego procesu to wtedy nie powinien ten proces byc usuniety z db). aha i jeszcze bedza proste jTextFieldy gdzie uzytkownik wpisuje process i nazwe i dodaje sobie do bazy.

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