Jarosław Żeliński

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

Temat: UML a ERD

I znowu :), nie rozumiem po co ludzie upierają się by w UML modelować struktury danych skoro są stare i dobre diagramy ERD .... kolejne podejście:

http://www.tdan.com/view-articles/15445%0D
Łukasz Ważny

Łukasz Ważny winning doesn't
really matter as
long as you win

Temat: UML a ERD

Jeżeli zakład się użycie ORM'a, diagram klas encji i diagram erd będzie bardzo podobny, czyż nie? :)
Jarosław Żeliński

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

Temat: UML a ERD

Łukasz Ważny:
Jeżeli zakład się użycie ORM'a, diagram klas encji i diagram erd będzie bardzo podobny, czyż nie? :)

nie, ORM to mapowanie obiektowej struktury dziedziny na relacyjną bazy RDBMS przechowującą tylko atrybuty klas (obiektów) z modelu dziedziny

jeżeli model dziedziny będzie bardzo zły (czytaj obiektowy antywzorzec projektowy o nazwie anemiczny model dziedziny) to diagram ERD będzie bardzo bardzo zbliżony ...
Łukasz Ważny

Łukasz Ważny winning doesn't
really matter as
long as you win

Temat: UML a ERD

Jarek Żeliński:
jeżeli model dziedziny będzie bardzo zły (czytaj obiektowy antywzorzec projektowy o nazwie anemiczny model dziedziny) to diagram ERD będzie bardzo bardzo zbliżony ...

poczytałem o anemicznym modelu dziedziny... ciekawe dotąd myślałem, że jest to zaleta :/

konto usunięte

Temat: UML a ERD

Jarek Żeliński:
I znowu :), nie rozumiem po co ludzie upierają się by w UML modelować struktury danych skoro są stare i dobre diagramy ERD .... kolejne podejście:

http://www.tdan.com/view-articles/15445%0D

Może po to, żeby mieć jakiś 'zalążek' modelu domeny ? Ale to trochę bez sensu bo najpierw powinien być model domeny w UML a dopiero później projekt bazy ..

... Nie wiem. ;)
Damian Kamiński

Damian Kamiński Zamieniam informacje
w wiedzę ...

Temat: UML a ERD

ORM. Obiekt to w teorii encja, widział ktoś w praktyce ENCJE mapowaną na obiekt ? ORM z założenia bardzo fajna sprawa, w praktyce (głównie za sprawą odtwórczego i bezmyślnego używania Hibernate'a) 1 typ obiektu 1 tabela, o cudach dziejących się przy próbie wyciągania danych z więcej niż jednej tabeli naraz nie wspominając. Generalnie ORM/Hibernate świetna koncepcja baaaardzo źle praktykowana.

Co do modelowania bezpośrednio w UML'u struktur danych, no cóż ... model ... domena ... nowa szkoła :)

Mnie uczono przemyśleć problem, zidentyfikować przetwarzane i gromadzone informacje (ERD), i zaprojektować optymalne struktury danych dla ich przechowywania oraz zachowania relacji pomiędzy nimi.

W między czasie ktoś gdzieś postawił znak równości pomiędzy encją - obiektem - tabelą ... co nie jest prawdą. Bo encja może być opisana na kilku tabelach.

Reasumując ... można przy pomocy UML'a zrobić coś na kształt ERD :) W praktyce większość używa zmodyfikowanego diagramu klas w EA do rysowania struktur.

Ale, gdybym miał robić zgodnie z "J-filozofią" to bym się zapłakał na śmierć :) Dla mnie osobiście BD zawsze będzie sercem dużych systemów i miejscem gdzie się szuka wydajności i sprawności, a nie jak to usiłują zrobić Jfanatycy czymś co jest smutną koniecznością by im obiekty nie znikały po zamknięciu "programu".

Temat: UML a ERD

Odnoszę takie, może mylne, wrażenie, że... systemy dzielą się na "wysokowydajne" i "elastyczne".

Wysokowydajne - podejście Damiana i tej "starej" szkoły. Logika często w DB (bo szybciej dostawać się do różnych informacji i wygodny język zapytań), godziny ślęczenia nad planami zapytań i projektowaniem struktur danych ze względu na wydajność i bezpieczeństwo. Ale te systemy niekoniecznie muszą być "elastyczne w wersji hard" (czyli wymieniamy poszczególne moduły jak klocki i - udaje nam się to). Systemy bankowe: bezwzględna szybkość, potrzebna redundancja. Ale zmiany? Trzeba, to dostawi się kolejny serwer z kolejną aplikacją. Zmiany rozwojowe są rzadsze i mogą być kosztowne, bank na to stać. Dojdzie czasem nowe pole tekstowe, wsparcie dla nowego rodzaju rachunku, poprawienie jakichś tam wskaźników zgodnie z nowymi przepisami. UWAGA - nie chodzi mi o to, że to są proste systemy (!), tylko, że nie teoretycznie nie muszą być podatne na wymianę wszystkiego i wszędzie. Można je pisać (tak mi się zdaje - jeśli nie, proszę o korektę) pod konkretny silnik bazy danych, pod konkretne, rzadko zmieniające się wymagania. Tysiące zoptymalizowanych, sztywnych procedur wbudowanych. Ale szybkich. Mamy tutaj wszak miliony transakcji każdego dnia. Wszystkie wg pewnych ustalonych schematów. Rekonfiguracja? Rzadka, przemyślana i naprawdę konieczna.

