Kamil Stawiarski

Kamil Stawiarski Oracle Certified
Master | Oracle ACE

Temat: Diagram E/R w UML?

Tomasz K.:
Kamil Stawiarski:
Wiesz, ja tylko twierdzę, że oprogramowywanie funkcjonalności relacji od nowa w aplikacji bywa bez sensu, bo jest to wymyślanie koła na nowo.
Niby prawda, ale ja na co dzień pracuję z systemem, który ma ponad 6000 tabel w relacyjnej bazie i ... ani jednego integrity contraint nałożonego po stronie RBDMS :) Schema trzymana jest po stronie serwera aplikacji i śmiga to wszystko bardzo dobrze. Zastanawiam się, co byśmy osiągnęli, definiując teraz kilkanaście tysięcy (lekko licząc) constraintów? Czy wydajność by wzrosła? A może wręcz przeciwnie, bo przecież sprawdzanie więzów integralności po stronie RBDMS też nie jest za darmo.

Na pytanie, czy wzrosłaby wydajność mógłbym Ci odpowiedzieć jednoznacznie, gdybym zobaczył bazę, zapytania i dowiedział się co to za silnik. Póki co mogę odpowiedzieć: "to zależy..." :)
A jeśli nie korzystasz z funkcjonalności, które zapewnia Ci silnik RDBMS no po co go wogóle stosować :)
Pytanie, czy musisz korzystać ze wszystkiego, co fabryka dała?

Nie, nie trzeba. Ale wielokrotnie moja praca optymalizacyjna sprowadza się to użycia funkcjonalności, które zostały zaniedbane, takich jak widoki zmaterializowane, histogramy czy możliwość przepisania zapytań do STAR QUERY w przypadku hurtowni danych - bardzo często wiążę się to z użyciem constraintów w stanie ENABLE VALIDATE... ale jak już pisałem wcześniej: "to zależy".
Kamil Stawiarski

Kamil Stawiarski Oracle Certified
Master | Oracle ACE

Temat: Diagram E/R w UML?

Jarek Żeliński:
Kamil Stawiarski:
Wiesz, ja tylko twierdzę, że oprogramowywanie funkcjonalności relacji od nowa w aplikacji bywa bez sensu, bo jest to wymyślanie koła na nowo.

nikt tu nie wymyśla oprogramowania relacji na nowo, rzecz w tym, że nie raz proste relacje ERD są zbyt proste i paradoksalnie pisanie funkcji operujących na tych danych jest trudniejsze niż oprogramowanie ich w aplikacji. Typowym przykładem są złożone zależności związane z obsługa historii zmian czy wymaganie modyfikacji logiki danych w czasie.
Kiedy aplikacja realizuje relację z użyciem wielu "pętli" i "ifów"

nie prawda

"Nie prawda"? Nie rozumiem co to oznacza w tym kontekście - brak pętli i instrukcji warunkowych w Twoich aplikacjach? Wydaje mi się to trochę nierealne.
Bo nie zgadzam się, że wydajność nie ma znaczenia a wszystko można ogarnąć dokładając więcej ram'u, lepsze dyski czy więcej CPU... A jeśli nie korzystasz z funkcjonalności, które zapewnia Ci silnik RDBMS no po co go wogóle stosować :)

bo jest fajnym narzędziem do zarządzania nawet pojedynczymi tabelami :), po drugie coraz częściej bywa, że wartość oprogramowania leży w jego podatności na zmiany a niestety jeden system relacyjnych danych "pod aplikacją" nie ułatwia tego...

Jeszcze raz podkreślam: Nie uważam, że jedna wielka baza relacyjna jest remedium na wszystkie problemy IT. Twierdzę natomiast, że jej umiejętne zastosowanie w systemie lub module systemu pozwoli na uzyskanie wysokiej wydajności oraz bezpieczeństwa danych, poprzez zastosowanie wyrafinowanych polityk backup'u, replikacji oraz klastrowania.

Chyba już zacząłem się powtarzać, więc powtórzę jeszcze tylko: wszędzie trzeba zachować równowagę i nie popadać w skrajności - do jeżdżenia samochodem nie zaprzęgać wołu a do ciągnięcia pługa nie używać ferrari.

