Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [SQLite][SQL][MySQL]Schemat bazy danych
eminiasty
post 11.09.2015, 14:58:32
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

Ostrzeżenie: (0%)
-----




Witam, zaczynam zabawe z php i mysql. Probuje zrobic jakas dosc zlozona jak dla mnie strone, lecz zabawa zaczyna sie od bazy danych. Powyzej przedstawiam stworzona przezemnie strukture. Wlasnie co do niej mam kilka pytan. Bo tlumaczono mi ze relacja sa to powiazania ze soba tabel i raczej powinny byc powiazane ze soba wszystkie tabele... (chyba). Tylko w moim schemacie jakos tak nie chce wyjsc.

-Udalo sie wszystko z tabela users, lecz teraz tabela przepis i tu jest pies pogrzebany.
- Chce zeby kazdy przepis mial jakies produktu(kilka) na a jesli powiaze te tabele relacja (przepis-produkt) to bedzie tak ze jeden przepis jeden produkt. Ta sama sytuacja z kategoria. Przeciez moge przepis przypisac do wielu kategorii.
- Analogia z porada. (porada-kategoria)

Slyszalem ze istnieje cos takiego jak relacja jeden do wielu ale nie wiem jak to zastosowac w tym przypadku.
Prosze o pomoc. Uzywam najnowszej wersji xampa a ss jest z widoku projektu teoretycznych tabelek.
Go to the top of the page
+Quote Post
Pyton_000
post 11.09.2015, 15:03:00
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Dla Ciebie tutaj potrzebna jest relacja wiele-wiele

Musisz utworzyć tabelę np. przepis_produkt o kolumnach przepis_id, produkt_id

Analogicznie kategorie
Go to the top of the page
+Quote Post
eminiasty
post 11.09.2015, 15:05:18
Post #3





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

Ostrzeżenie: (0%)
-----


a taka tabela nie musi miec juz pola do inkrementacji np przepis_produkt_id czy cos takiego?



z tej listy jest cascada najlepsza? bo ponoc to jest takie uniwersalne

czy w ten sposob jest poprawnie?



Ten post edytował eminiasty 11.09.2015, 15:31:19
Go to the top of the page
+Quote Post
Pyton_000
post 11.09.2015, 15:57:37
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Nie stosuj prefixów do nazw kolum w postaci nazwy tabeli...

Nie nie musi mieć autoincrement, a nawet nie powinna, bo jest to m.in. bez sensu.

Cascade spowoduje usunięcie rekordów jeśli usuniesz produkt lub kategorię (usunie z tej tabeli łączącej.
Go to the top of the page
+Quote Post
eminiasty
post 11.09.2015, 16:30:40
Post #5





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 11.09.2015, 16:57:37 ) *
Nie stosuj prefixów do nazw kolum w postaci nazwy tabeli...

Mowiono mi gdzies ze tak powinno byc bo to profesjonalniej, to teraz juz zle?oO to jak to wkoncu?Wiem mozna sie pogubic ale stusuje sie do rad ludzi.
// to chyba dlatego ze wtedy by byly relacje id do id i nie wiadomo o co by chodzilo

btw. Stworzona struktura bedzie raczej dzialac?

Ten post edytował eminiasty 11.09.2015, 16:32:55
Go to the top of the page
+Quote Post
Pyton_000
post 11.09.2015, 16:50:05
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Profesjonalniej? Nazwy kolumn masz polskie, nazwy tabel angielskie, prefixy kolumn w postaci nazwy tabeli? Beee....

Nie wiem jaki "Profesjonalista" Ci proponował takie rozwiązania ale lepiej zmień znajomości. Jak by Ci powiedzieli że możesz stosować polskie znaki w nazwach kolumn i tabel bo to chroni przed atakami z USA i Korei to też uwierzysz ? Ja rozumiem że człowiek się uczy, testuje, próbuje. Cieszę się bardzo że robisz coś sam i przychodzisz z problemem. Chwała Ci za to.

Teraz do rzeczy.
- nazwy tabel, kolumn - angielskie nazwy.
- nazwy tabel raczej snake_case
- kolumny tak samo
- nazwy tabel liczna mnoga, kolumny pojedyncza
- żadnych prefiksów w nazwach kolumn (po co sobie utrudniać potem życie, możesz zawsze nadawać aliasy tabelom/kolumnom)