Wysoko elastyczne - podejście Jarka i "nowej" szkoły. Np. systemy klasy ERP i "wspomaganie biznesowe", szpitalne. Wymagana modularność (sprzedawane są "klocki"), konieczna współpraca z innymi systemami, serwisami, źródłami danych, duża konfigurowalność wyglądu i zachowania (wiele aspektów back i frontendu konfigurowanych już przez usera końcowego za pomocą systemu reguł i "designerów"), dowolność wyboru bazy danych (dziś Oracle, jutro SQL Server, pojutrze PostgreSQL), mnogość intefejsów prezentacji danych (forms, webapp, webservice, SAAS), wiele współpracujących ze sobą firm. Dział kadrowy od firmy A, a FK od firmy B, wymieniają informacje z hurtownią firmy C, a dostarczają je modułowi raportującemu od firmy D. Wszystko może być pisane w różnych językach i technologiach. Same fabryki, repozytoria, adaptery... :) O takich sytuacjach pisał Jarek w temacie baz NO SQL. Rekonfiguracja? Częsta, szybka - zmiany przepisów i polityki biznesowej (!), złożona.

----
Osobno:

Trzecia klasa - proste systemy "szyte na miarę", gdzie wyrafinowanie jest... stratą czasu, bo użytkownik tego nie wymaga. Proste strony firmowe, proste systemy bazodanowe dla małych firm, punktów usługowych. Zapytania często w kodzie (ostatnio MS wsparł tę warstwę wprowadzając WebMatrix), bazy danych w SQLite, Accesie, rzadziej Oracle XE/SQL Srv Expr. Kilka-kilkanaście tabel. Czysty SQLCommand, albo najprościej jak tylko można stosowany EntityFramework czy NH, może nawet LINQ2SQL.

Czwarta klasa - systemy przetwarzania danych - hurtownie, systemy analityczne. Kwestie typowe dla doświadczonych DBA i analityków.

Pytanie - gdzie ja jestem? Cóż, jak to mawiał pewien polityk: są dwie opcje, tak, jak są dwie nogi - lewa i prawa. A ja jestem informatycznie po środku :x :) A poważniej - zależnie od potrzeb. Obecnie częściej w obrębie DDD.

Pytanie - z której grupy wywodzą się autorzy takich artykułów. Świat nie jest jednokolorowy, a projekty IT to nie tylko ERP i systemy bankowe. Zatem również podejścia mogą być różne. Czasem wynika to z "tradycji", czasem z rzeczywistej wygody i wymagań. Czasem możemy napisać wysokoelastyczny system, jak z klocków LEGO, ale nie musimy, bo do niczego nam się to nie przyda. Nie każde auto ma 200 konny silnik tak, jak i... nie każde auto jest rozmiarów Smarta, którym zaparkujemy prostopadle do reszty aut :)Adrian Olszewski edytował(a) ten post dnia 09.09.11 o godzinie 18:53
Damian Kamiński

Damian Kamiński Zamieniam informacje
w wiedzę ...

Temat: UML a ERD

Adrian Olszewski:
Odnoszę takie, może mylne, wrażenie, że... systemy dzielą się na "wysokowydajne" i "elastyczne".

:D to nie tylko wrażenie :) to tak samo jak z dobrze i tanio :)

ps. Fakt ... jestem trochę skrzywiony systemami po set tabeli i miliony rekordów w każdej z nich oraz zapytań mających wykonywać się błysk :)Damian Kamiński edytował(a) ten post dnia 09.09.11 o godzinie 20:32
Jarosław Żeliński

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

Temat: UML a ERD

ORM. Obiekt to w teorii encja, widział ktoś w praktyce ENCJE mapowaną na obiekt ?

Obawiam się, że szkodę robi tłumaczenie "entity" na encję a jest to "byt" (jakiś). Słowo encja w j.polskim nie istnieje.

Z zasady baza danych relacyjna przetrzymuje dane i tylko dane (do tego RDBMS powstły), to po protu system utrwalania danych. Biorąc pod uwagę, że "dawniej" oprogramowanie to były pary: "funkcja - dane" osobno był kod programu a osobno dane przetwarzane i do tego był np. język SQL który pozwalał te dane wyciągać i zapisywać.