Dzięki wszystkim za dyskusję w tym wątku - była niewątpliwie ciekawa.

Pozdrawiam,
Kamil.
Marek Kubiś

Marek Kubiś programista c#

Temat: Diagram E/R w UML?

Tomasz Kupczyk:
Aleksander Olszewski:
Kamil Stawiarski:
Wiesz, ja tylko twierdzę, że oprogramowywanie funkcjonalności relacji od nowa w aplikacji bywa bez sensu, bo jest to wymyślanie koła na nowo.
Niby prawda, ale ja na co dzień pracuję z systemem, który ma ponad 6000 tabel w relacyjnej bazie i ... ani jednego integrity contraint nałożonego po stronie RBDMS :) [...]
Ja właściwie się dziwię, że to wszystko działa. Jedyna odpowiedź, która mi się nasuwa, to taka, że nie da się tych 6000 tabel połączyć w schemacie relacyjnym.
Schemat jest relacyjny, nie ma jedynie sprawdzania więzów integralności po stronie RBDMS.
Czyli nie ma pilnowania Foreign Key, sprawdzania Check, a jest Primary, Unique Key i częściowo Null? Czy dobrze powyższe odczytałem?
Zapewne w tabelach zwielokrotniono powtarzają się te same dane.
Też, tam gdzie jest to koniecznie, ale w większości przypadków nie ma redundancji i schemat jest dobrze zaprojektowany - relacyjność jest zachowana.
No i chyba tak powinno się rozwiązywać rzeczywiste problemy. Przynajmniej ja się z takim podejściem zgadzam. ;-)
Podstawowa informacja z baz danych, to taka, że założenie relacji przyśpiesza wykonanie zapytania po kilku tabelach.
Tak, ale indeksy są ważniejsze. Nawet najlepiej zaprojektowany schemat będzie na nic, jak nie masz odpowiednich indeksów.
;-)
Czasem bardziej opłaca się rozbić rozbudowane zapytania na 2 mniejsze.
I tu ja nie zgodzę się.
To już raczej akademicki problem. Natomiast w kontekście całej dyskusji istotniejszym wydaje mi się przyczyna, która może spowodować alergię na relacje i w konsekwencji doprowadzić do zaklinania rzeczywistości.

Zgadzając się z poniższym
Jak na razie najszybszym optymalizatorem zapytań jest optymalizator silnika bazodanowego, z prostej przyczyny --- jest napisany w niskopoziomowym języku (jak cały silnik) i działa w ramach tego samego procesu systemowego.
i wiążąc z uwagą Pana Kamila, że oprogramowywanie funkcjonalności relacji od nowa w aplikacji bywa bez sensu, chyba warto zadać sobie pytanie, jakie warunki muszą być spełnione, żeby opłacało się zrezygnować z pewnych funkcjonalności bazy. ;-)

Wszak niskopoziomowo przepisywane są także obiekty, a wbudowywane funkcjonalności, oferujące także manipulację danymi, coraz bardziej zaawansowane. Te obiekty typu ClientDataSet i klasy pochodne, są nie tylko funkcjonalne ale pozwalają bez uszczerbku na wydajności, a może nawet z poprawą wydajności, przetwarzać dane w aplikacji i robi się to podobnie jak na bazie.

W tym kontekście, jeżeli zdecydować się na przetwarzanie danych w CDS, oprogramowywanie funkcjonalności relacji w aplikacji jest nie tyle dublowaniem funkcjonalności bazy, co raczej "zabraniem logiki" z bazy, którą przecież łatwo podejrzeć, przekopiować i użyć w konkurencyjnej aplikacji. Nie sprawdzałem, ale intuicyjnie wydaje się, że jest także działaniem w stronę przyśpeszenia aplikacji, zmniejszenia ruchu w sieci, zmniejszenia obciążenia dysków serwera, .. .

Niniejsze sprowadza więc bazę, niczego jej nie ujmując, do roli inteligentnego kontenera na dane. ;-)

