Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: nakladanie ograniczen na kolumny w tabelach mysql
Forum PHP.pl > Forum > Bazy danych > MySQL
blawat
witam,

czy jest mozliwosc i ewnetualnie jak to zrobic aby bezposrednio na tabele bazy danych nalozyc pewne ograniczenia dotyczce wprowadzanych tam rekordow np:

tabla z informacjami o fakturach ma kolumny termin platnosci i data wystawienia

chcialbym aby przy dodawaniu "sama baza" sprawdzala czy termin platnosci >= data wystawienia jesli nie to generuje jakis tam blad nie dodaje rekordu etc

to oczywiscie trywialny przyklad ale chodzi mi sposob samej realizacji czy da sie to zrobic "prosto" przy projektowaniu samej struktury tabeli czy np tabele projektujemy "normalnie" a dopiero nakladamy na nia trigger + funkcje/procedure ktora weryfikuje nam to co robimy i ewnetualnie dodaje lub robi "cos innego"

pozdrawiam i dziekuje z gory za pomoc
trucksweb
nie wiem czy sie da tak zrobic jak opisales - watpie, ale zapytam z ciekawosci dlaczego cos takiego chcesz robic ?

piszac aplikacje, Twoim obowiazkiem jest ja tak zebezpieczyc zeby do bazy wyslac tylko zapytanie insertujace a nie sprawdzac w samej bazie czy dane ktore wysylasz sa poprawne.
blinksmiley.gif
Mchl
Triggery. BEFORE INSERT, BEFORE UPDATE.

Trucksweb, czasami jedna baza podpięta jest do wielu aplikacji. Wtedy lepiej tage ograniczenia trzymać w bazie.
someone.cool
Cytat(Mchl @ 26.03.2010, 16:08:13 ) *
Triggery. BEFORE INSERT, BEFORE UPDATE.


ale trigger nie "odpowie" aplikacji że coś poszło źle... tylko faktura idzie w kosmos. Ogólnie limitowanie przez bazę jest wg. mnie złym podejściem, bo przecież walidowanie tego przez np. PHP jest stosunkowo proste i bardziej praktyczne w szczególności, że nie tracimy danych wklepanych do formularza.
Mchl
Jak się sprytnie napisze to odpowie. Musi jakoś rzucić błędem, a aplikacja to złapać. Ja zazwyczaj robię tabelę `errors` gdzie jest jedna kolumna z komunikatem błędu i kluczem UNIQUE, a potem z triggera wstawiam do tej tabeli komunikat błędu. Baza zwraca do aplikacji błąd nr 1062 a w komunikacie zawarty jest mój komunikat, który mogę regexem wyciągnąć i wyświetlić użytkownikowi.

Na około strasznie, ale zanim nie pojawi się SIGNAL to nie bardzo da się ianczej.

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.