ORM z założenia bardzo fajna sprawa, w praktyce (głównie za sprawą odtwórczego i bezmyślnego używania Hibernate'a) 1 typ obiektu 1 tabela, o cudach dziejących się przy próbie wyciągania danych z więcej niż jednej tabeli naraz nie wspominając. Generalnie ORM/Hibernate świetna koncepcja baaaardzo źle praktykowana.

Zwrócę tu uwagę, że wzorzec active record (klasa na tablicę) jest bardzo często używany i jest bardzo użyteczny. Traktowanie takiej bazy jako bazy (tych osobnych tablic) jako "bazy danych" jest nieporozumieniem. Logika jest w kodzie a nie w "bazie" (i wiem, ze to "bazodanowców" boli).
Co do modelowania bezpośrednio w UML'u struktur danych, no cóż ... model ... domena ... nowa szkoła :)

sorry, raczej bełkot...
Mnie uczono przemyśleć problem, zidentyfikować przetwarzane i gromadzone informacje (ERD), i zaprojektować optymalne struktury danych dla ich przechowywania oraz zachowania relacji pomiędzy nimi.

tu proponuje zwrócić uwagę na fakt, że kiedyś zmiany w oprogramowaniu robiło się raz na 15 lat a dziś raz na kwartał. Wprowadzanie zmian do relacyjnej znormalizowanej bazy w zasadzie jest nie możliwe zaś dodanie kilku klas do systemu obiektowego gdzie klasy są mapowane na tablice jest proste i o to chodzi.

W między czasie ktoś gdzieś postawił znak równości pomiędzy encją - obiektem - tabelą ... co nie jest prawdą. Bo encja może być opisana na kilku tabelach.

prawda, jak ktoś stawia ten znak równości to jest problem...

Reasumując ... można przy pomocy UML'a zrobić coś na kształt ERD :)

po co skoro są do tego ERD?
W praktyce większość używa zmodyfikowanego diagramu klas w EA do rysowania struktur.

i to jest tragedia...
Ale, gdybym miał robić zgodnie z "J-filozofią" to bym się zapłakał na śmierć :) Dla mnie osobiście BD zawsze będzie sercem dużych systemów i miejscem gdzie się szuka wydajności i sprawności, a nie jak to usiłują zrobić Jfanatycy czymś co jest smutną koniecznością by im obiekty nie znikały po zamknięciu "programu".

no cóż, system z bazą danych RDBMS/normalizacja jest jak tankowiec na Bałtyku, niemodyfikowalny.... co do wydajności, o jaka wydajność chodzi? Bo dobrze zaprojektowany system obiektowy potrafi być szybszy od RDBMS i kilometrowych zapytań SQL. Dobrym przykładem są hurtownie i ich wielowymiarowe proste struktury danych (żadnych normalizacji), zapewniam, że dobrze zaprojektowany system obiektowy z prostym mapowaniem obiektowo-relacyjnym będzie szybszy i sprawniejszy a do tego łatwy do modyfikacji niż kobyła RDMBS/zestaw funkcji ;)
Damian Kamiński

Damian Kamiński Zamieniam informacje
w wiedzę ...

Temat: UML a ERD

Generalnie TAK, aczkolwiek :

- zdrowe podejście do BD w moim mniemaniu wcale nie oznacza ładowania logiki aplikacji w BD, można ewentualnie część standaryzacji/walidacji zaszyć w BD ale sama logika (trigger / procedura) nie jest obowiązkowa ... taki kompromis

- podoba mi się rozgraniczenie "bazy danych" od active record :) wtedy faktycznie wiele nieporozumień znika

- hurtownia danych to nie to samo co baza danych, hurtownia ma to do siebie ze jest bardzie READ niż write, dane są organizowane pod kątem informacji które są poszukiwane, wiele danych jest powielanych by zyskać wydajność

- mówiąc baza danych mam na myśli miejsce przechowywania wielu rodzajów danych o wielkiej ilości, które są dodawane, modyfikowane, usuwane, ponownie dodawane itd itd itd ... hurtownia nie ma tu zastosowania ... hurtownie karmi się tym co w takiej bazie zostanie "stworzone" i "zaklepane" jako poprawne, przetworzone, odfajkowane.

- problemy z modyfikowalnością dużych systemów to troszkę mit i slogan, mając DB Oracle, mogę się integrować dowolnie z czym chce jak chce (DB LINK, JMS, WEBSERVICE, etc), modelowanie istniejących tabel, rozbudowywanie jej o nowe pola to też żaden problem (no chyba ze po drodze mam magików z ORM i select *, co po dodaniu nowego pola generuje milion wyjątków)

- w polskich firmach zwłaszcza państwowych, gdzie ekipy zmieniają się jak rząd co 4 lata, również dostawca systemów zmienia się równie często i to co się zastaje u takiego molocha przyprawia o zawrót głowy, a mimo wszystko jest to ze sobą integrowane, czasem partyzancko (wy do pliku a my z pliku) a czasem mniej lub bardziej ambitnie

Kończąc, w ORM dla mnie wielką bolączką jest blokowanie danych, co prawda odchamiło się to trochę w najnowszym EE, ale systemy stawiane na hibernate w 99% zakładają ze mają bazę na wyłączność i jest ona nieśmiertelna, co kończy się tym ze wiele danych jest w cache serwera aplikacji, powodując że to co mam w BD nie mogę traktować jako ostateczne i wiarygodne i wtedy jest problem.