Jak dla mnie, warto zachować w bazie wszystkie te elementy, które pozwalają na szybkie udostępnianie danych np: indeksy, niektóre relacje, a to co wiąże się z przetwarzaniem danych, np: niektóre relacje przenieść do aplikacji.

Przetwarzając dane w takim obiekcie, mamy więc pełnię funkcjonalności bazy. Jednak jeżeli programista "kopnie się", to może on obserwować efekt, że dopóki jest na jakiejś formatce, w aplikacji to wszystkie dane są dostępne, może je dodawać, może usuwać, ale opuszczenie formatki, aplikacji i powrót to .. ogladanie pustego rekordseta. ;-)

Usunięcie kucza obcego w bazie, usuwa tę niedogodność i może być uznane, że wszystkiemu winne są obecne w bazie relacje, constrainty. Prawda oczywiście jest taka, że jest błąd w programie, ale łatwiej go naprawić umieszczając wszystkie dane w jednej tabeli i zrezygnować z kluczy obcych niż prowadzić śledztwo, którego nota bene podejmowanie z góry skazane jest na porażkę jak programista nie do końca jest świadom logiki całości.

Analiza schematu UML nic tu raczej nie pomoże bo tam relacje biznesowe, a schemat encji i relacji zawierać może wiele szczegółów utrudniających analizę problemu. Zresztą trzeba wiedzieć czego się szuka, a to nie zawsze oczywiste. ;-)

Pewnie nie jeden miał pianę na ustach, ja też ;-), ale na szczęście nigdy nie wpadłem na pomysł kwestionowania faktu obecności relacji w naszym życiu. ;-))) Reasumując, paradygmat obiektowy, jak dla mnie, to rozsądna alternatywa dla Query i jak ktoś nie wpadnie na robienie z tabelami w bazie głupot, to wszystkim może jego użycie wyjść na dobre. Ale to nie takie oczywiste. ;-)))
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Diagram E/R w UML?

Kamil Stawiarski:
Kiedy aplikacja realizuje relację z użyciem wielu "pętli" i "ifów"

nie prawda
"Nie prawda"? Nie rozumiem co to oznacza w tym kontekście - brak pętli i instrukcji warunkowych w Twoich aplikacjach? Wydaje mi się to trochę nierealne.

Złoóżnych pętli ifów można uniknąć...

Jeszcze raz podkreślam: Nie uważam, że jedna wielka baza relacyjna jest remedium na wszystkie problemy IT. Twierdzę natomiast, że jej umiejętne zastosowanie w systemie lub module systemu pozwoli na uzyskanie wysokiej wydajności oraz bezpieczeństwa danych, poprzez zastosowanie wyrafinowanych polityk backup'u, replikacji oraz klastrowania.

tylko, że wymaganiem wielu systemów jest ich łatwa przebudowa, integracja i dodawanie nowych funkcjonalności oraz wielokrotne wykorzystywanie pojedynczych modułów... co do bezpieczeństwa danych to obawiam się, że dynamicznie i kontekstowo przydzielane uprawnienia w wielu przypadkach łatwiej obsłużę na poziomie aplikacji...

konto usunięte

Temat: Diagram E/R w UML?

Marek Kubiś:
[...]
Schemat jest relacyjny, nie ma jedynie sprawdzania więzów integralności po stronie RDBMS.
Czyli nie ma pilnowania Foreign Key, sprawdzania Check, a jest Primary, Unique Key i częściowo Null? Czy dobrze powyższe odczytałem?
Zgadza się.
Niniejsze sprowadza więc bazę, niczego jej nie ujmując, do roli inteligentnego kontenera na dane. ;-)
Kontener na dane to najważniejsze miejsce każdego systemu, więc im mniej "magii" się dzieje na kontenerze, tym lepiej. Powinna tu obowiązywać zasada KISS.
Jak dla mnie, warto zachować w bazie wszystkie te elementy, które pozwalają na szybkie udostępnianie danych np: indeksy, niektóre relacje, a to co wiąże się z przetwarzaniem danych, np: niektóre relacje przenieść do aplikacji.
Podpisuję się pod tym :)

konto usunięte

Temat: Diagram E/R w UML?

