![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Za namową kolegów postanowiłem napisać od nowa swoją aplikację i poprawić w niej błędy. Jako że nie jestem zawodowcem to każda tabela jest oddzielnie i nie posiada relacji między sobą. Bardzo zależy mi na tym, żeby każdy użytkownik, miał swoją rodzinę i mógł się przyłączać do innych rodzin. Osoba nie należąca do jakiejś rodziny nie widzi prezentów tej rodziny, oraz nie może wysyłać do nich komunikatów. Tak opracowałem tabele
Jeśli będą wam potrzebne inne dane lub coś wytłumaczyć , to mogę napisać. Założenia aplikacji , albo już piszę 1. Możliwość, logowania, rejestracji , oraz zmiany hasła 2. Podział rodzinny i możliwość wybierania do której rodziny chce się należeć 3. Użytkownik nie należący do danej rodziny nie może wysyłać komunikatów i nie widzi prezentów z rodzin do których nie należy 4. Użytkownik widząc prezent , może go sobie zarezerwować i zabrać z głównego koszyka do siebie ( prezenty zarezerwowane ) 5. Osoba umieszczająca prezent może go wycofać jeśli tylko nie jest zarezerwowany ( jeśli ma rezerwację może wysłać powiadomienie, ale nie wie do kogo i poprosić o zwolnienie swojego prezentu uzasadniając to informacją) 6. Użytkownicy , mogą zwalniać prezenty i umieszczać je w głównym koszu 7. Użytkownicy mogą edytować swoje dane ( imię nazwisko hasło, kod_rodziny) Co Wy na to, jakaś pierwsza wersja już tego jest, ale jeszcze dużo do dopracowania w niej. Dzięki za pomoc lub wskazówki |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
A to nie przewidujesz przynależności do kilku rodzin? Choćby poprzez małżeństwo. Zrób to najlepiej jako relacja wiele do wielu.
Rodzina ma swoje dane, w tym id. Użytkownicy mają swoje dane, w tym id. Tworzysz jeszcze tylko tabelę łączącą z kolumnami: id_rodziny i id_użytkownika. To załatwia sprawę przynależności. Jeśli jednak planujesz jedynie Użytkownik jest członkiem jednej rodziny to wystarczy, że jedno z jego pól wskazuje na id_rodziny i wszystko (tak masz teraz). Całość rozwiązań poza tym w sumie jest w podanym schemacie do zrealizowania. Nie wiem po co masz w prezent realizację. Inna sprawa, że niepotrzebne jest tam pole rezerwacja. Skoro coś nie jest zarezerwowane to prezent ma id_rezerwującego = 0, a gdy ktoś zarezerwuje, zmieni się tam wartość na id tej osoby. Inna sprawa, że chyba sam nie wiesz po co niektóre dane masz. Taki kod rodziny. Raz jest jako int, innym razem varchar. Link w prezencie niepotrzebny. Zapewne tworzyć go będziesz dynamicznie. Z uprawnieniami usera jako varchar to chyba omyłkowo zamiast int. To samo z blokadą. Ogólnie zastanów jeszcze czy wszystkie pola Ci sa potrzebne i jakie dane w nich przechowujesz. To pomoże w wyborze właściwego typu. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
Dzięki,
Tak z rezerwacją się zgadzam nie widziałem tego, ale faktycznie pole jest zbędne. Jeśli chodzi o przynależność, to będzie kilku użytkowników w jednej rodzinie, ale każdy będzie miał swoją prywatną do której też będzie należał, czyli tak rodzina_AP -> Osoba Ania -> Osoba Piotrek -> jest dziecko, ale za małe do tej zabawy rodzina_NR - > Osoba Natalia -> Osoba Rafał rodzina_SA -> Osoba Sabina -> Andrzej rodzina_KB -> Krystyna -> Bogusław Teraz tak, moją główną rodziną jest rodzina_AP, ale będę nalerzał do rodzina_SA ( teściowei ) i rodzina_NR (szwagrowie ) oraz rodzina_KB ( moi rodzice ). Ale osoby z rodzina_NR nie będą w rodzina_KB i mają nie widzieć ich prezentów. Czy możesz przybliżyć jak ma wyglądać ta tabela łącząca ? Link w tabeli prezenty musi być, bo tak użytkownicy umieszczają link do fotografia lub do strony na której można kupić ten prezent. Jest to taka dodatkowa informacja w szczegółach prezentu. Będę wdzięczny za wyjaśnienie |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Z tabelą łączącą to standardowa relacja wiele-do-wielu. Rodziny to tylko określenie tychże, bez wyszczególniania członków. Tak jakby po prostu jej opis. Użytkownicy to po prostu tylko dane użytkownika. Tabela łącząca zaś to właśnie łącznik. Wpisy w niej oznaczają jaki user jest w jakiej rodzinie. W ten sposób łączysz w pary id_usera i id_rodziny. Taka para pozwala łatwo określić uprawnienia. Przykładowo w tej tabeli będziesz mial wpisy, że należysz do swojej rodziny AP, ale także rodziny SA, NR i KB. W tabeli tej więc masz 4 wpisy. Widzisz w nich wszystko. Jednakże jakakolwiek osoba z rodziny KB choćby dopóki nie ma jawnie powiedziane, że należy do innej to nie ma w niej uprawnień. Powoduje to wiele rekordów w tejże tabeli, ale pozwala bardzo dokładnie określić kto gdzie przynależy. Zauważ, że robiąc zapytanie o rodziny usera szukamy wpisów z określonym id_usera. Jeśli szukamy członków określonej rodziny wybieramy wszystkie z określonym id_rodziny. Wystarczy sprawdzać w określonych przypadkach czy w tabeli istnieje rekord o odpowiedniej kombinacji id_usera - id_rodziny by wiedzieć co można a czego nie można komuś wyświetlić (IMG:style_emoticons/default/smile.gif) Przykładowo prezent jest od rodziny AP i wchodzi ktoś z rodziny NR. Bierzemy id gościa i sprawdzamy, czy istnieje rekord łączący jego id z id rodziny AP. Jeśli brak to znaczy, że nie ma tego prezentu widzieć, bo nie jest skoligacony.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
hmm, nadal kiepsko z moją wyobraźnią.
Nie rozumiem jak to ma być. Rodzin nigdy nie będę miał tylu co użytkowników ? więc nie będzie tyle samo ID_rodzin co ID_uzytkowników chyba ,że jak dodam użytkownika to w bazie rodzin powstanie taka sama rodzina , ale z innym id czyli ID_RODZIN | KOD_RODZINY | NAZWA RODZINY 1 | 111213 | rodzina_AP 2 | 111213 | rodzina_AP 3 | 141516 | rodzina_NR 4 | 141516 | rodzina_NR 5 | 171819 | rodzina_SA 6 | 171819 | rodzina_SA IDUZYTKOWNIKA | nazwa_uzytkownika 1 | piotr 2 | ania 3 | natalia 4 | rafał 5 | sabina 6 | andrzej TABELA ŁĄCZĄCA ID_LACZENIA | ID_RODZINY | ID UŻYTKOWNIKA 1 | 1 | 1 2 | 2 | 2 3 | 3 | 3 4 | 4 | 4 5 | 5 | 5 6 | 6 | 6 7 | 3 | 1 8 | 3 | 2 Kurcze jakoś nie widzę tego Ten post edytował redelek 26.04.2010, 08:35:53 |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
To zależy czym dla Ciebie jest rodzina... Nigdy nie osiągniesz takiego stopnia, że rodzin i użytkowników będzie tyle samo bo to bezsensowne. Rodzin jest maksymalnie tyle ile węzłów. Przykład?
Babcia i dziadek od strony ojca, babcia i dziadek od strony matki, Twoi rodzice, Ty, Twoje dziecko i po 2 siostry/bracia Twoich rodziców. Co to daje? 12 użytkowników i teoretycznie 9 rodzin: Dziadkowie matki, dziadkowie ojca, rodzice, Ty, Twoje dziecko i każda z ciotek wujków (czyli 4 rodziny). Do rodziny dziadków matki należą dziadkowie i Twoja matka oraz jej rodzeństwo. Jeśli zechcą mogą oni do tej rodziny dołożyć swoje dzieci i tak dalej. To utworzy rodzinę w sensie genealogicznych. Od strony ojca jest to samo. Zauważ jednak, że Twoi rodzice są na styku tych rodzin. Mogą, ale nie muszą do swoich rodzin małżonka dołożyć. Jednocześnie sami są rodziną z Tobą jako jej członkiem. Osoba zarządzająca rodziną decyduje kto jest jej członkiem i ewentualnie wysyła "zaproszenie do rodziny". Wpisów w tej tabeli łaczącej jest dużo, ale pozwala ona bardzo dokładnie określić przynależność. Przynależność jest jednostkowa. Co to znaczy? Ano to, że przynależność jest ustalana dla każdej osoby z osobna. Jeśli ktoś jest w rodzinie to nie rozciąga to przywilejów na innych członków drugiej jego rodziny. Tyczy tylko jego i nikogo innego. Stąd można przynależeć do wielu rodzin. Rozrysuję Ci teraz rodziny: Dziadkowie matki - 1 (user 1 i 2) Dziadkowie ojca - 2 (user 3 i 4) Rodzice Twoi - 3 (user 5 i 6) Twoja rodzina - 4 (user 7 i 8) Twoje dziecko - 5 (user 9) Bracia i siostry rodziców - 6 (user 10), 7 (user 11), 8 (user 12), 9 (user 13) Tabela łącząca 1 -> 1, 2, 5(matka), 9(siostra matki), 10 ( druga siostra matki) 2 -> 3, 4, 6(ojciec), 11(brat ojca), 12, (siostra ojca) 3 -> 5, 6, 7 4 -> 7, 8, 9 5 -> 9 6 -> 10 7 -> 11 8 -> 12 9 -> 13 To tylko zależność rodzina = rodzice + dziecko, ale jeśli chcesz, możesz dać do rodziny swoich potomków lub kogoś z bocznej gałęzi. Wtedy dojdzie on jako użytkownik tejże rodziny. Przykładowo dziadkowie mogą zechcieć dodać swoje wnuki co sprawi, że Twoje dziecko (user 9) pojawi się w rodzinach 1 i 2. Mogą też zechcieć dziadkowie ojca Twoją matkę dodać. Dzięki czemu rodzina 2 rozszerzy się o usera 5. Nie zmienia to jednak faktu, że tylko ona jest do niej zaliczana... Jej rodzice i rodzeństwo już nie i nie mają do niczego dostępu w rodzinie 2. Tak można tworzyć całe zależności. Ilość rekordów w tej tabeli jest duża, ale są to malutkie rekordy liczbowe, więc operacje są bardzo szybkie. Zarówno dodawanie jak i usuwanie z niej kogokolwiek. Można się pokusić o jeszcze jedną rzecz... Możesz określić w profilu osoby id rodziców. Może to zamulić mocno bazę (rekurencja), ale pozwoli automatycznie generować drzewa genealogiczne. Jeśli do EDIT: W najbardziej ogólnym przypadku można uznać, że każdy użytkownik tworzy swoją rodzinę. Ja tworzę rodzinę X i dodaję do niej osoby na podstawie powiązań. Tak naprawdę więc rekord powiązań można określić jako: id_rodziny(najprawdopodobniej będzie on także Twoim id), id_członka, stopień_pokrewieństwa. Tak więc Twoja rodzina gdyby tak ją określić może zostać uznana jako: 7, 7, NULL -> moja rodzina, ja sam, jestem korzeniem 7, 8, żona -> moja rodzina, id_zony, żona 7, 9, córka -> moja rodzina, id_dziecka, córka 7, 5, matka -> moja rodzina, id_matki, matka 7, 6, ojciec -> moja rodzina, id_ojca, ojciec To byłby schemat najbardziej ogólny... Zauważ, że Twoja żona miałaby nieco inny schemat: 8, 8, NULL -> rodzina_żony, ona sama, jest jej korzeniem 8, 7, mąż -> rodzina_żony, id_mężą, mąż 8, 9, córka -> rodzina_żony, id_dziecka, córka Ojca i matki żona nie ma w bazie więc pustka... Zamiast nich może dać... 8, 5, teściowa -> rodzina_żony, id_matki_męża, teściowa 8, 6, teść -> moja rodzina, id_ojca_męża, teść To już wiele powtarzających się rekordów, ale można tworzyć naprawdę skomplikowane dzięki temu drzewa. Stąd prościej przyjmować wariant pierwszy, gdzie rodziną jest: matka+ojciec+dzieci, a nie każdy użytkownik z osobna. Traci się jednak wtedy możliwość określenia dokładnie powiązań między członkami. Ogranicza się to bowiem do: my, rodzina dziecka, rodzice męża/żony, dziadkowie męża/żony, rodzeństwo męża/żony, gdzie trudno określić, kto na przykład w rodzeństwie małżonka jest jego faktycznym bratem/ siostra. Bo informacja jest rozpatrywana na poziomie węzła rodziny, a nie poszczególnej osobie. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
Czytając to co napisałeś, powstał taki schemat.
Zobacz czy dobrze Cię zrozumiałem.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.09.2025 - 21:46 |