ďťż
 
usuwanie =?ISO-8859-2?Q?rekord=F3w?= ďťż
 
usuwanie =?ISO-8859-2?Q?rekord=F3w?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

usuwanie =?ISO-8859-2?Q?rekord=F3w?=



zbig - 08-08-2007 00:02
usuwanie =?ISO-8859-2?Q?rekord=F3w?=
  Witajcie,

Mam ogólny problem natury projektowej. Najlepiej będzie to wyjaśnić na
przykładzie. Załóżmy, że mamy takie tabele:
CREATE TABLE osoba (
id int UNIQUE,
nazwa text UNIQUE,
opis text,
PRIMARY KEY(id)
);
CREATE TABLE usluga (
id int UNIQUE,
nazwa text UNIQUE,
opis text,
PRIMARY KEY(id)
);
CREATE TABLE logi (
id int UNIQUE,
osobaid int REFERENCES osoba,
uslugaid int REFERENCES usluga,
opis text,
PRIMARY KEY(id)
);

i teraz załóżmy że z tabeli logi nie można usuwać, w związku z tym nie można
też usuwać osób i usług. Aby można było temu zapobiec używam do tabel
osoba/usluga dodatkowej kolumny "deleted boolean" przez to na poziomie bazy
relacja zawsze istnieje a już w warstwie widoku pilnuję żeby nie wypisywał
elementów które są deleted. Ma to jednak swoje małe minusy np. kolumny
nazwa nie mogą być wtedy jako UNIQUE bo ktoś mógł dodać-usunąć-dodać tą
samą nazwę i ona musi występować kilka razy i jest też podobnych niuansów
jeszcze trochę.
Pytanie brzmi jak Wy rozwiązujecie podobne problemy, też dodajecie
kolumnę "deleted", czy może inaczej? Używałem jeszcze czasami opcji że w
tabeli logi zamiast osobaid i uslugaid wpisywałem ich nazwy i wtedy można
usuwać dane osoby i usługi ale często są sytuacje, że potrzebne mi są
wszystkie właściwości tych usuniętych obiektów.

--
Pozdrawiam,
zbig





A.L.E.C - 08-08-2007 00:02

  zbig wrote:

> Pytanie brzmi jak Wy rozwiązujecie podobne problemy, też dodajecie
> kolumnę "deleted", czy może inaczej? Używałem jeszcze czasami opcji że w
> tabeli logi zamiast osobaid i uslugaid wpisywałem ich nazwy i wtedy można
> usuwać dane osoby i usługi ale często są sytuacje, że potrzebne mi są
> wszystkie właściwości tych usuniętych obiektów.

np. tak:
http://www.depesz.com/index.php/2006...-uzytkownikow/

--
Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252
LAN Management System Developer http://lms.org.pl




Marcin - 08-08-2007 00:03

  zbig wrote:
> Witajcie,
>
> Mam ogólny problem natury projektowej. Najlepiej będzie to wyjaśnić na
> przykładzie. Załóżmy, że mamy takie tabele:
> CREATE TABLE osoba (
> id int UNIQUE,
> nazwa text UNIQUE,
> opis text,
> PRIMARY KEY(id)
> );
> CREATE TABLE usluga (
> id int UNIQUE,
> nazwa text UNIQUE,
> opis text,
> PRIMARY KEY(id)
> );
> CREATE TABLE logi (
> id int UNIQUE,
> osobaid int REFERENCES osoba,
> uslugaid int REFERENCES usluga,
> opis text,
> PRIMARY KEY(id)
> );
>
> i teraz załóżmy że z tabeli logi nie można usuwać, w związku z tym nie można
> też usuwać osób i usług. Aby można było temu zapobiec używam do tabel
> osoba/usluga dodatkowej kolumny "deleted boolean" przez to na poziomie bazy
> relacja zawsze istnieje a już w warstwie widoku pilnuję żeby nie wypisywał
> elementów które są deleted. Ma to jednak swoje małe minusy np. kolumny
> nazwa nie mogą być wtedy jako UNIQUE bo ktoś mógł dodać-usunąć-dodać tą
> samą nazwę i ona musi występować kilka razy i jest też podobnych niuansów
> jeszcze trochę.
> Pytanie brzmi jak Wy rozwiązujecie podobne problemy, też dodajecie
> kolumnę "deleted", czy może inaczej? Używałem jeszcze czasami opcji że w
> tabeli logi zamiast osobaid i uslugaid wpisywałem ich nazwy i wtedy można
> usuwać dane osoby i usługi ale często są sytuacje, że potrzebne mi są
> wszystkie właściwości tych usuniętych obiektów.

Ograniczenia typu UNIQUE, FOREIGN KEY mają Ci ułatwiać życie,
a nie utrudniać. Jeśli są niewygodne, to ich nie używaj.
Przykładowo: jeśli masz problem z UNIQUE, bo mogą być w tabeli
wpisy "deleted" i nie ma powodu, żeby dwie nazwy nie mogły
się powtórzyć, to nie stosuj UNIQUE, tylko napisz triggera,
który przed wstawieniem/zmianą rekordu sprawdzi, czy nie ma
powtarzającej się nazwy wśród rekordów "not deleted".