Wystarczy popatrzeć na SAP'a, comarchową EGERIE, bpsc'owy IMPULS, modułowe aplikacje, gdzie różne komponenty wykonane są w różnych technologiach, a stoją na jednej bazie i potrafią się nie pozabijać o dostęp, i wymieniać się w ramach modułów informacjami poprzez BD.

To jest rzecz która zawsze kuła mnie w oczy, ze niezależnie od technologi jaką sobie wymyślimy, każda z nich umożliwia łączenie się do np DB Oracle, co powoduje ze sama BD jest świetnym miejscem do wymiany danych pomiędzy systemami/modułami, a jednak ... prawie nikt tego nie praktykuje i woli sobie webservisami wymieniać dane w ramach jednej aplikacji bo może ktoś kiedyś do tego się podepnie (i odkryje ze WS nie był przygotowany do więcej niż jednego odbiorcy :P)

_________________
jeszcze odnośnie znaków równości ... kolejny moim zdaniem niesłusznie stawianym znakiem równości jest ten pomiędzy wzorcem projektowym a szablonem.
- Nie ma wzorca - nie da się zrobić
- Jest wzorzec - robimy tak jak we wzorcu
Tak jak by każda sytuacja idealnie wpisywała się w każdy z nich, wzorzec mówi wsadzić klucz, przekręcić, otworzyć drzwi, i już nikt nie sprawdza czy drzwi nie są przypadkiem otwarte.Damian Kamiński edytował(a) ten post dnia 10.09.11 o godzinie 00:19
Jarosław Żeliński

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

Temat: UML a ERD

Adrian Olszewski:
Odnoszę takie, może mylne, wrażenie, że... systemy dzielą się na "wysokowydajne" i "elastyczne".

to chyba zły podział :), bardzo "technokratyczny", systemy dzielą się na te które spanieją wymagania na na te które nie spełniają :)

najszybszy system nie spełniający wymagań funckjonlanych jest bezużyteczny, system mający wymagane funkcje działający "nieco wolno" jest i tak znacznie lepszy od braku systemu

Wysoko elastyczne - podejście Jarka i "nowej" szkoły.

obecne systemy ERP "na świecie" są refaktoryzowane w stronę systemów obiektowych pracujących z danymi na bazie wzorca active records (owe klasy na tablice) i nie są wcale niewydajne, wręcz przeciwnie.

I nie tylko moim zdaniem "nie jest to foch producenta"...

podział na "szyte na miarę" i "gotowe" w świetle spełnienia wymagań, w zasadzie traci sens bo system albo robi to czego oczekujemy albo nie robi...
Jarosław Żeliński

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

Temat: UML a ERD

Damian Kamiński:
Generalnie TAK, aczkolwiek :

- zdrowe podejście do BD w moim mniemaniu wcale nie oznacza ładowania logiki aplikacji w BD, można ewentualnie część standaryzacji/walidacji zaszyć w BD ale sama logika (trigger / procedura) nie jest obowiązkowa ... taki kompromis

kwestia podejścia, może być, że "program to to coś co świadczy oczekiwane usługi użytkownikom",
- podoba mi się rozgraniczenie "bazy danych" od active record :) wtedy faktycznie wiele nieporozumień znika

masz rację, moim zdaniem pojęcie Baza Danych (np. relacyjna) jest często mylone z "utrwalaniem danych" baza danych to utrwalanie danych ale nei każde utrwalanie danych to baza w powyższym rozumieniu.

- hurtownia danych to nie to samo co baza danych,

w świetle powyższego to jest to samo :), baza może być "read only" i nie widzę tu nic złego (np. bazy adresowe na CD).

hurtownia ma to do siebie ze jest bardzie READ niż write, dane są organizowane pod kątem informacji które są poszukiwane, wiele danych jest powielanych by zyskać wydajność

i o to chodzi właśnie: proste i wydajne, dodam, że redundancja to nie wada bazy a fobia wyznawców formalizacji tych baz :) (formalizacja komplikuje strukturę bazy i obniża jej wydajność).

- mówiąc baza danych mam na myśli miejsce przechowywania wielu rodzajów danych o wielkiej ilości, które są dodawane, modyfikowane, usuwane, ponownie dodawane itd itd itd ... hurtownia nie ma tu zastosowania ... hurtownie karmi się tym co w takiej bazie zostanie "stworzone" i "zaklepane" jako poprawne, przetworzone, odfajkowane.

nie ma takiego podziały w systemach, każdy system z częścią danych "robi cos na bieżąco" a część to tylko historia tych operacji, rozdzielenie tych funnkcji jest bardzo dobrym pomysłem (wystarczy w bazie transakcyjnej trzymać tylko stan bieżący a historię (np. zmiany adresu) wywalić do innej "bazy" i świat od razy jest prostszy :)

- problemy z modyfikowalnością dużych systemów to troszkę mit i slogan, mając DB Oracle, mogę się integrować dowolnie z czym chce jak chce (DB LINK, JMS, WEBSERVICE, etc), modelowanie istniejących tabel, rozbudowywanie jej o nowe pola to też żaden problem (no chyba ze po drodze mam magików z ORM i select *, co po dodaniu nowego pola generuje milion wyjątków)

