![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (0%)
|
Witam,
Projektujac baze danych natrafilem na pewien problem. Mam tak: zdjecia uzytkownikow zdjecia do albumow zdjecia do grup i teraz pytanie utworzyc to w jednej tabeli z polami: id_zdjecia | zdjecie | opis | glowne | id_kategorii | typ i teraz id_kategori to id uzytkownika, albumu lub grupy. Zas w polu typ podajemy 1=> zdjecia uzytkownika, 2=> zdjecia albumu, 3=> zdjecia grupy. potem do tego dochodzi tabela "osoby na zdjeciu" id | id_osoby | photo_id Czy zaprojektowanie tak tego jest lepszym sposobem niz: tworzymy 3 tabele ze zdjeciami: id_zdjecia | zdjecie | opis | glowne | id_albumu id_zdjecia | zdjecie | opis | glowne | id_uzytkownika id_zdjecia | zdjecie | opis | glowne | id_grupy i totem z "osoby na zdjeciu" tak samo czy tworzymy jedna tabele: id | id_osoby | photo_id | typ czy: id | id_osoby | photo_user_id id | id_osoby | photo_album_id id | id_osoby | photo_grupy_id Prosze sie nie czepiac nazewnictwa pol itp. - to jest przykladowe. Z gory dziekuje za pomoc z tym problemem ... Nigdzie nei znalazlem jak to powinienem wykonac . |
|
|
|
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 |
Bazę zawsze projektuje się tak, by jak najmniej danych się dublowało. Pomysł z dołączeniem pola typ nie uważam za dobry z prostej przyczyny:a co jeśli zdjęcie będzie musiało zostać dołączone do albumu i do grupy lub jeszcze i użytkowników? Tego typu "drobiazgi" załatwia się nieco inaczej. Tworzysz tabelę zdjęć i informacji o nich. Potem drugą, która przechowuje info o tym gdzie zdjęcie o konkretnym id jest przechowywane. Czyli druga tabela ma pola: id_zdjecia, typ, numer(default = 0). Typ ustalamy na 1 - użytkownicy, 2 - albumy, 3 - grupy. Numer domyślnie będzie 0, ale będzie mógł otrzymać i przechowywać informacje o numerze albumy lub grupy jakiej tyczy, ewentualnie numerze grupy w użytkownikach (jeśli będzie podział na grupy użytkowników). Dzięki temu bez konieczności dublowania informacji będzie można zawrzeć informację, że zdjęcie o id X znajduje się w albumie Y i jednocześnie w grupie Z. Wszystko za sprawą 2 rekordów w tej tablicy z parametrami (X, 2, Y) oraz (X, 3, Z) (IMG:style_emoticons/default/smile.gif) Jeśli chodzi o to kto jest na zdjęciu to przecież wpis tyczy jednego zdjęcia i sens umieszczania informacji gdzie to zdjęcie jest żaden. Ostatecznie więc masz tabele:
Zdjęcie: id, opis, zdjęcie(url lub nazwa?) Przynależność: id_zdjęcia, typ, numer Userzy_na_fotce: id_fotki, id_osoby Grupy: id, nazwa, opis Albumy: id, nazwa, opis (opcjonalnie) Grupy_userów: id, nazwa, opis (jeśli istnieją Grupy_userów) Przynależność_usera: id_usera, id_grupy Dlaczego tak? Gdy masz grupy, albumy (i grupy userów) to nie widzę sensu jeszcze dodatkowo zakładać kategorii. Kategorią jest przecież przynależność do określonego typu i/lub o określonym numerze. Dzięki temu mżemy wyciągnąć informacje gdzie dana fotka przynależy, kto jest na konkretnej fotce lub na jakich zdjęciach jest konkretny user. Wszystko się da wyciągnąć z bazy ładnie odpowiednim użyciem JOIN. Oczywiście ja naszkicowałem tylko szablon z grubsza. Można to zawsze jeszcze nieco przebudować. |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (0%)
|
Bazę zawsze projektuje się tak, by jak najmniej danych się dublowało. Pomysł z dołączeniem pola typ nie uważam za dobry z prostej przyczyny:a co jeśli zdjęcie będzie musiało zostać dołączone do albumu i do grupy lub jeszcze i użytkowników? Tego typu "drobiazgi" załatwia się nieco inaczej. Tworzysz tabelę zdjęć i informacji o nich. Potem drugą, która przechowuje info o tym gdzie zdjęcie o konkretnym id jest przechowywane. Czyli druga tabela ma pola: id_zdjecia, typ, numer(default = 0). Typ ustalamy na 1 - użytkownicy, 2 - albumy, 3 - grupy. Numer domyślnie będzie 0, ale będzie mógł otrzymać i przechowywać informacje o numerze albumy lub grupy jakiej tyczy, ewentualnie numerze grupy w użytkownikach (jeśli będzie podział na grupy użytkowników). Dzięki temu bez konieczności dublowania informacji będzie można zawrzeć informację, że zdjęcie o id X znajduje się w albumie Y i jednocześnie w grupie Z. Wszystko za sprawą 2 rekordów w tej tablicy z parametrami (X, 2, Y) oraz (X, 3, Z) (IMG:style_emoticons/default/smile.gif) Jeśli chodzi o to kto jest na zdjęciu to przecież wpis tyczy jednego zdjęcia i sens umieszczania informacji gdzie to zdjęcie jest żaden. Ostatecznie więc masz tabele: Zdjęcie: id, opis, zdjęcie(url lub nazwa?) Przynależność: id_zdjęcia, typ, numer Userzy_na_fotce: id_fotki, id_osoby Grupy: id, nazwa, opis Albumy: id, nazwa, opis (opcjonalnie) Grupy_userów: id, nazwa, opis (jeśli istnieją Grupy_userów) Przynależność_usera: id_usera, id_grupy Dlaczego tak? Gdy masz grupy, albumy (i grupy userów) to nie widzę sensu jeszcze dodatkowo zakładać kategorii. Kategorią jest przecież przynależność do określonego typu i/lub o określonym numerze. Dzięki temu mżemy wyciągnąć informacje gdzie dana fotka przynależy, kto jest na konkretnej fotce lub na jakich zdjęciach jest konkretny user. Wszystko się da wyciągnąć z bazy ładnie odpowiednim użyciem JOIN. Oczywiście ja naszkicowałem tylko szablon z grubsza. Można to zawsze jeszcze nieco przebudować. Dzieki za pomoc (IMG:style_emoticons/default/winksmiley.jpg) w sumie takiej odpowiedzi szukalem ;] ze tez na to sam nie wpadlem (?) (IMG:style_emoticons/default/biggrin.gif) pozdrawiam |
|
|
|
![]() ![]() |
|
Aktualny czas: 27.12.2025 - 10:08 |