M.




zbig - 08-08-2007 00:03

  Marcin wrote:

> Ograniczenia typu UNIQUE, FOREIGN KEY mają Ci ułatwiać życie,
> a nie utrudniać.

Słuszna uwaga, dzięki

zbig





hubert depesz lubaczewski - 08-08-2007 00:03

  Dnia 07.08.2007 Marcin <spam@noaddress.xx> napisał/a:
> się powtórzyć, to nie stosuj UNIQUE, tylko napisz triggera,
> który przed wstawieniem/zmianą rekordu sprawdzi, czy nie ma
> powtarzającej się nazwy wśród rekordów "not deleted".

ekhem. i wstaw sobie w kod race condition? "świetny" pomysł.

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.depesz.com/ - blog dla ciebie (i moje CV)




hubert depesz lubaczewski - 08-08-2007 00:03

  Dnia 07.08.2007 zbig <zbigrun@gmail.com> napisał/a:
> i teraz załóżmy że z tabeli logi nie można usuwać, w związku z tym nie można
> też usuwać osób i usług. Aby można było temu zapobiec używam do tabel
> osoba/usluga dodatkowej kolumny "deleted boolean" przez to na poziomie bazy
> relacja zawsze istnieje a już w warstwie widoku pilnuję żeby nie wypisywał
> elementów które są deleted. Ma to jednak swoje małe minusy np. kolumny
> nazwa nie mogą być wtedy jako UNIQUE bo ktoś mógł dodać-usunąć-dodać tą
> samą nazwę i ona musi występować kilka razy i jest też podobnych niuansów
> jeszcze trochę.

1. o unique już ci napisano.
2. w/g mnie tabela logi nie powinna mieć żadnych kluczy obcych, ani
wartości _id. tylko wartości już tekstowe. czyli username czy coś
takiego.
jeśli z jakiegoś powodu potrzebujesz też id - fajnie. dodaj, ale nie rób
na nim fkeya.

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.depesz.com/ - blog dla ciebie (i moje CV)




zbig - 08-08-2007 00:03

  hubert depesz lubaczewski wrote:

> 2. w/g mnie tabela logi nie powinna mieć żadnych kluczy obcych, ani
> wartości _id. tylko wartości już tekstowe. czyli username czy coś
> takiego.
> jeśli z jakiegoś powodu potrzebujesz też id - fajnie. dodaj, ale nie rób
> na nim fkeya.

To był tylko przykład, te tabele istnieją tylko w tym wątku :)
A co do unikalności to Twój wpis w blogu już rozwiązał problem, dzięki

zbig




Marcin - 08-08-2007 00:03

  hubert depesz lubaczewski wrote:
> Dnia 07.08.2007 Marcin <spam@noaddress.xx> napisał/a:
>> się powtórzyć, to nie stosuj UNIQUE, tylko napisz triggera,
>> który przed wstawieniem/zmianą rekordu sprawdzi, czy nie ma
>> powtarzającej się nazwy wśród rekordów "not deleted".
>
> ekhem. i wstaw sobie w kod race condition? "świetny" pomysł.

Nie za bardzo rozumiem. Chodzi o izolację transakcji?
Mogę sobie ustawić odpowiednią do tego celu.

M.




hubert depesz lubaczewski - 08-08-2007 00:03

  Dnia 07.08.2007 Marcin <spam@noaddress.xx> napisał/a:
>>> się powtórzyć, to nie stosuj UNIQUE, tylko napisz triggera,
>>> który przed wstawieniem/zmianą rekordu sprawdzi, czy nie ma
>>> powtarzającej się nazwy wśród rekordów "not deleted".
>> ekhem. i wstaw sobie w kod race condition? "świetny" pomysł.
> Nie za bardzo rozumiem. Chodzi o izolację transakcji?
> Mogę sobie ustawić odpowiednią do tego celu.

ekhem. i robić od razu serializację do tak prostej rzeczy? to trochę
zarzyna wydajność.

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.depesz.com/ - blog dla ciebie (i moje CV)
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO Czy zna (obsługuje) ktoś program Iso Draw ? MYSQL - kodowanie w ISO-PL strona plus baza w iso do utf-8 Kodowanie: z iso na utf Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8 =?iso-8859-2?q?Co_oznacza_b=B3=B1d_Warning:_mysql=5Fconnect() _[function.mysql-connect]:_Can't_connect_to_local_MySQL_server_through_sock et_'/var/run/mysqld/mysqld.sock'_(2)_in?= =?iso-8859-2?q?Informatyka,_Java,_EJB,_Ajax,_Spring=2E_Czy=BF by_to_koniec_=B6wiata,_czy_te=BF_nasze_uczelnie_b= EAd=B1_uczy=B3y_w_ko=F1cu!_czego_praktycznego_=2E= 2E=2E=2E?= =?iso-8859-2?q?Ati_Mobility_Radeon_X300_W_Notebooku_Jak_Zwi=E Akszy=E6_Ilo=B6=E6_Grafiki_Poprzez_Wsp=F3=B3dziele nie_Z_Ramu=3F=3F=3F?= =?ISO-8859-2?Q?=AFegnam_si=EA=2E=2E=2E?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • fantazia.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com