dodanie nowej klasy (i model active records) jest dużo prostsze :), lepiej, mogę w dowolnym momencie zmienić treśc faktur i nie pruć całego systemu z tego powodu... w "dużych bazach danych RDBMS" zmiana struktury w działającym już systemie jest niemalże niemożliwa, po drugie jak mam na jednej znormalizowanej bazie finanse i sprzedaż, to już nigdy tych modułów nie rozdzielę (np. rezygnuje z prostego modułu sprzedaży i kupuje nowy CRM i chce żeby to dalej razem działało)
Wystarczy popatrzeć na SAP'a, comarchową EGERIE, bpsc'owy IMPULS, modułowe aplikacje, gdzie różne komponenty wykonane są w różnych technologiach, a stoją na jednej bazie i potrafią się nie pozabijać o dostęp, i wymieniać się w ramach modułów informacjami poprzez BD.

ale każdy z tych dostawców na hasło "kastomizacja" albo ucieka albo podaje zaporowe ceny, bez urazy ale poczytaj o MS Dynamix 2010... to framework, z możliwością dodawania i usuwania modułów.. w całości obiektowy i łatwy do modyfikacji, szkoda tylko, że większość dostawców tego oprogramowania w Polsce nie respektuje zaleceń i metodyk Microsoftu i psuje ten system grzebiąc w nim bez zrozumienia nie mając pojęcia o jego obiektowej strukturze.

To jest rzecz która zawsze kuła mnie w oczy, ze niezależnie od technologi jaką sobie wymyślimy, każda z nich umożliwia łączenie się do np DB Oracle, co powoduje ze sama BD jest świetnym miejscem do wymiany danych pomiędzy systemami/modułami,

wymiana danych poprzez ich współdzielenie jest najgorszą metodą integracji bo wymaga by każdy integrowany system "znał" strukturę danych, integracja danych poprzez wymianę obiektów (np. XML itp.) jest wygodny bo można nie mieć wiedzy o cudzej bazie, wystarczy uzgodnić postać wymienianych obiektów.

jeszcze odnośnie znaków równości ... kolejny moim zdaniem niesłusznie stawianym znakiem równości jest ten pomiędzy wzorcem projektowym a szablonem.
- Nie ma wzorca - nie da się zrobić
- Jest wzorzec - robimy tak jak we wzorcu

chyba nikt tu tak nie napisał :) wzorce to raczej szablony a nie "gotowce", brak wzorca absolutnie nie oznacza "nie da się" :)
Damian Kamiński

Damian Kamiński Zamieniam informacje
w wiedzę ...

Temat: UML a ERD

Jarek Żeliński:
Damian Kamiński:

To jest rzecz która zawsze kuła mnie w oczy, ze niezależnie od technologi jaką sobie wymyślimy, każda z nich umożliwia łączenie się do np DB Oracle, co powoduje ze sama BD jest świetnym miejscem do wymiany danych pomiędzy systemami/modułami,

wymiana danych poprzez ich współdzielenie jest najgorszą metodą integracji bo wymaga by każdy integrowany system "znał" strukturę danych, integracja danych poprzez wymianę obiektów (np. XML itp.) jest wygodny bo można nie mieć wiedzy o cudzej bazie, wystarczy uzgodnić postać wymienianych obiektów.


Tak z ciekawości, jaka jest "wartość dodana" umawiania się na XML'a od umawiania się na Tabelkę ?

Nakład zabiegów i obustronnych dostosowań jest IMHO identyczny. Nawet jak mam webservice który sie przedstawia i mówi co potrafi wystawić, to z drugiej strony muszę wyklikać "adapter" który weźmie to co mi potrzebne i przetworzy zgodnie z moimi potrzebami lub poda dalej w określone miejce.

Analogicznie można się umówić na tabelę z 20 polami gdzie każdy z systemów bierze sobie z niej taki podzbiór jakiego potrzebuje.

Zmieniając pole wystawiane WS / XML konsekwencje mam identyczne jak w przypadku wywalenia pola z tabeli która była używana do wymiany.

Przynajmniej tak to widzę, popraw mnie jeśli się mylę.

uzupełniając : Co do przykładu ze zmianą faktury, przyjmijmy ze firma przechodzi rebranding, ewentualnie zmienia się filozofia rozliczeń, z określonym dniem, ale ciągle chcę zachować możliwość wstecznego generowania faktur z okresu np przed kilku lat gdzie posługiwałem się inną marką, jednostką filozofią. W takiej sytuacji nakład cyrków które trzeba wykonać analogiczny niezależnie od podejścia :)Damian Kamiński edytował(a) ten post dnia 10.09.11 o godzinie 08:34

konto usunięte

Temat: UML a ERD

To jest rzecz która zawsze kuła mnie w oczy, ze niezależnie od technologi jaką sobie wymyślimy, każda z nich umożliwia łączenie się do np DB Oracle, co powoduje ze sama BD jest świetnym miejscem do wymiany danych pomiędzy systemami/modułami, a jednak ... prawie nikt tego nie praktykuje