Kamil Stawiarski:
Tomasz K.:
Zastanawiam się, co byśmy osiągnęli, definiując teraz kilkanaście tysięcy (lekko licząc) constraintów? Czy wydajność by wzrosła? A może wręcz przeciwnie, bo przecież sprawdzanie więzów integralności po stronie RBDMS też nie jest za darmo.
Na pytanie, czy wzrosłaby wydajność mógłbym Ci odpowiedzieć jednoznacznie, gdybym zobaczył bazę, zapytania i dowiedział się co to za silnik. Póki co mogę odpowiedzieć: "to zależy..." :)
Wydajność jest zadowalająca. Po co optymalizować coś, co działa dobrze? Chyba, że w celach badawczych ;)
A jeśli nie korzystasz z funkcjonalności, które zapewnia Ci silnik RDBMS no po co go wogóle stosować :)
Pytanie, czy musisz korzystać ze wszystkiego, co fabryka dała?
Nie, nie trzeba. Ale wielokrotnie moja praca optymalizacyjna sprowadza się to użycia funkcjonalności, które zostały zaniedbane...
Trochę się rozmijamy. Ja opisałem sytuację, w której system działa dobrze i wydajnie pomimo rezygnacji z całego dobrodziejstwa inwentarza. Ty mówisz o robocie, którą wykonujesz zapewne na żądanie, wtedy gdy klient jest niezadowolony z wydajności swojego systemu. To dwa różne przypadki.
Marek Kubiś

Marek Kubiś programista c#

Temat: Diagram E/R w UML?

Tomasz K.:
Marek Kubiś:
Niniejsze sprowadza więc bazę, niczego jej nie ujmując, do roli inteligentnego kontenera na dane. ;-)
Kontener na dane to najważniejsze miejsce każdego systemu, więc im mniej "magii" się dzieje na kontenerze, tym lepiej. Powinna tu obowiązywać zasada KISS.
Wolę dać BUZI (Bez Udziwnień Zapisu, Idioto). ;-)))
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Diagram E/R w UML?

Ortodoksyjne zastosowanie relacyjnego modelu danych i wszelkich mechanizmów dostępnych w motorach SQL, nie raz nic nowego nie wnoszących a utrudniających przyszłe zmiany lub administrowanie to jest KISS czy BUZI?

konto usunięte

Temat: Diagram E/R w UML?

Ortodoksyjne zastosowanie relacyjnego modelu danych i wszelkich mechanizmów dostępnych w motorach SQL, nie raz nic nowego nie wnoszących a utrudniających przyszłe zmiany lub administrowanie to jest KISS czy BUZI?

Dołączam się do pytania :>
Może w końcu ktoś przemianuje pojęcie prostoty ...

konto usunięte

Temat: Diagram E/R w UML?

Prostsze jest wykorzystanie istniejących mechanizmów, niż dłubanie tego samego w aplikacji.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Diagram E/R w UML?

Łukasz K.:
Prostsze jest wykorzystanie istniejących mechanizmów, niż dłubanie tego samego w aplikacji.

przypomnę: wymagania zamawiającego... jeżeli "relacje i inne gadżety" a także sam model relacyjny ich nie spełnia, to "dłubanie" ma sens, po drugie biorąc pod uwagę istnienie bibliotek, podobnie jak SQL motor nikt nie dłubie od zera kody systemu, jeżeli ktoś uważa że tworzenie oprogramowania jest dłubaniem kodu to chyba tkwi w epoce lat 80tych...

dodam po raz kolejny: wytworzenie oprogramowania dla zamawiającego to spełnienie jego wymagań a nie użycie na siłę czegoś co się już ma... choć niestety wielu dostawców tak właśnie robi (a ja mam potem robotę...)Jarek Żeliński edytował(a) ten post dnia 13.11.11 o godzinie 22:18

konto usunięte

Temat: Diagram E/R w UML?

Jarek Żeliński:
Łukasz K.:
Prostsze jest wykorzystanie istniejących mechanizmów, niż dłubanie tego samego w aplikacji.