To są moje subiektywne nazewnictwa ale wiele, wiele, wiele ludzi tak stosuje. Jest to czytelne, zrozumiałe i nie powoduje problemów.

co do relacji to przecież jest jasna
: users.id -> user_id
: categories.id -> category_id

nie ma nic skomplikowanego, a im prostsze nazwy tym łatwiej się połapać.

Ten post edytował Pyton_000 11.09.2015, 16:50:51
Go to the top of the page
+Quote Post
eminiasty
post 11.09.2015, 17:11:58
Post #7





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 11.09.2015, 17:50:05 ) *
co do relacji to przecież jest jasna
: users.id -> user_id
: categories.id -> category_id


no ok ale jak mam np powiazanie pomiedzy tabelami i teraz jest np.

users_id(tabela users) powiazane z dane_users_id(tabela przepis) to pomijajac czy polska czy angielska nazwa

w tabeli dane users id bylo by:
id -> incrementowane(glowne)
id -> id foregin do tabeli userow - ale ta nazwa odpada jak to wtedy nazwac?

jak cos jeszcze to
id_users
czy
users_id?



Cytat(Pyton_000 @ 11.09.2015, 17:50:05 ) *
co do relacji to przecież jest jasna
- nazwy tabel liczna mnoga, kolumny pojedyncza


czy napewno np.
nie category tylko categories? tak dziwnie chyba


Ten post edytował eminiasty 11.09.2015, 17:25:44
Go to the top of the page
+Quote Post
Pyton_000
post 11.09.2015, 17:35:20
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Nie rozumiem o co Ci chodzi.

Liczba mnoga bo tabela przechowuje wiele encji czyli entities, a każdy rekord to entiti czyli encja.

user_id - bo odwołujesz się do tabeli user o polu id,
jak by było id_users to w prawdzie do kolumny id w tabeli users, ale mniej logicznie. Najpierw idziemy od ogółu potem do szczegółu
Go to the top of the page
+Quote Post
eminiasty
post 11.09.2015, 18:18:45
Post #9





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

Ostrzeżenie: (0%)
-----


zastosowalem sie raczej do wszystkich wskazowek wyszlo cos takiego:



czy to jest wporzadku?

-tylko tak, stosowalem tak roznie raz cascada , raz nie.
- nie wiedzialem ze nie da sie nie zastoowac nic.

czy te kolory lini maja jakies znaczenie czy wynikaja wlasnie z tego? i prosil bym wlasnie o przyklad gdzie powienienem zastosowac cascade a gdzie nie i mzoe gdzies restricet(odnoszac sie do przykladu)
Go to the top of the page
+Quote Post
Pyton_000
post 11.09.2015, 18:23:51
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Na pewno z czegoś wynikają kolory ale to już trzeba w programie zapytać smile.gif

CASCADE mówi tyle że jesli spróbujesz usunąć wiersz z tabeli users to usuną się także rekordy powiązane bezpośrednio z nimi.
RESTRICTED natomiast odwrotnie. Jeśli będziesz chciał usunąć z users rekord to NIE pozwoli bo są właśnie powiązania i najpierw je musisz usunąć.
NONE czyli nic nie robi
NULL to po po prostu wrzuca NULL do powiązanej tabeli zamiast ID.
Go to the top of the page
+Quote Post
eminiasty
post 11.09.2015, 18:42:53
Post #11





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

Ostrzeżenie: (0%)
-----


pomiedzy users a users_info powinno byc cascada bo usuwa jedno i drugie ? - to raczej na pewno
lecz
pomiedzy users a recipe?
jak dam cascade to usunie usera usuwajac przepis?
jak dam restricted nie usunie przepisu bo users bedzie istnial(paranoja)
jeszcze cos innego? czy nie bardzo zrozumialem? wytlumaczysz mi ten przyklad
Go to the top of the page
+Quote Post
Pyton_000
post 11.09.2015, 18:46:20
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


W Przypadku CASCADE i Recipes to chodzi o to że samo w sobie Recipes zostanie ale zostanie usunięte powiązanie Recipes <-> User.
Czyli Przepis będzie sierotą bez autora.

Co do RESTRICTED to nie... Chodzi o to że Nie usuniesz Usera dopóki ma powiązane receptury. (mówię tutaj o Tabeli users -> recipe_user)
Go to the top of the page
+Quote Post
eminiasty
post 11.09.2015, 19:06:19
Post #13





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