... a jest tak ponieważ, systemy powinny komunikować się między sobą poprzez swoje interfejsy; Dużo prościej / praktyczniej jest tworzyć interface systemu w np. C# niż w np. T-SQL.

Temat: UML a ERD

Garść przemyśleń w temacie "integracja" przez bazy danych i XML:

1. integracja z pominięciem pisania wprost do bazy to większe bezpieczeństwo. Klient nie zna żadnych loginów ani haseł do naszej bazy, nawet nie wie, że ona istnieje. Czasem są na to duże naciski. Przykład - systemy medyczne. Być może jest tak tez w bankowości. Widzi procedurę i tylko procedurę, w dodatku z solidnie zabezpieczonymi parametrami (SQL injection). Możemy potem przemodelować bazę danych, procedura może zmienić się wewnątrz diametralnie, a jednak druga strona widzi niezmienioną sygnaturę - intefejs.

2. jeśli zajdzie potrzeba wymiany silnika DB, musi zmienić się metoda połączenia do niej. Klient musi użyć innego sterownika, bibliotek, być może inaczej obsłużyć wyjątki. No chyba, że jednak wystawimy adapter wrzucający coś do bazy - patrz pkt. 1

3. DB (a przynajmniej Oracle i MSSQL) świetnie radzą sobie z XMLem i czytaniem plików z dysku. W procesie integracji systemów nie trzeba dokładać żadnych dodatkowych narzędzi/adapterów/serwisów w Javie, C++, C#, ani martwić się, że DB stoi na Windowsie/Linuksie. Jedyny problem w Oracle to przesłanie XMLa przez dblinka. Ani XML ani CLOB nie przejdzie jako parametr procedury, więc trzeba się gimnastykować z jobami skanującymi kolejki (o dziwo - selecty clobów z tabel przez dblinki przechodzą). Ale pomijając ten niewielki problem - przynajmniej te dwa silniki świetnie wspierają integrację po XMLu w połączeniu z wczytywaniem danych z katalogów wymiany. A wszystko obsłużone przez joby.

4. paczki XMLowe w postaci plików to wygoda w razie problemów z importem danych. Gdy któraś "paczka" ugrzęzła i "nie przeszła", można XMLa przeedytować nawet notatnikiem. Nie trzeba łączyć się do DB i w niej dłubać.

5. podejście to ma dodatkowo tę zaletę, że całą integracja jest w SQLu. Nie trzeba nosić ze sobą kompilatora na pendrajwie, żeby coś poprawić, wystarczy jakieś lekkie "portable" narzędzie do grzebania w DB, by zmienić kod SQL, a nawet notatnik i konsola silnika. Sprawdziło mi się mnóstwo razy. Miało być prowizorką, zanim nie powstanie serwis Windows, który będzie to rzeźbił, a... zostało i służy już lata :)

6. jeśli jednak piszemy zewnętrzny serwis/adapter, to wygenerowanie parsera do XMLa na podstawie XSDka w takiej Javie czy .NET jest automatyczne (czasem tylko trzeba trochę pokombinować, nic nowego) - dostajemy klasy parsujące. I co się okazało - dzięki użyciu medium pośredniego zmienił się jedynie sposób jego przetwarzania (SQL->C#/Java/C++), ale na zewnątrz nadal mamy ten sam interfejs - katalog wymiany i pliki XML.

7. XML + XSD to wstępna walidacja danych. SQLowy insert - jedynie sypnie wyjątkiem.

8. Dodanie nowego atrybutu w XML, wpływającego na proces wymiany danych (metadane) to dodanie ledwie kilku linijek w kodzie i to zarówno C# jak i PL/SQL. Możemy sterować procesem wprost z XMLa. Czasem to bardzo przydatne na etapie wdrożeń, gdzie można np. coś wyłączyć/przełączyć zmianą wartości atrybutu.
Jarosław Żeliński

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

Temat: UML a ERD

Damian Kamiński:
Tak z ciekawości, jaka jest "wartość dodana" umawiania się na XML'a od umawiania się na Tabelkę ?

Taka, że:
- nie muszę tworzyć zapytać SQL do cudzej bazy, czytanie XMLa zaś załatwia byle biblioteka standardowa
- trudno jest czytać "cudzą tabelkę" zdalnie przez sieć (w szczególności po internecie) a wymiana plików XML (a konkretnie webserwis) lub REST jest mało kosztowna dla zasobów i uniwerslana
- jako udostępniający dane udostępniam interfejs i system zdalny (cudzy, który korzysta z moich danych) nie wymaga modyfikacji za każdym razem gdy jak coś zmieniam w swojej bazie bo moja odpowiedzialność to gwarantowanie kompatybilności interfejsu a nie struktur danych
- mogę tak długo...

Nakład zabiegów i obustronnych dostosowań jest IMHO identyczny.

nie, patrz jak wyżej....

Nawet jak mam webservice który sie przedstawia i mówi co potrafi wystawić, to z drugiej strony muszę wyklikać "adapter" który weźmie to co mi potrzebne i przetworzy zgodnie z moimi potrzebami lub poda dalej w określone miejce.

jak wyżej: chodzi o hermetyzację bo ta pozwala uniezależnić się od cudzej implementacji.
Analogicznie można się umówić na tabelę z 20 polami gdzie każdy z systemów bierze sobie z niej taki podzbiór jakiego potrzebuje.

znowu jak wyżej, poza tym system obiektowy jest nieczuły na "odległość", więc jedno API rozwiązuje problem odwołań zdalnych i lokalnych.

Zmieniając pole wystawiane WS / XML konsekwencje mam identyczne jak w przypadku wywalenia pola z tabeli która była używana do wymiany.

w przypadku API nie muszę znać cudzych struktur danych i używać SQL'a do integracji, używam standardowych odwołań, w których parametrem jest obiekt, po trzecie, jedna strona może nawet wymieć system na zupełnie inny i jeżeli tylko zachowa API reszta świata się nawet o tym nie dowie, czytaj: nie musi nić robić a integracja nadal działa.
Przynajmniej tak to widzę, popraw mnie jeśli się mylę.

poprawiłem :), po protu operując interfejsem nie muszę znać żadnych szczegółów cudzej implementacji, dostając dostęp do danych muszę je dobrze znać i rozumieć, muszę w szczególności pilnować się by tej cudzej bazy nie zepsuć (dużo ryzykuje każdy udostępnia mi swoją bazę z prawem pisania)
uzupełniając : Co do przykładu ze zmianą faktury, przyjmijmy ze firma przechodzi rebranding, ewentualnie zmienia się filozofia rozliczeń, z określonym dniem, ale ciągle chcę zachować możliwość wstecznego generowania faktur z okresu np przed kilku lat gdzie posługiwałem się inną marką, jednostką filozofią. W takiej sytuacji nakład cyrków które trzeba wykonać analogiczny niezależnie od podejścia :)

