Relacyjne bazy danych

Forum przeznaczone dla MySql - bazy danych.
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Relacyjne bazy danych

Post przez tajger »

Kiedy pierwszy raz zacząłem zabawę z bazami danych to tworzyłem po 5-7 tabel, które w jakiś sposób oddziaływały na siebie. I to były relacje a ja tego nie robiłem, nie tworzyłem ich. Aż wstyd się przyznać, ale nie ogarnąłem dotąd tego tematu i generalnie jeszcze nie wiem jak to prawidłowo robić.

Mamy np. 2 tabele:
users
id
login
password
name
surname
created
oraz
result_users
id
login
result1
result2
Tak tworzyłem tabele i jeszcze ten ID zawsze tworzyłem, chyba za bardzo odgapiłem to z kursów, ale totalnie nie skupiłem się na tym. Z tego co wyczytałem to nie powinno się tworzyć dodatkowych takich samych kolumn jakie już istnieją w bazie i dlatego trzeba tworzyć relacje czyli dodatkowe kolumny.

Czy będzie to wyglądać tak? :
users
id_user
login
password
name
surname
created
..i
result_users
id_user
result1
result2
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Relacyjne bazy danych

Post przez Morfidon »

Oczywiście! W razie gdybyś zmienił coś w jednej tabeli to musiałbyś to zmienić wtedy w obu, a tak to automatycznie zmienia się wszędzie.
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Relacyjne bazy danych

Post przez tajger »

Zastanawia mnie fakt, dlaczego nie wolno podczas tworzenia tabeli ustawić w 2óch polach AUTO INCREMENT.
Zawsze walcz do końca i nigdy się nie poddawaj!
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Relacyjne bazy danych

Post przez tajger »

Czy w bazie danych można trzymać kod PHP?
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Relacyjne bazy danych

Post przez Morfidon »

Teoretycznie tak, ale jeśli tak jest to znaczy, że coś źle zaplanowałeś. Ten kod tam powinien być jedynie w celach powiedzmy wyświetlania, ale na pewno nie egzekucji.
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Relacyjne bazy danych

Post przez tajger »

Robię aktualnie CMSA bez frameworka. Chcę napisać swój pierwszy cms newsy, komentowanie, panel zarządzania nesami, komentami oraz inny panel uzytkownika + rejestracja itd. itp.

Chodzi o to, że jak ktoś robi CMSA to i MENU też jest w CMSIE, więc cała treść menu i jego ogólnej tresci czyli tekstu jest w bazie danych. Niestety kiedy bede chcial sobie stworzyc link KONTAKT i tam zrobic formularz to juz to menu CMS'owe się nie zda za bardzo bo trzeba wrzucić tam PHP, na sprawdzanie postów, także JS itp. Więc wydaje mi się, że trzeba tworzyć odrębny plik dla tego typu menu i treści, bo PHP i sprawdzanie formularza zamieścić w bazie danych to chyba tak się nie robi.
Generalnie to wszystko robię po swojemu, miliard zabezpeiczeń już jest. Wymyśliłem sobie stronę, która chodzi po 2 GETACH albo 1 GECIE.
Jak 1 GET - to są linki zrobione przeze mnie, czyli menu
2 GETY to jest id oraz link(seo) czyli newsy - i id potrzebny do dodawnia komentarzy do DB przez Usera..
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Relacyjne bazy danych

Post przez Morfidon »

Rozumiem. Przy zaawansowanych programach pojawia się często tego typu problemy i często można je rozwiązać różnymi wzorcami projektowymi. Aktualnie mój kolega zabrał się za robienie kursu dot. tego tematu.

Gdy zna się wzorce i potrafi się je stosować można napisać odpowiednie klasy, które będą to wszystko fajnie zgrywały. Jednak to trochę za dużo tłumaczenia na forum, musisz niestety na ten temat poczytać. Pamiętaj, że kod, który jest wykonywany na pewno nie powinien być w bazie danych. Musisz poczytać na ten temat, ew. samemu coś spróbować wymyślić... możesz stworzyć jakąś klasę, która na podstawie przyjętych argumentów będzie decydowała, które skrypty wywołać, tylko musisz to zrobić, żeby to miało ręce i nogi. Tzn. aby gdy dodasz coś przez CMS'a do bazy danych to nie trzeba było później zmieniać coś w kodzie. Z tego powodu musisz napisać jakiś uniwersalny kod dla samego menu, dla samego wyświetlania etc.

Możesz oczywiście trzymać w bazie danych kod php i później go wywołać funkcją eval(), ale jest to niebezpieczne zagranie. Co prawda szansa, że ktoś Cię zaatakuje jest pewnie mała, ale gdyby coś się takiego stało to może zrobić niezłą "sieczkę" ;)
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Relacyjne bazy danych

Post przez tajger »

Nie będę trzymał kodu php w bazie danych, przecież total nieogarnięcie. Ja nie ogarnałęm sobie klas do tego, tylko to rozwiązałem inaczej.

Tak jak mówiłe:
Przekazuję zawszę przez .htaccessa różne pozycje getów, w zależności co zostało kliknięte, wpisane przez użytkownika.

W przypadku newsów 2 GETY - w przypadku zwykłych linków leci 1 GET. I tutaj mam warunki już. Mam tablicę, w której przypisuje zmienne zwykłych linków jakie mogą wchodzić. Pierwszy wykonywany jest wartunek własnie tego 1 GET, jesli go nie znajdzie leci dalej ELSE IF i ten szukam mi kolejengo GETA tylko teraz te są przechowywane w bazie danych już, więc tablica jest tworzona wczesniej i wyszukuje wszystkie newsy. ITD ITD ITD ITD.
No jeżeli dojdzie mi menu, które będę chciał trzymać w bazie danych, to po prostu aby oddzielić zwykłe linki, w którym jest tylko tekst to wrzucam kolejnego else ifa a jesli nie znajdzie go to wykonuej sie wczesniejszy warunek na menu tak jakby te ważneijsze bo tam też jest tablica gdzie przechowywane są linki w tablicy i wiem, że to są po prostu linki gdzie treść nie będzie 'zwykła' tylko np. JSem, PHP itp. itd.

Generalnie bawię się z twoim kodem, z którejś tam lekcji, chyba GET. Ulepszyłem go troszkę, np. zabezpieczenie przed wieloma GETami > niż np. 2 itd. No trzymam to w klasie generalnei jak wszystko już powoli.
Wzorce projektowe na pewno kupie jak twój kolega to zrobi.
Zawsze walcz do końca i nigdy się nie poddawaj!
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Relacyjne bazy danych

Post przez tajger »

Pamiętacie może co oznacza relacja (linia przerywana) z tabeli kontakt do kontakt_typ?
baza.JPG
Zawsze walcz do końca i nigdy się nie poddawaj!
Post Reply