przypomnę: wymagania zamawiającego... jeżeli "relacje i inne gadżety" a także sam model relacyjny ich nie spełnia, to "dłubanie" ma sens, po drugie biorąc pod uwagę istnienie bibliotek, podobnie jak SQL motor nikt nie dłubie od zera kody systemu, jeżeli ktoś uważa że tworzenie oprogramowania jest dłubaniem kodu to chyba tkwi w epoce lat 80tych...

Jakich bibliotek używasz do zapewnienia integralności danych?
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Diagram E/R w UML?

Łukasz K.:
Jarek Żeliński:
Łukasz K.:
Prostsze jest wykorzystanie istniejących mechanizmów, niż dłubanie tego samego w aplikacji.

przypomnę: wymagania zamawiającego... jeżeli "relacje i inne gadżety" a także sam model relacyjny ich nie spełnia, to "dłubanie" ma sens, po drugie biorąc pod uwagę istnienie bibliotek, podobnie jak SQL motor nikt nie dłubie od zera kody systemu, jeżeli ktoś uważa że tworzenie oprogramowania jest dłubaniem kodu to chyba tkwi w epoce lat 80tych...

Jakich bibliotek używasz do zapewnienia integralności danych?

co tu nazywać integralnością? Definicja z WIKIpedii:

Integralność danych, także spójność (ang. data integrity) – funkcja bezpieczeństwa polegająca na tym, że dane nie zostały zmienione, dodane lub usunięte w nieautoryzowany sposób. W technice informatycznej i telekomunikacyjnej ochrona integralności zapobiega przypadkowemu zniekształceniu danych podczas odczytu, zapisu, transmisji lub magazynowania. Wykorzystuje się tutaj sumy kontrolne i kody korekcyjne takie jak CRC.

Jest tego kupa... wybacz, że nie przytoczę listy... dodam, że ubogie mechanizmy kontroli dostępu do danych w motorach SQL nijak się nie mają do kontroli z poziomu aplikacji...

P.S.
Ja nie używam bo nie implementuję, robią to współpracujący programiści...Jarek Żeliński edytował(a) ten post dnia 13.11.11 o godzinie 22:44

konto usunięte

Temat: Diagram E/R w UML?

Jarek Żeliński:
Łukasz K.:

Jakich bibliotek używasz do zapewnienia integralności danych?

co tu nazywać integralnością? Definicja z WIKIpedii:

Integralność danych, także spójność (ang. data integrity) ...
CRC.


Jest tego kupa... wybacz, że nie przytoczę listy...

Ok, jasne. Inaczej więc spytam: jakie biblioteki zastępują funkcjonalnie SQL-owe klucze obce?

Co do meritum: myślę, że wiem, o jakich przypadkach mówisz, gdy zbyt ścisła kontrola po stronie silnika bazodanowego jest zbędna i masz w tym rację, ale o tem potem. Najpierw to wyżej, bom po prostu ciekawy :)
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Diagram E/R w UML?

Łukasz K.:
Jarek Żeliński:
Łukasz K.:

Jakich bibliotek używasz do zapewnienia integralności danych?

co tu nazywać integralnością? Definicja z WIKIpedii:

Integralność danych, także spójność (ang. data integrity) ...
CRC.


Jest tego kupa... wybacz, że nie przytoczę listy...

Ok, jasne. Inaczej więc spytam: jakie biblioteki zastępują funkcjonalnie SQL-owe klucze obce?

Co do meritum: myślę, że wiem, o jakich przypadkach mówisz, gdy zbyt ścisła kontrola po stronie silnika bazodanowego jest zbędna i masz w tym rację, ale o tem potem. Najpierw to wyżej, bom po prostu ciekawy :)

Mając kolekcję faktur i kolekcję kontrahentów w jakichś osobnych podsystemach skojarzę fakturę z kontrahentem za pomocą NIP jednak nie jako "relację" a żądając z kolekcji faktur te, których NIP jest "konkretny", jest to "logiczny" związek ale nie jest to relacja w rozumieniu tablic modelu relacyjnego.. to wręcz dokładne odwzorowanie sytuacji gdy urząd skarbowy wpada do firmy i żąda faktur kontrahenta X podczas kontroli krzyżowej dokumentów...