która ustawa pozwala zmieniać dokumenty wstecz? w jaki sposób mogę zmienić dziś fakturę wystawioną rok temu (a nawet wczoraj) skoro została zaksięgowana i zarchiwizowana u kontrahenta, być może była przeglądana podczas kontroli skarbowej... jakiś dziwny przykład,

ja zapytam: jaką mam gwarancję, że faktura - będąca raportem z bazy a nie twardym niemodyfikowalnym zapisem - wydrukowana po roku (lub czterech) będzie identyczna z tą wydrukowaną kiedyś jeśli w miedzy czasie system był modyfikowany np[. z powodu pojawiających się nowych przepisów? Zaznaczam, że zgodnie z prawem musi być identyczna (prawo wymaga możliwości wydrukowania duplikatu faktury i nie ma parwa się on różnic od oryginału).
Maciej Lasek

Maciej Lasek Programowanie Bazy
Oracle

Temat: UML a ERD

Jarek Żeliński:
Damian Kamiński:
Tak z ciekawości, jaka jest "wartość dodana" umawiania się na XML'a od umawiania się na Tabelkę ?

Taka, że:
- nie muszę tworzyć zapytać SQL do cudzej bazy, czytanie XMLa zaś załatwia byle biblioteka standardowa
- trudno jest czytać "cudzą tabelkę" zdalnie przez sieć (w szczególności po internecie) a wymiana plików XML (a konkretnie webserwis) lub REST jest mało kosztowna dla zasobów i uniwerslana
- jako udostępniający dane udostępniam interfejs i system zdalny (cudzy, który korzysta z moich danych) nie wymaga modyfikacji za każdym razem gdy jak coś zmieniam w swojej bazie bo moja odpowiedzialność to gwarantowanie kompatybilności interfejsu a nie struktur danych
- mogę tak długo...

Umawiając się na "Tabelkę" czy XML - chodzi o formę reprezentacji dane o określonej strukturze uzyskanej z reguły biznesowej.

Umawiając się na tabelkę/widok nie musimy umawiać się na samodzielne budowanie reguły biznesowej.

Uodpornienie się na modyfikację tabeli jest zastosowanie widoku na tabele, udostępniamy dane, jakie są uzgodnione z odbiorcą, czyli zapewniamy kompatybilność.

SQL służy do pozyskania informacji ze struktur danych, XML zapisuje/opisuje informacje w postaci struktury danych.

Powiem tak: nie znęcajmy się nad SQL - bo może za Interface kryje się SQL.
Jarosław Żeliński

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

Temat: UML a ERD

Umawiając się na "Tabelkę" czy XML - chodzi o formę reprezentacji dane o określonej strukturze uzyskanej z reguły biznesowej.

nie, mając API wysyłam zapytanie o konkretny obiekt i go dostaję, mając wystawiona tabelkę lub widok muszę sam pisać zapytanie SQL...
Umawiając się na tabelkę/widok nie musimy umawiać się na samodzielne budowanie reguły biznesowej.

to właściciel danych zna reguły nimi rządzące, pytający oczekuje konkretnego obiektu biznesowego (faktura, zamówienie, dane kontrahenta, ...)
Uodpornienie się na modyfikację tabeli jest zastosowanie widoku na tabele, udostępniamy dane, jakie są uzgodnione z odbiorcą, czyli zapewniamy kompatybilność.

nadal muszę operować zapytaniami SQL
SQL służy do pozyskania informacji ze struktur danych, XML zapisuje/opisuje informacje w postaci struktury danych.

jako użytkownik danych potrzebuję konkretnych danych a nie możliwości wykonania sobie samemu raportu, po drugie wynik raportu to dane dynamiczne a ja potrzebuję danych "trwałych" statycznych (z uwagi na ryzyko pobierania danych historycznych)
Powiem tak: nie znęcajmy się nad SQL - bo może za Interface kryje się SQL.

owszem, mam cały czas na myśli to, że SQL to "coś specyficznego dla baz relacyjnych" a operując np. XMLem nie muszę wiedzieć jak te dane są składowane i nie muszę umieć ich pozyskiwać "raportami" (nie raz bardzo złożonymi), pamiętajmy, że każdy motor baz danych ma swoja specyfikę (także na poziomie języka zapytań) a ja budując interfejs do zdalnego systemu nie chce się uzależniać od cudzej implementacji, chcę wiedzieć, że jak zapytam o te same dane to odpowiedź nie powinna zależeć od tego kto odpowiada.

Na koniec: XML'a dostane lokalnie przez sieć internet, jak mam "realizować zapytania SQL" zdalnie po sieci?Jarek Żeliński edytował(a) ten post dnia 12.09.11 o godzinie 16:10

konto usunięte

Temat: UML a ERD

Umawiając się na "Tabelkę" czy XML - chodzi o formę reprezentacji dane o określonej strukturze uzyskanej z reguły biznesowej.
Umawiając się na tabelkę/widok nie musimy umawiać się na samodzielne budowanie reguły biznesowej.

Systemy informatyczne powinny być 'binarnym' odzwierciedleniem rzeczywistości.
Czy kiedykolwiek spotkałeś się z sytuacją, kiedy pracownik jednej firmy (systemu) pojawiał się w biurze innej i sam sobie wybierał dokumenty jakich potrzebuje.
Uodpornienie się na modyfikację tabeli jest zastosowanie widoku na tabele, udostępniamy dane, jakie są uzgodnione z odbiorcą, czyli zapewniamy kompatybilność.

I co z tego skoro cała operacja traci bezpośrednie odniesienie do rzeczywistości ? Systemy komputerowe maja symulować a nie 'tworzyć od nowa'.
SQL służy do pozyskania informacji ze struktur danych, XML zapisuje/opisuje informacje w postaci struktury danych.
Powiem tak: nie znęcajmy się nad SQL - bo może za Interface kryje się SQL.

Ale nikt się nie znęca ... no może niektórzy chcą wykorzystywać w celach innych niż te do których został stworzony
Damian Kamiński

Damian Kamiński Zamieniam informacje
w wiedzę ...

Temat: UML a ERD

Ech, do samej dyskusji to się ustosunkuje jak wrócę jutro z wyjazdu, niemniej jednak już teraz tak patrząc na tą poprawnie polityczną dyskusję o tym jak powinno być ( zawsze jak myślę o poprawności politycznej to mam Anglię i Francję przed oczyma ), jestem strasznie ciekawy, co by powiedział ortodox poprawności bazodanowej na temat zabiegu by kasowane dane z bazy zachowywać (nie kasować fizycznie) a tylko ID mnożyć im przez -1 :) (tak zamiast kolumny DELETED (Y/N))

