2011-09-04 10 views
5

Szukam najlepszego sposobu na rozwiązanie tej sytuacji. Chcę zapisać harmonogram amortyzacji w tabeli databse. Każdy wiersz zawiera datę, bieżące saldo, płatność, wartość bieżącą, odsetki i nowe saldo. W przypadku typowego kredytu hipotecznego na 30 lat będzie to 360 wierszy lub wkładów do bazy danych.W Delphi należy używać wielu wstawień do bazy danych z pętli lub użyć procedury składowanej?

Czy powinienem wykonać obliczenia wewnątrz pętli za pomocą Delphi i zrobić wstawkę dla każdego wyniku, czy też wykonać te obliczenia w ramach procedury przechowywanej?

To byłby pojedynczy użytkownik, lokalny komputer, aplikacja na komputer.

Odpowiedz

5

Chciałbym wykonać operacje w procedurze przechowywanej. W ten sposób praca z danymi znajduje się w bazie danych, do której należy.

Ponadto, zachowując wszystkie operacje związane z danymi w bazie danych, oszczędzasz sobie kłopotu z ponownym kodowaniem, jeśli w przyszłości zdecydujesz się na zmianę języka.

+0

Wracam ze świata klientów zablokowanych do Oracle DBMS więc zmiana jest prawie niemożliwe :) . IMHO, mając wszystkie operacje związane z danymi (SELECTs dla jednej, ale w większości specyficznych operacji, które obejmują modyfikowanie jednej lub więcej tabel) powinny znajdować się w bazie danych, do której należą. Przechowywanie reguł biznesowych w bazie danych i udostępnianie ich również za pomocą niestandardowych interfejsów API. Wprawdzie zwiększy to krzywą uczenia się dla programisty odpowiedzialnego, ale myślę, że warto. Przyznam, że to sprowadza się do wielkości aplikacji i preferencji osób, które nad nią pracują :) – phil

+0

@Miho, tak, to jest osobiste preferencje, ale takie, które by mnie zabiły, gdyby ktoś zrobił to w jednym z moich projektów. Dla programisty aplikacji użycie procedur przechowywanych jest gniazdem żmii! Zasadniczo przenosi reguły danych poza zakres twórcy aplikacji i wypycha ich poza zasięg wzroku.Chciałbym wiedzieć, co dzieje się z danymi, nie ma tego tajemniczo dla mnie. – Misha

+0

@Misha, Zgadzam się z Tobą odnośnie danych właśnie pojawiających się. Osoby pracujące z danymi muszą wiedzieć, co i jak są odzyskiwane lub przetwarzane. Problem polega na rozróżnieniu między twórcą aplikacji a deweloperem baz danych. Nie rozumiem, jak coś tajemniczo pojawia się w twoim kodzie. Jeśli umieścimy coś w procedurze przechowywanej, nie oznacza to, że programista aplikacji nie może zlokalizować i zmodyfikować/wyświetlić tej procedury? Dodaje tylko kolejny poziom abstrakcji. Dobry (choć uprzedzony przez DB) widok: http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:2143974700346554115 – phil

8

Przygotowane zapytania i procedury przechowywane są porównywalne pod względem wydajności. Jako programista aplikacji nienawidzę procedur przechowywanych z pasją, ponieważ przenoszą logikę z wnętrza aplikacji, gdzie mogę ją znaleźć, do innego miejsca niewidocznego podczas przeglądania kodu źródłowego. I spójrzmy prawdzie w oczy, nikt nie ma zamiaru przebudowywać aplikacji w innym języku, jeśli działa.

Tak więc, jeśli twoje rzeczy to bazy danych i SQL i nie ma co z tym nic wspólnego, to procedury przechowywane są w porządku. Jednakże, jeśli jesteś przede wszystkim programistą aplikacji, nie widzę żadnej korzyści z używania procedur przechowywanych przez wykonywanie zapytań z kodu.

+0

Co to jest "Przygotowane zapytanie" i jak można go użyć w aplikacji Delphi? –

+0

Przygotowane zapytanie jest sparametryzowanym zapytaniem, które ma zasoby "przydzielone" (przygotowane) na serwerze w celu uzyskania lepszej wydajności. Możesz wtedy uruchomić to samo zapytanie kilka razy i jest to tylko "setup" (przygotowany) raz na serwerze. Poszukaj właściwości Przygotowany na komponentach kwerendy, których używasz (ADO, dbExpress itp.). – Misha

+1

Jeśli dane źródłowe były już w bazie danych, a miejscem docelowym jest ta sama baza danych. Wtedy jedyną drogą do zrobienia jest procedura zapisana, w przeciwnym razie wydajność sieci została zmiksowana i spowolniona operacja. –

0

Jeśli twoja baza danych jest lokalna i nie sadzisz, aby jej klient/serwer był jeden dzień, może być niewielka różnica w stosunku do wydajności. Wiele zależy od używanej bazy danych. Niektóre z nich mają "tablicę DML", która umożliwiłaby wykonanie wszystkich wkładek 360 w jednym obiegu bazy danych, w zasadzie zamiast wykonać 360 wstawek, wypełnisz zmienne związane z oprawą i wykonasz pojedynczą wstawkę. Najgorszym sposobem byłoby użycie n insertów bez zmiennych wiążących. Skompilowany i zoptymalizowany kod Delphi może być nieco szybszy niż kod zinterpretowanej procedury przechowywanej, jeśli baza danych go nie skompiluje (niektóre mogą po prostu użyć kodu P). Z perspektywy projektowania umieszczenie logiki danych wewnątrz DB publikującej rodzaj API za pomocą procedur przechowywanych (może zabraniać innych sposobów modyfikowania danych) może zapewnić silniejszą kontrolę nad danymi.

2

Jeśli używasz AnyDAC, obsługuje ArrayDML dla wszystkich obsługiwanych baz danych. Myślę, że to jedna świetna funkcja. To komercyjne oprogramowanie, ale bardzo dobra inwestycja. (Nie jestem związany z nimi w żaden sposób, z wyjątkiem bardzo zadowolonym klientem.)

Zobacz Very High Performance using the Array DML

Powiązane problemy