Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Schemat bazy - zamawianie zdjęć z galerii.
Forum PHP.pl > Forum > Bazy danych
miedzna
Witam,
muszę zrobić bazę, ale nigdy nie robiłem takiej zaawansowanej żetakpowiem smile.gif
Wydaje mi się, że dobrym rozwiązaniem będzie coś takiego:
odzielna tabela dla userów, bo będzie ich wiele i odzielna table dla zamawianych zdjęć, bo też będzie tego dużo. Tylko chcę, żeby każde zamawiane zdjęcie miało przy sobie info gdzie jest wykorzystywane i przez jakiego usera i ile razy. Dodatkowo chcę, żebym mógł sprawdzić jakie zadjęcia zamawiał user... macie jakieś pomysły oraz gdyby takie pojawiły się to jak by wyglądały przykładowe zapytania do tej bazy.
Moja propozycja jest taka:

tabela users:

user_id | imie | nazwisko | email

tabela zdjecia:

zdjecie_id | zdjecie_id_user_id | jakies_pozostale_info_o_zdjeciu

czy takie rozwiązanie jest OK i jak by wyglądało dodawanie oraz zapytanie do takiej bazy?

Będę wdzięczny za odpowiedzi.
nospor
masz tutaj relacje wiele do wielu, czyli ze jeden user moze zamawiac wiele zdjęc, a jedno zdjecie moze byc zamowione przez wielu userow. tak wiec twoja tabela ze zdjeciami jest bledna. musisz dorobic trzecią tabelę, która będzie je łączyla:

tabela user:
Kod
id | imie | nazwisko | email


tabela zdjecie:
Kod
id |  jakies_pozostale_info_o_zdjeciu


tabela user_zdjecie:
Kod
id_user |  id_zdjecie | data | gdziewykorzystane



Cytat
wykorzystywane i przez jakiego usera i ile razy
to dany user moze kilka razy to samo zdjecie zamowic? jesli tak to:
tabela user_zdjecie:
Kod
id | id_user |  id_zdjecie | data | gdziewykorzystane
miedzna
Wiesz, sorry że marudzę, ale pomyślałem i okazało się, że w bazie nie będę trzymał opisów zdjęć. Interesuje mnie tylko to, przez kogo były zamawiane i gdzie były wykorzystywane.
Czyli tabela users pozostaje bez zmian, a tabela z informacjami i wykorzysttywanych zdjęciach zmieni się... tylko jak?questionmark.gif
nospor
tak czy siak tabela na zdjecia jest wskazana. umozliwia to latwiejsze zarządzanie zdjęciami. czyli wszystko pozostaje bez zmian winksmiley.jpg
miedzna
Dobra, nasmarowałem cóś takiego:

tabela users:
Kod
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
imie CHAR(15),
nazwisko CHAR(25),
email VARCHAR(40),
PRIMARY KEY(id)
);


tabela zdjecia:
Kod
CREATE TABLE zdjecia (
id INT NOT NULL AUTO_INCREMENT,
kategoria CHAR(20),
numer CHAR(4),
PRIMARY KEY(id)
);


tabela users_zdjecia:
Kod
CREATE TABLE users_zdjecia (
id INT NOT NULL AUTO_INCREMENT,
id_users CHAR(4),
id_zdjecia CHAR(4),
serwis TEXT,
link TEXT,
data datetime,
PRIMARY KEY(id)
);


a teraz zapytanie do bazy:
Kod
SELECT users.imie, users.nazwisko, users_zdjecia.serwis, users_zdjecia.link
FROM users, zdjecia, users_zdjecia
WHERE
users.id = users_zdjecia.id_users
AND zdjecia.id = users_zdjecia.id_zdjecia
AND LCASE(zdjecia.kategoria) = \"Biznes\"
AND LCASE(zdjecia.numer) = \"12\"

pokaże wszystkich userów, którzy pobrali zdjęcie z kategorii Biznes numer 12

1. tylko jak zrobić na odwrót, czyli pokazać wszystkie zdjęcia, które pobrał user Jan Kowalski?

2. i jak się dodaje informacje do takich tabel, w 3 różnych insertach?questionmark.gif
nospor
uzywaj odpowiedniego bbcode. mowie tu o SQL

1)
  1. SELECT u.imie, u.nazwisko,z.numer
  2. FROM users
  3. u, zdjecia z, users_zdjecia uz WHERE u.imie='Jan' AND u.nazwisko='Kowalski' AND uz.id_users=u.id AND uz.zdjecia=z.id


2)ale czemu w trzech?Przeciez userow juz bedziesz mial. najpierw przeciez ludek musi sie pojawic w bazie, bys mogl mu cos dac. to samo ze zdjeciami. przeciez galerie zdjęc to masz juz w bazie, inaczej ludek by nie wiedzial co moze se wziąść. Bo w bazie masz trzymac zdjecia nie zależnie od tego czy ktos je bral czy nie.
a potem to juz tylko jeden insert na polaczenie usera ze zdjeciem winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.