Jest to co najmniej tak wielki gwałt na DB ideałach :) jak stosowanie tabeli jako interfejsu, jest gwałtem na OOP ideałach :)

ps. Ciągle w rozmowie umyka mi jedna rzecz, w kontekście tego API i pytania o obiekt ... bo to pięknie brzmi, pytam o obiekt (tak jak by to nie wymagało linijek kodu), dostaje, niezależnie , nie znając implementacji etc, jak podmienią system który odpytuję, to też będzie działać (oczywiście jeśli w nim zaimplementują to samo api :), ale co się stanie gdy władca największego z systemów, czy jakiś inny IT dyktator uzna że on jednak będzie wystawiał inne obiekty niż te dotychczasowe ? i np data nie będzie już polem obiektu które jest pogańskim 6 znakowym stringiem, s od teraz będzie to jakimś ładnym DATETIME i to jeszcze z godziną (choć wcześniej jej nie było) czy innym typem nie znakowym :) a pole miasto to będzie typ warunkowy, gdzie jeśli jest w bazach gusu to indeks z bazy a jak nie to jawny string.

I co ? i wtedy też jest ładnie pięknie i nic nie trzeba zmieniać po stronie odbiorcy bo jest XML'em ? Moim zdaniem nie do końca ? bo to tak naprawdę jest już inne api , którego nasz system jeszcze nie obsługuje i trzeba to do niego dopisać.



Wyślij zaproszenie do