Ostrzeżenie: (0%)
-----


czyli tam musi byc restricted

Ten post edytował eminiasty 11.09.2015, 20:03:22
Go to the top of the page
+Quote Post
Pyton_000
post 11.09.2015, 19:15:47
Post #14





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


I tak zaraz przyjdzie @nospor albo inny wygadany i powie żem głupoty popisał biggrin.gif
Go to the top of the page
+Quote Post
eminiasty
post 11.09.2015, 20:03:09
Post #15





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

Ostrzeżenie: (0%)
-----




Ja to widze tak.

R- to restricted
C- cascada

Wydaje mi sie ze cascada moze byc tylko w tym jednym miejscu. Analizujac ten przyklad to tak naprawde cascady mozna by wgl nie uzywac i wszystko jechac restrict.
BO:
nie mozna miec przepisu bez uzytkownika
nie mozna miec danych bez uzytkownika
nie mozna miec kategori przepisu bez samego przepisu itd itd..?

Tylko nie wiem czy ja to prawidlowo rozumuje
Go to the top of the page
+Quote Post
Pyton_000
post 11.09.2015, 20:28:13
Post #16





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Nie do końca. Cascade użyjesz np. dla user_info, bo usuwając usera chcesz żeby usunęło się jego info, natomiast user - recipe jako Restricted bo nie chcesz usunąć usera jeśli ma recepty.

http://zasoby.open.agh.edu.pl/~09seenglert...tawy&menu=3
Go to the top of the page
+Quote Post
eminiasty
post 11.09.2015, 20:59:48
Post #17





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

Ostrzeżenie: (0%)
-----




wydaje mi sie ze teraz jest ok , interesuje mnie tylko relacja pomiedzy takimi tabeliami jak recipe_image a image np. czyli z ta relacja wiele do wielu, w takim wypadku jest cascada bo kasuje wszystko
przepis razem z obrazkiem czy raczej restrykcyjnie (przeciwnie) mozna usunac obrazek zachowujac przepis wiec restrit.
Go to the top of the page
+Quote Post
Pyton_000
post 11.09.2015, 21:20:39
Post #18





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Cascade, bo obrazki Ci nie będą więcej potrzebne. I tutaj raczej bym zamiast tabeli recipe_image dodał po prostu kolumnę recipe_id w images. No chyba że obrazek szarlotki będziesz stosował też do bigosu wink.gif

Ogólnie jest ok. Ważne jest to abyś wiedział dlaczego stosujesz daną relację (1:1, 1-n, n-1, n-n) i jakie FK zakładasz do tego. Tu musisz sobie zadawać pytanie czy coś może być usunięte jeśli jest powiązane z czymś lub czy chcesz usunąć coś wraz z powiązanymi relacjami.
Go to the top of the page
+Quote Post
eminiasty
post 11.09.2015, 21:54:16
Post #19





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

Ostrzeżenie: (0%)
-----


tylko ze z image(tej samej) maja kozystac tez news i tips, wiec jesli dodam kolumne recipe_id do image to tak troche jak z kosmosu bedzie sie miala do tamtych dwoch tabel

moglbym teoretycznie w tabeli image -> pole type (bo tach chcialem wstepnie) rozpoznawac po tym polu czy to news/recipe/tips ale chyba sie zgubilem jak klucze polaczyc
ALE:
chyba zle nie jest :
BO
np.
Dodaje recipe np 3 obrazki dodaja sie one do tabeli recipe_image (kolejno-zapis o tym) same obrazki wedruja do image
Nastepnie tipsa z 2 obrazkami tips_image(zapisuje jakie) obrazki do image
analogia z news.

Tylko co jesli to beda te same obrazki? bez sensu dawac tu unikaty poprostu tak musi byc.

A tego z ta szarlotka nie kapuje, przeciez dajac przepis na szarlotke z jej zdjeciem nie wykorzystam jej w przepisie z bigosem. No chyba ze pobiore obrazek z image?(o to ci chodzi?)

Ten post edytował eminiasty 11.09.2015, 22:03:24
Go to the top of the page
+Quote Post
Pyton_000
post 11.09.2015, 22:07:38
Post #20





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Dobra niech zostanie jak jest smile.gif Przekonałeś mnie smile.gif
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2025 - 05:14