Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Czy to jest poprawne?
-Code46-
post
Post #1





Goście







Pozwoliłem sobie powrócić do problemu, który niby został wyjaśniony przez SongoQ.

Mam 2 tabele:

Tabela A:
a_id int primary key
login varchar(20)
haslo varchar(20)


Tabela B:
b_id int primary key
a_id int
imie varchar (20)
nazwisko varchar(20)
adres varchar(20)


Wiem, że można zrobić powiązania między tabelami i jak usuwam z tabeli A wiersz o numerze a_id=1 (np. login:root, haslo:root) i automatycznie usuwa się odpowiedni wpis z tabeli B (np. imie:administrator, nazwisko:systemu, adres:localhost)..

Ale jeśli zrobię to na transakcjach a w kodzie php napiszę 2x instrukcje DELETE (najpierw z tabeli A a potem z tabeli B ) to czy to będzie profesionalne?
Wszystko będzie działać ok, jeśli będziemy robić przez aplikacje. A jeśli ktoś będzie chciał coś usunać ręcznie? To usunie login, hasło, ale pozostałe dane pozostaną w drugiej tabeli. Więc robić powiązania czy nie?
Go to the top of the page
+Quote Post
sobstel
post
Post #2





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


oczywiście powiązania zapewniają lepszą spójność BD i uniemożliwiają przypadkowe usunięcie tych danych których byśmy nie chcieli. zresztą sam już sobie na to odpowiedziałeś.
Go to the top of the page
+Quote Post
Leezard
post
Post #3





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 19.09.2004
Skąd: Uć

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


powiazanie i wymuszenie wiezow integralnosci czyli cos jak ON DELETE CASCADE itp daja ci to ze nie zostana ci nigdzie zbedne dane, jesli usuwasz dane z jednej tabeli to jesli tak wymusiles to automatycznie zostana skasowane te w drugiej tabeli, z kolei jak chcesz usunac z tej drugiej dane majaca powiazanie z innymi danymi w innej tabeli to system odmowi usuniecia danych poniewaz naruszy to wiezy integralnosci bazy.

w momencie kiedy nie masz tych polaczen, mozesz dowolnie usuwac sobie co chcesz skad chcesz poniewaz dla ciebie te polaczenia istnieja niejako umownie podczas operacji na bazie w twojej aplikacji czyli recznie mozesz wszystko robic. dlatego wg mnie jesli jest to uzasadnione to wypada to zastosowac tym bardziej jesli ktos chce recznie mieszac w bazie. wtedy nie bedize wiedzial o twoich umownych powiazaniach i wysypie ci cala aplikacje, a jak narzucisz mu wymuszanie wiezow integralnosci to moze usunie rekordy, ale nie naruszy ci spojnosci bazy, nie bedizesz mial rekordow "zombie" ze tak powiem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

a co do tych 2x delete to to jest wlasnie ta twoja umowa ze w tym momencie istnieja wiezy i je uwzgledniasz, ale po co skoro baza ma wbudowane mechanizmy do tego sluzace i mozliwe ze sa szybsze i wydajniejsze niz wykonywanie 2 zapytan delete z poziomu aplikacji. no a jesli juz bardzo chcesz te 2x delete to bez transakcji nie przejdzie (znowu probelm spojnosci bazy)
Go to the top of the page
+Quote Post
-Code46-
post
Post #4





Goście







Cytat(Leezard @ 2005-04-20 21:24:34)
powiazanie i wymuszenie wiezow integralnosci czyli cos jak ON DELETE CASCADE itp daja ci to ze nie zostana ci nigdzie zbedne dane, jesli usuwasz dane z jednej tabeli to jesli tak wymusiles to automatycznie zostana skasowane te w drugiej tabeli, z kolei jak chcesz usunac z tej drugiej dane majaca powiazanie z innymi danymi w innej tabeli to system odmowi usuniecia danych poniewaz naruszy to wiezy integralnosci bazy.

