Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Nietypowe zapytanie typu DELETE
splatch
post
Post #1





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Witam serdecznie, mam problem z zapytaniem, ktore ma usuwac wiersze, ktore sa zbyteczne. Chodzi o usunięcie zbytecznych rekordów. Struktura:

Kod
   1[__user_parameter_values___]               [___user_parameter___]
+--|user_parameter_values_id  |*     +--------|user_parameter_id   |
|  |user_parameter_id         |<-----+       1|user_parameter_name |
|  |user_id                   |               |user_parameter_array|
|  +--------------------------+               |user_parameter_size |
|                                             +--------------------+
|   [__user_parameter_value__]
|   |user_parameter_value_id |
+-->|user_parameter_values_id|
1..n|user_parameter_value    |
     +------------------------+


Struktura ta ma umożliwić zapis wielu wartości. Każdy parametr może być tablicą - określa to kolumna user_parameter.user_parameter_array. Jeśli parametr jest tablicą to wtedy w tabeli pośredniczącej user_parameter_values wciąż jest jeden wiersz, ponieważ pojedyńcza wartość jest zapisywana w user_parameter_value.

Mój problem jest następujący - przy zmianie rozmiaru tablicy na mniejszy chcę usunąć zbędne rekordy z user_parameter_value. Na załączonym obrazku jest zaznaczone, że pomiędzy relacją user_parameter_values a user_parameter_value zachodzi związek 1..n. W rzeczywistości związek ten to 1..user_parameter.user_parameter_size.
Jeżeli mam w takiej strukturze dane, powiedzmy.. numer telefonu określony jako tablicę o rozmiarze 3 i nagle decyduję się na zmniejszenie liczby numerów do 2 to pozostaje jeden zbyteczny wiersz. Utrudnieniem jest to, że całość jest realizowana przez tabelkę pośredniczącą.
Czy ktoś wie jak rozwiązać mój problem?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
SongoQ
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


To troche odchodzi od zalozen baz danych. Jesli masz tablice i dodatkowo stosujedz 2 tabele aby to zobrazowac relacyjnie to w tym momencie dane sie duplikuja (powstaje nadmiarowosc) ktora moze prowadzic do bledow.

Mozesz zrezygnowac z tej tablicy i upychac w rekordy ktore podales i wtedy usuniecie jest banalna sprawa.
2 pomysl to np PG umozliwia zapisanie tablicy w DB i wtedy musislbys miec taki schemat aby wartosc / index z tego pola odpowiadalo rekordowi z user_parameter_value. Z tego co wiem to chyba zadna baza takich relacji nie oferuje. Przedstaw wiecej szczegolow zastosowania, moze wtedy bedzie jasniej.
Go to the top of the page
+Quote Post
splatch
post
Post #3





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Ten sposób jest optymalny ponieważ w MySQL nic lepszego nie ma, tzn. tak jak piosałeś nie ma typów tablicowych, trzeba je poniekąd emulować.
W takiej sytuacji nadmiarowość nie powstaje, ponieważ nie są nigdzie dublowane wartości. user_parameter jest pojedyńczy, user_parameter_values jest primary key+unique na user_id+user_parameter_id, a w user_values jest tylko dowiązanie. Moim zdaniem związki i relacje są w porządku. Jest to wyjście na pewno lepsze niż serializowanie tablicy w polu tekstowym.
Przypominam, chodzi mi o zapytanie które usunie z user_parameter_values zbędne rekordy (tzn. te, które są ponad user_parameter.user_parameter_size).

dodatkowe informacje
Tak wygląda interfejs:
(IMG:http://img.dywicki.pl/db/screen_1.jpg)

Teraz zmniejszam ilość pól w tablicy do 3.
(IMG:http://img.dywicki.pl/db/screen_3.jpg)

Ale w bazie w dalszym ciągu jest, ponieważ nie potrafię usunąć tych rekordów, które są zbyteczne.
(IMG:http://img.dywicki.pl/db/screen_4.jpg)

Ostatni diagram jest troszke niewyraźny, przedstawiam wersję graficzną. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
(IMG:http://img.dywicki.pl/db/screen_5.jpg)

Struktura ta sprawdza się w działaniu - mam zrobioną edycję, dodawanie oraz usuwanie danych, ale niestety nie mogę sobie poradzić z sytuacją, kiedy zmniejsza się rozmiar tablicy. Mogę to oczywiście załatwić z poziomu php, nie mniej wolałbym to zrobić jednym, góra dwoma zapytaniami i to bez przerzucania nic przez php.

Ten post edytował splatch 29.03.2006, 10:05:47
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: 19.12.2025 - 18:34