nie wiem czy o to pytasz (czy Ci odpowiedziałem) ale związek dwóch obiektów może być wyrażony z pomocą fizycznej asocjacji (atrybutem jednego obiektu jest ID drugiego) albo logicznie (jeden obiekt "wie" o jaki atrybut drugiego "zapytać"). W drugim przypadku mam swobodę, relacja implementowana jest w aplikacji, obiekt logicznie powiązany może być obiektem innego systemu i innej "bazy danych" (wywołam go np. webserwisem) a mimo to mogę się do niego odwołać, jeżeli tylko wiem gdzie go szukać, czyli mam zdefiniowany interfejs, dzięki temu nie mam ograniczeń co do "pracy na jednej bazie" ...

może zadaj pytanie, co chcesz osiągnąć...Jarek Żeliński edytował(a) ten post dnia 13.11.11 o godzinie 23:11

konto usunięte

Temat: Diagram E/R w UML?

Jarek Żeliński:

Mając kolekcję faktur i kolekcję kontrahentów w jakichś osobnych podsystemach skojarzę fakturę z kontrahentem za pomocą ...
szukać, czyli mam zdefiniowany interfejs, dzięki temu nie mam ograniczeń co do "pracy na jednej bazie" ...

GUID, wiadomo ;) Myślałem o jakichś konkretnych bibliotekach, które to ogarniają po stronie logiki. Jutro dopiszę resztę, teraz spać.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Diagram E/R w UML?

Łukasz K.:
Jarek Żeliński:

Mając kolekcję faktur i kolekcję kontrahentów w jakichś osobnych podsystemach skojarzę fakturę z kontrahentem za pomocą ...
szukać, czyli mam zdefiniowany interfejs, dzięki temu nie mam ograniczeń co do "pracy na jednej bazie" ...

GUID, wiadomo ;) Myślałem o jakichś konkretnych bibliotekach, które to ogarniają po stronie logiki. Jutro dopiszę resztę, teraz spać.

ano :)

konto usunięte

Temat: Diagram E/R w UML?

Jakich bibliotek używasz do zapewnienia integralności danych?

co tu nazywać integralnością? Definicja z WIKIpedii:

Integralność danych, także spójność (ang. data integrity) ...
CRC.


Jest tego kupa... wybacz, że nie przytoczę listy...

Ok, jasne. Inaczej więc spytam: jakie biblioteki zastępują funkcjonalnie SQL-owe klucze obce?

Ta biblioteka nazywa się 'obiektowy model domeny'.

konto usunięte

Temat: Diagram E/R w UML?

Łukasz K.:
Inaczej więc spytam: jakie biblioteki zastępują funkcjonalnie SQL-owe klucze obce?
Łukasz K.:
Prostsze jest wykorzystanie istniejących mechanizmów, niż dłubanie tego samego w aplikacji.
Nic nie musisz dłubać, ani wymyślać koła na nowo. W Javie masz chociażby Hibernate, w PHP Propel i Doctrine. Jeśli korzystasz z jakiegokolwiek frameworka ORM, to schema musi zostać pobrana z bazy danych i przerobiona na odpowiednie klasy. Każdy przyzwoity framework ma wbudowane narzędzia do automatycznego generowania klas.
Łukasz K.:
Jakich bibliotek używasz do zapewnienia integralności danych?
Jeśli aplikacja jest dobrze zaprojektowana i zaprogramowana, to integralność danych jest zachowana, więc dodatkowe sprawdzanie jej po stronie bazy jest nadmiarowe i niepotrzebnie obciąża silnik RDBMS. Owszem, dobrze byłoby to mieć po stronie bazy, żeby wykluczyć efekty źle napisanego oprogramowania, ale w pewnych zastosowaniach, gdy wydajność ma zasadnicze znaczenie, nie można niestety korzystać z wszystkich dobrodziejstw.

konto usunięte

Temat: Diagram E/R w UML?

Owszem, dobrze byłoby to mieć po stronie bazy, żeby wykluczyć efekty źle napisanego oprogramowania,

wtedy musisz uwzględnić efekty 'źle napisanej' bazy ... :)

Następna dyskusja:

Diagram E/R




Wyślij zaproszenie do