w momencie kiedy nie masz tych polaczen, mozesz dowolnie usuwac sobie co chcesz skad chcesz poniewaz dla ciebie te polaczenia istnieja niejako umownie podczas operacji na bazie w twojej aplikacji czyli recznie mozesz wszystko robic. dlatego wg mnie jesli jest to uzasadnione to wypada to zastosowac tym bardziej jesli ktos chce recznie mieszac w bazie. wtedy nie bedize wiedzial o twoich umownych powiazaniach i wysypie ci cala aplikacje, a jak narzucisz mu wymuszanie wiezow integralnosci to moze usunie rekordy, ale nie naruszy ci spojnosci bazy, nie bedizesz mial rekordow "zombie" ze tak powiem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

a co do tych 2x delete to to jest wlasnie ta twoja umowa ze w tym momencie istnieja wiezy i je uwzgledniasz, ale po co skoro baza ma wbudowane mechanizmy do tego sluzace i mozliwe ze sa szybsze i wydajniejsze niz wykonywanie 2 zapytan delete z poziomu aplikacji. no a jesli juz bardzo chcesz te 2x delete to bez transakcji nie przejdzie (znowu probelm spojnosci bazy)

Dziękuje. Dodałem transakcje wszędzie tam gdzie używam DELETE, UPDATE lub INSERT.
Przerobię baze na powiązania i pozmieniam kod php.
Go to the top of the page
+Quote Post
-Gość_Code46-
post
Post #5





Goście







Cytat(Leezard @ 2005-04-20 21:24:34)
powiazanie i wymuszenie wiezow integralnosci czyli cos jak ON DELETE CASCADE itp daja ci to ze nie zostana ci nigdzie zbedne dane, jesli usuwasz dane z jednej tabeli to jesli tak wymusiles to automatycznie zostana skasowane te w drugiej tabeli, z kolei jak chcesz usunac z tej drugiej dane majaca powiazanie z innymi danymi w innej tabeli to system odmowi usuniecia danych poniewaz naruszy to wiezy integralnosci bazy.

w momencie kiedy nie masz tych polaczen, mozesz dowolnie usuwac sobie co chcesz skad chcesz poniewaz dla ciebie te polaczenia istnieja niejako umownie podczas operacji na bazie w twojej aplikacji czyli recznie mozesz wszystko robic. dlatego wg mnie jesli jest to uzasadnione to wypada to zastosowac tym bardziej jesli ktos chce recznie mieszac w bazie. wtedy nie bedize wiedzial o twoich umownych powiazaniach i wysypie ci cala aplikacje, a jak narzucisz mu wymuszanie wiezow integralnosci to moze usunie rekordy, ale nie naruszy ci spojnosci bazy, nie bedizesz mial rekordow "zombie" ze tak powiem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

a co do tych 2x delete to to jest wlasnie ta twoja umowa ze w tym momencie istnieja wiezy i je uwzgledniasz, ale po co skoro baza ma wbudowane mechanizmy do tego sluzace i mozliwe ze sa szybsze i wydajniejsze niz wykonywanie 2 zapytan delete z poziomu aplikacji. no a jesli juz bardzo chcesz te 2x delete to bez transakcji nie przejdzie (znowu probelm spojnosci bazy)

A czy mogę stosować połączenia cascadowe w transakcjach?
Go to the top of the page
+Quote Post
Leezard
post
Post #6





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 19.09.2004
Skąd: Uć

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


nic nie wiem o tym zeby nei mozna bylo stosowac, w koncu sa to 2 najwazneijsze mechanizmy utrzymujace baz w jako takim stanie, wiec mysle ze powinny ze soba grac

najlepiej przetestuj (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Jarod
post
Post #7





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Moim skromnym zdaniem lepiej ustawić klucze obce bez powiązań kaskadowych i stosować tylko transakcje

Pozdrawiam
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 14:11