Kamil Stawiarski

Kamil Stawiarski Oracle Certified
Master | Oracle ACE

Temat: Diagram E/R w UML?

Jarek Żeliński:
Kamil Stawiarski:
Ja natomiast mówię, że skoro jest już baza relacyjna to traktowanie jej tylko i wyłącznie jako płaski kontener na dane będzie w wielu przypadkach prowadziło do zakleszczeń i problemów wydajnościowych.

nie znam tych przypadków ;)

A ja żyję m.in. z ich naprawiania :)
Jarosław Żeliński

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

Temat: Diagram E/R w UML?

Kamil Stawiarski:
Jarek Żeliński:
Kamil Stawiarski:
Ja natomiast mówię, że skoro jest już baza relacyjna to traktowanie jej tylko i wyłącznie jako płaski kontener na dane będzie w wielu przypadkach prowadziło do zakleszczeń i problemów wydajnościowych.

nie znam tych przypadków ;)

A ja żyję m.in. z ich naprawiania :)

na czym polega zakleszczenie płaskiej tablicy?

Podobno płaska (indeksowana) tablica, nie wymagająca żadnych dodatkowych operacji łączenia itp. jest najwydajniejszym sposobem składowania czyż nie?

(zapytam znowu: dlaczego systemy BI pracują na prostych tablicach a nie nie relacyjnym modelu danych?)

i pytanie podchwytliwe: na czym polega wyższość modelu relacyjnego nad płaską redundantną tablicą?

P.S.
Ja też żyję z naprawiania :)Jarek Żeliński edytował(a) ten post dnia 04.11.11 o godzinie 10:20
Krzysztof Bokiej

Krzysztof Bokiej Software Engineer

Temat: Diagram E/R w UML?

Jarek Żeliński:
na czym polega zakleszczenie płaskiej tablicy?

Tutaj problem polega na tym (przynajmniej tak rozumiem KS), że jest wiele systemów, w których projektanci decydują się wykorzystać bazę danych jako warstwę przechowywania danych, ale nie wykorzystują gotowych narzędzi kontroli spójności jakie ta baza im daje. Tylko przerzucają kontrolę spójności na aplikację - z różnym skutkiem. Inna kwestia, to to, że często oprogramowanie spójności w aplikacji to wymyślanie koła na nowo.

I w tym kontekście takie tablice bazy danych, z której korzysta taka aplikacja to po prostu pliki z danymi - w tym sensie płaskie.
Podobno płaska (indeksowana) tablica, nie wymagająca żadnych dodatkowych operacji łączenia itp. jest najwydajniejszym sposobem składowania czyż nie?

Nie powiedziałbym składowania, ale odpytywania. Bo składowanie to też zapis. A po to się normalizuje, żeby ten zapis był szybszy. Z dużą ilością indeksów przy zapisie też jest problem, bo po każdym zapisie indeks musi zostać przebudowany. Więc zdemoralizowana struktura dla aplikacji o wielu akcjach zapisu się nie sprawdzi.

Zatem (jak to z reguły bywa) poprawna odpowiedź brzmi "To wszystko zależy...".
(zapytam znowu: dlaczego systemy BI pracują na prostych tablicach a nie nie relacyjnym modelu danych?)

To dotyka właśnie funkcjonalnej różnicy OLTP i OLAP. Bo OLTP musi błyskawicznie zapisywać, zetem preferuje normalizacje. Co przy odpytywaniu skutkuje długim czasem wykonania zapytań, zakleszczeniami itp.

A cały idea BI/DW polega na tym, aby w czasie niskiego obciążenia systemów operacyjnych (na przykład w nocy) dane pobrać i przygotować do formy select-only. Nie trzeba wtedy martwić się o koszty złączeń, używania indeksów itp., bo czasu na ładowanie z reguły jest sporo. Dla OLAP mamy dane "na wczoraj", ale bazę można błyskawicznie odpytywać, a dane poddawać dowolnym analizom bez obawy, że położymy system.
i pytanie podchwytliwe: na czym polega wyższość modelu relacyjnego nad płaską redundantną tablicą?

Zdecydowanie szybszy odczyt. Inna kwestia, że OLAP to też relacje fakt-wymiar. Więc w gruncie rzeczy hurtownie danych to z reguły też bazy relacyjne, ale inaczej zaprojektowane - gwoli ścisłości ;-)

konto usunięte

Temat: Diagram E/R w UML?

'Model danych' [...], xml itd...
Znaczy się NIE JEST JEDYNA rozumiem, że to chochlik

tak :)
Stąd moja prośba - niech analityk nie wchodzi w kompetencje architekta i nie narzuca pewnych technicznych rozwiązań.
No i wreszcie powiedziałeś coś mądrego!!!!! BRAWO!!! Analityk wymagań ma Ci opisać jak z punktu widzenia klienta widziane będą klasy, obiekty. To nawet nie musi mieć nic wspólnego z obiektami w implementacji, bo na potrzeby np optymalizacji działania ORM można to zamodelować inaczej - pod warunkiem zachowania izomorficzności i homomorficzności czyli działania w sposób opisany w analizie w aspektach istotnych dla projektu:)

otóż to :)
Kamil Stawiarski

Kamil Stawiarski Oracle Certified
Master | Oracle ACE

Temat: Diagram E/R w UML?

Krzysztof Bokiej:
Jarek Żeliński:
na czym polega zakleszczenie płaskiej tablicy?

Tutaj problem polega na tym (przynajmniej tak rozumiem KS), że jest wiele systemów, w których projektanci decydują się wykorzystać bazę danych jako warstwę przechowywania danych, ale nie wykorzystują gotowych narzędzi kontroli spójności jakie ta baza im daje. Tylko przerzucają kontrolę spójności na aplikację - z różnym skutkiem. Inna kwestia, to to, że często oprogramowanie spójności w aplikacji to wymyślanie koła na nowo.

I w tym kontekście takie tablice bazy danych, z której korzysta taka aplikacja to po prostu pliki z danymi - w tym sensie płaskie.
Podobno płaska (indeksowana) tablica, nie wymagająca żadnych dodatkowych operacji łączenia itp. jest najwydajniejszym sposobem składowania czyż nie?

Nie powiedziałbym składowania, ale odpytywania. Bo składowanie to też zapis. A po to się normalizuje, żeby ten zapis był szybszy. Z dużą ilością indeksów przy zapisie też jest problem, bo po każdym zapisie indeks musi zostać przebudowany. Więc zdemoralizowana struktura dla aplikacji o wielu akcjach zapisu się nie sprawdzi.

Zatem (jak to z reguły bywa) poprawna odpowiedź brzmi "To wszystko zależy...".
(zapytam znowu: dlaczego systemy BI pracują na prostych tablicach a nie nie relacyjnym modelu danych?)

To dotyka właśnie funkcjonalnej różnicy OLTP i OLAP. Bo OLTP musi błyskawicznie zapisywać, zetem preferuje normalizacje. Co przy odpytywaniu skutkuje długim czasem wykonania zapytań, zakleszczeniami itp.

A cały idea BI/DW polega na tym, aby w czasie niskiego obciążenia systemów operacyjnych (na przykład w nocy) dane pobrać i przygotować do formy select-only. Nie trzeba wtedy martwić się o koszty złączeń, używania indeksów itp., bo czasu na ładowanie z reguły jest sporo. Dla OLAP mamy dane "na wczoraj", ale bazę można błyskawicznie odpytywać, a dane poddawać dowolnym analizom bez obawy, że położymy system.
i pytanie podchwytliwe: na czym polega wyższość modelu relacyjnego nad płaską redundantną tablicą?

Zdecydowanie szybszy odczyt. Inna kwestia, że OLAP to też relacje fakt-wymiar. Więc w gruncie rzeczy hurtownie danych to z reguły też bazy relacyjne, ale inaczej zaprojektowane - gwoli ścisłości ;-)


Lepiej bym tego nie ujął :)
Roman Wilk

Roman Wilk Tak właściwie, to
gram dużo w squash'a
:), ale to wciąż
z...

Temat: Diagram E/R w UML?

Krzysztof Bokiej:
Tylko przerzucają kontrolę spójności na aplikację - z różnym skutkiem. Inna kwestia, to to, że często oprogramowanie spójności w aplikacji to wymyślanie koła na nowo.

Ci którzy projektują Aplikację, kontrolującą spójność danych na poziomie Aplikacji chyba są jacyś głupi, czy co ? Przecież mają kaskadowe mechanizmy delete, update i wiele innych dobrodziejstw bazy dancyh. Tylko, że po prostu w dużej mierze nie da się zapewnić 100 % spójności struktury danych poprzez baze, to się da zrobić na poziomie dość prostych relacji. Spróbuj operzeć księgowanie np. różnic kursowych, albo amortyzacji śrdoków trwałych na mechanizmach operowanych przez bazę (czyli np. WN=MA). Wynikną zaokrąglenia, które muszą być analizowane przez Aplikację :)
Jarosław Żeliński

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

Temat: Diagram E/R w UML?

Krzysztof Bokiej:
Podobno płaska (indeksowana) tablica, nie wymagająca żadnych dodatkowych operacji łączenia itp. jest najwydajniejszym sposobem składowania czyż nie?

Nie powiedziałbym składowania, ale odpytywania. Bo składowanie to też zapis. A po to się normalizuje, żeby ten zapis był szybszy.

chyba nie rozumiem: od kiedy proste zapisanie jednego prostego wiersza (nawet długiego) jest szybsze od procesu rozebrania go na wiele różnych wierszy, kontroli spójności i zapisu w kilku tabelach jest szybsze?
Z dużą ilością indeksów przy zapisie też jest problem, bo po każdym zapisie indeks musi zostać przebudowany.

nie musi, to kwestia zaprojektowania tego procesu
Więc zdemoralizowana struktura dla aplikacji o wielu akcjach zapisu się nie sprawdzi.

dziwne, bo w wielu aplikacjach jest z powodzeniem stosowana, nawet nowych systemach ERP "znanych producentów"...
Zatem (jak to z reguły bywa) poprawna odpowiedź brzmi "To wszystko zależy...".

ano jak wyżej
(zapytam znowu: dlaczego systemy BI pracują na prostych tablicach a nie nie relacyjnym modelu danych?)

To dotyka właśnie funkcjonalnej różnicy OLTP i OLAP. Bo OLTP musi błyskawicznie zapisywać, zetem preferuje normalizacje. Co przy odpytywaniu skutkuje długim czasem wykonania zapytań, zakleszczeniami itp.

wróćmy kilka akapitów wyżej...
i pytanie podchwytliwe: na czym polega wyższość modelu relacyjnego nad płaską redundantną tablicą?

Zdecydowanie szybszy odczyt.

zapytam: odczyt faktury z bazy relacyjnej jest szybszy niż z płaskiej tablicy?
Inna kwestia, że OLAP to też relacje fakt-wymiar. Więc w gruncie rzeczy hurtownie danych to z reguły też bazy relacyjne, ale inaczej zaprojektowane - gwoli ścisłości ;-)

mówmy o modelu relacyjnym (jakieś normalizacje) i prostej tablicy faktów w postaci gwiazdy... będzie łatwiej :)

zastanawiam się tylko nad jednym: jak obronić tezę, że np. model relacyjny jest "zawsze lepszy przy zapisie" itp. na tle praktyki pokazującej coraz częściej spotykaną rezygnacje z relacyjnych systemów na rzecz nierelacyjnych kończące się powodzeniem projektu (jego wyższością nad wersją z danymi w modelu nierelacyjnym).
Krzysztof Bokiej

Krzysztof Bokiej Software Engineer

Temat: Diagram E/R w UML?

ROMAN WILK:
Ci którzy projektują Aplikację, kontrolującą spójność danych na poziomie Aplikacji chyba są jacyś głupi, czy co ?

Nie są. (!?)
Przecież mają kaskadowe mechanizmy delete, update i wiele innych dobrodziejstw bazy dancyh. Tylko, że po prostu w dużej mierze nie da się zapewnić 100 % spójności struktury danych poprzez baze, to się da zrobić na poziomie dość prostych relacji.

Zdziwiłbyś jak wiele systemów nie potrafi utrzymać "dość prostych relacji" ;-)
Spróbuj operzeć księgowanie np. różnic kursowych, albo amortyzacji śrdoków trwałych na mechanizmach operowanych przez bazę (czyli np. WN=MA). Wynikną zaokrąglenia, które muszą być analizowane przez Aplikację :)

Jak się nie da, to się nie da. Nie mówią o utrzymywaniu 100% spójności na bazie. Ale jak się da, to po co na nowo to wymyślać?
Krzysztof Bokiej

Krzysztof Bokiej Software Engineer

Temat: Diagram E/R w UML?

Jarek Żeliński:
chyba nie rozumiem: od kiedy proste zapisanie jednego prostego wiersza (nawet długiego) jest szybsze od procesu rozebrania go na wiele różnych wierszy, kontroli spójności i zapisu w kilku tabelach jest szybsze?

Jest szybsze.

Wszystko zależy ile masz pól do zapisania, ile słowników, ile indeksów i ile operacji zapisu w danej jednostce czasu. I zawsze szybciej zapisuje się do bazy znormalizowanej, bo tam nie ma redundancji i w poprawnej implementacji posługujesz kluczami typu liczbowego. Być może w niektórych implementacjach różnice nie są na tyle istotne, żeby upierać się przy normalizacji.

Polecam ściągnąć sobie jakąś bazę i potestować ;-)
Z dużą ilością indeksów przy zapisie też jest problem, bo po każdym zapisie indeks musi zostać przebudowany.

nie musi, to kwestia zaprojektowania tego procesu

Obawiam się, że musi. Załóżmy, że Twoja transakcją jest tu wprowadzenie danych dotyczących faktury. Masz indeksy na wielu atrybutach tej faktury (zakładam, że są Ci potrzebne). Więc nawet jak przed transakcję wszystkie indeksy zrobisz nieaktywne, to po wszystkim musisz jest zrobić aktywne - a to powoduje ich przeliczenie. Do tego ładowanie tysięcy razy tych samych kodów tekstowych, nazw miast, ulic itp.

jak masz tysiące takich operacji dziennie, to koszt jest poważny.
Więc zdemoralizowana struktura dla aplikacji o wielu akcjach zapisu się nie sprawdzi.

dziwne, bo w wielu aplikacjach jest z powodzeniem stosowana, nawet nowych systemach ERP "znanych producentów"...

Między 3NF i star jest sporo form pośrednich. Nie wierzę, że rzeczony ERP ładuje od razu do gwiazdy... Albo jednej wielkiej tabeli.
zastanawiam się tylko nad jednym: jak obronić tezę, że np. model relacyjny jest "zawsze lepszy przy zapisie" itp. na tle praktyki pokazującej coraz częściej spotykaną rezygnacje z relacyjnych systemów na rzecz nierelacyjnych kończące się powodzeniem projektu (jego wyższością nad wersją z danymi w modelu nierelacyjnym).

Tak jak wyżej. Nie widziałem nigdy systemu operacyjnego, który ładuje do gwiazdy i utrzymuje mnóstwo indeksów i do tego pozwoliłby analitykom na żywca go odpytywać bez konsekwencji.

Inne kwestia, że w dzisiejszych czasach mamy szybsze dyski i w ogóle lepsze serwery. Więc można sobie pozwolić na odejście od wielu kanonów, bo koszty tego odejścia są pomijalne.Krzysztof Bokiej edytował(a) ten post dnia 04.11.11 o godzinie 13:51
Jarosław Żeliński

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

Temat: Diagram E/R w UML?

Jak się nie da, to się nie da. Nie mówią o utrzymywaniu 100% spójności na bazie. Ale jak się da, to po co na nowo to wymyślać?

bo dobre oprogramowanie pozwala na "zamontowanie" dowolnego motora bazy (np. SQL) a nawet jego zmianę na inny w trakcie eksploatacji np. jak urośnie to z MySQL na Oracle.
Jarosław Żeliński

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

Temat: Diagram E/R w UML?

Krzysztof Bokiej:
Jarek Żeliński:
chyba nie rozumiem: od kiedy proste zapisanie jednego prostego wiersza (nawet długiego) jest szybsze od procesu rozebrania go na wiele różnych wierszy, kontroli spójności i zapisu w kilku tabelach jest szybsze?

Jest szybsze.

Wszystko zależy ile masz pól do zapisania, ile słowników, ile indeksów i ile operacji zapisu w danej jednostce czasu.

nie czytasz, płaski plik nie ma słowników :) i operacja jest jedna
I zawsze szybciej zapisuje się do bazy znormalizowanej, bo tam nie ma redundancji i w poprawnej implementacji posługujesz kluczami typu liczbowego. Być może w niektórych implementacjach różnice nie są na tyle istotne, żeby upierać się przy normalizacji.


znowu nie czytasz: jedna duża linia tabeli w excelu :)

Z dużą ilością indeksów przy zapisie też jest problem, bo po każdym zapisie indeks musi zostać przebudowany.

nie musi, to kwestia zaprojektowania tego procesu

Obawiam się, że musi. Załóżmy, że Twoja transakcją jest tu wprowadzenie danych dotyczących faktury. Masz indeksy na wielu atrybutach tej faktury (zakładam, że są Ci potrzebne). Więc nawet jak przed transakcję wszystkie indeksy zrobisz nieaktywne, to po wszystkim musisz jest zrobić aktywne - a to powoduje ich przeliczenie. Do tego ładowanie tysięcy razy tych samych kodów tekstowych, nazw miast, ulic itp.

nie traktuj wszystko na świecie jak motor SQL, syndrom młotkowego
jak masz tysiące takich operacji dziennie, to koszt jest poważny.

:)
Więc zdemoralizowana struktura dla aplikacji o wielu akcjach zapisu się nie sprawdzi.

dziwne, bo w wielu aplikacjach jest z powodzeniem stosowana, nawet nowych systemach ERP "znanych producentów"...

Między 3NF i star jest sporo form pośrednich. Nie wierzę, że rzeczony ERP ładuje od razu do gwiazdy... Albo jednej wielkiej tabeli.

Są ERP, które korzystają z wzorca active record, nie ma jednego relacyjnego modelu danych dla całego systemu, są proste tablice - jedna dla każdej klasy lub agregatu, nie powiązane ze sobą żadnymi relacjami. Aplikacja wie jak się ma faktura do zamówienia.
Inne kwestia, że w dzisiejszych czasach mamy szybsze dyski i w ogóle lepsze serwery. Więc można sobie pozwolić na odejście od wielu kanonów, bo koszty tego odejścia są pomijalne.

bingo :)
Krzysztof Bokiej

Krzysztof Bokiej Software Engineer

Temat: Diagram E/R w UML?

Jarek Żeliński:
nie czytasz, płaski plik nie ma słowników :) i operacja jest jedna

To polecam takie ćwiczenie ;-) Wbij do jednej tabeli 100 razy taki zestaw atrybutów: numer faktury, miasto, ulica, numer domu, numer mieszkania, kod pocztowy, imię, nazwisko, nazwa, nip, kwota. Załóżmy, ze wszystkie te wiersze wygenerował jeden klient, więc oprócz kwoty i numeru faktury użyj 100 razy tych samych wartości atrybutów. Wszystko jedna tablica. Zanotuj czas wykonania.

Potem wbij do bazy raz kontakt do klienta (tablica nr 1). Raz adres klienta (tablica nr 2) i 100 razy dwa liczbowe id, numer faktury i kwotę (tablica nr 3). Porównaj czasy wykonania.

Podobne ćwiczenie możesz wykonać dla 1000 i 10000 faktur i powiedzmy odpowiednio 100 i 1000 klientów.
znowu nie czytasz: jedna duża linia tabeli w excelu :)

Jak zrobisz ćwiczenie z góry to będziesz wiedział, że jest szybciej.
nie traktuj wszystko na świecie jak motor SQL, syndrom młotkowego

Proponuję teraz ćwiczenie z góry dla plików csv i xml. Wnioski będą te same.
Są ERP, które korzystają z wzorca active record, nie ma jednego relacyjnego modelu danych dla całego systemu, są proste tablice - jedna dla każdej klasy lub agregatu, nie powiązane ze sobą żadnymi relacjami. Aplikacja wie jak się ma faktura do zamówienia.

Skoro aplikacja wie jak się ma faktura do zamówienia to relacje istnieją. Nie mają po prostu formy więzu integralności na bazie SQL.

Swoja drogą ta dyskusja bardzo przypomina mi analogiczną dyskusję dotyczącą constraintów na hurtowni. Jeżeli i tak ETL steruje ładowaniem i zakładamy, że robi to poprawnie, to po co jeszcze więzy na bazie. Niby tak... Ale z praktyki wiem, że więzy na bazie mogą tylko pomóc, a nie zaszkodzić, więc czemu ich nie stosować?

konto usunięte

Temat: Diagram E/R w UML?

Niby tak... Ale z praktyki wiem, że więzy na bazie mogą tylko pomóc, a nie zaszkodzić, więc czemu ich nie stosować?

Bo
1. ich zakładanie pochłania czas
2. są potencjalnym źródłem cyrków przy migracji
3. robią to samo co dobry tester (po co 'mnożyć pracę') z dobrymi scenariuszami testowymi
4. najważniejsze - bo obniżają wydajność systemu

:)
Krzysztof Bokiej

Krzysztof Bokiej Software Engineer

Temat: Diagram E/R w UML?

Jakub Wojt:
Niby tak... Ale z praktyki wiem, że więzy na bazie mogą tylko pomóc, a nie zaszkodzić, więc czemu ich nie stosować?

Bo
1. ich zakładanie pochłania czas

Podejrzewam, że szybciej je pozakładam i udokumentuję, niż ty wymyślisz i spiszesz scenariusze testowe dla Twoich testerów ;-)
2. są potencjalnym źródłem cyrków przy migracji

Jeżeli spójność danych jest problemem przy migracji, to ja już nie wiem co powiedzieć ;-) A jeżeli chodzi Ci o ich przepisanie, to moim zdaniem dramatyzujesz - możesz na podstawie istniejących stworzyć skrypty tłumaczące to na inne dialekty. Niedużym nakładem.

Przy migracji będziesz miał istotniejsze problemy niż constrainty ;-)
3. robią to samo co dobry tester (po co 'mnożyć pracę') z dobrymi scenariuszami testowymi

Tak jak wyżej. Poza tym chcesz mi powiedzieć, że Twoi testerzy sprawdzają wszystkie referencje i zachowania po usuwaniu wierszy? I kaskadowo ustalają, czy wszystko się poprawnie zaktualiwało/usunęło/dodało? To ja wolę napisać linijkę kodu i nie będę tych testerów do tego potrzebował ;-) Będą się mogli zająć sprawami, których DBMS sam nie zrobi.

Po drugie ja bym tutaj odwrócił logikę. To nie zakładanie więzów "mnoży pracę", tylko testerzy ją "mnożą" ;-)
4. najważniejsze - bo obniżają wydajność systemu

Skoro wielu twierdzi, że można sobie pozwolić na zdenormalizowany model danych (z czym się zgadzam), to i na więzy sobie można pozwolić. Więc kula w płot ;-)
Jarosław Żeliński

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

Temat: Diagram E/R w UML?

Krzysztof Bokiej:
To polecam takie ćwiczenie ;-) Wbij do jednej tabeli 100 razy taki zestaw atrybutów: numer faktury, miasto, ulica, numer domu, numer mieszkania, kod pocztowy, imię, nazwisko, nazwa, nip, kwota. Załóżmy, ze wszystkie te wiersze wygenerował jeden klient, więc oprócz kwoty i numeru faktury użyj 100 razy tych samych wartości atrybutów. Wszystko jedna tablica. Zanotuj czas wykonania.

super przykład, realia biznesowe są jednak takie, że faktur ręcznie wystawia się kilka, może kilkadziesiąt dziennie, najwolniejszy system będzie i tak szybszy od człowieka, jak jakaś firma wystawia tysiące faktur to problem tkwi i trak w szybkości druku a nie szybkości komputera...

to tak jak byś mnie przekonywał, że bolid F1 jest lepszy od mojego roweru, tylko że ja jeżdżę po mieście zaś specyfika warunków pozwalających zaistnieć przewadze jaką ma F1 to najwyżej kilkadziesiąt torów na świecie.

Problem u wielu "bazodanowców" widze taki, że zapominają o realiach biznesowych i zamiast dać system wystarczający usiłują dać "najlepszy" w ich mniemaniu.

pozostałem przykłady jak wyżej
Są ERP, które korzystają z wzorca active record, nie ma jednego relacyjnego modelu danych dla całego systemu, są proste tablice - jedna dla każdej klasy lub agregatu, nie powiązane ze sobą żadnymi relacjami. Aplikacja wie jak się ma faktura do zamówienia.

Skoro aplikacja wie jak się ma faktura do zamówienia to relacje istnieją. Nie mają po prostu formy więzu integralności na bazie SQL.

mówimy o logice (relacje) jaka ma papier bo na fakturze jest numer zamówienia... bo to sytuacja w której skojarzę fakturę z zamówieniem bez żadnej bazy SQL coś tam...

Swoja drogą ta dyskusja bardzo przypomina mi analogiczną dyskusję dotyczącą constraintów na hurtowni. Jeżeli i tak ETL steruje ładowaniem i zakładamy, że robi to poprawnie, to po co jeszcze więzy na bazie.

no bo po co
Niby tak... Ale z praktyki wiem, że więzy na bazie mogą tylko pomóc, a nie zaszkodzić, więc czemu ich nie stosować?

szesnaście zamków w drzwiach może tylko pomóc w bezpieczeństwei tylko po co...
Jarosław Żeliński

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

Temat: Diagram E/R w UML?

Skoro wielu twierdzi, że można sobie pozwolić na zdenormalizowany model danych (z czym się zgadzam), to i na więzy sobie można pozwolić. Więc kula w płot ;-)

problem w tym, że denormalizacja poprawia wydajność... a dodatkowe więzy (logika obciążająca procesor) ją pogarszają
Łukasz Kurowski

Łukasz Kurowski Usque Ad Finem

Temat: Diagram E/R w UML?

Jarek Żeliński:
problem w tym, że denormalizacja poprawia wydajność... a dodatkowe więzy (logika obciążająca procesor) ją pogarszają

Procesor? Procesor przy więzach ma akurat mało do roboty. Głównym problemem tu jest I/O, czyli dyski. Oczywiście tylko w przypadkach zapisu/aktualizacji/usuwania. Brak odpowiedniego indeksowania drastycznie pogarsza sprawę.
Jarosław Żeliński

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

Temat: Diagram E/R w UML?

Procesor? Procesor przy więzach ma akurat mało do roboty. Głównym problemem tu jest I/O, czyli dyski. Oczywiście tylko w przypadkach zapisu/aktualizacji/usuwania. Brak odpowiedniego indeksowania drastycznie pogarsza sprawę.

może nie był to faktycznie najlepszy argument :), ja po protu staram się zwrócić uwagę na fakt, że wymagania funkcjonalne i niefukcjolane to odrębne rzeczy, logika biznesowa dotyczy funkcjonalności a wydajność jakości. Tak więc logika tkwi w modelu dziedziny a reszta w implementacji repozytorium.... łączenie bazy danych i logiki biznesowej to łamanie bardzo przydatnej izolacji logiki od systemu utrwalania.

do tego system ma być wystarczająco dobry a nie najlepszy ... dlatego stosowanie baz relacyjnych itp. "bo tak" uważam za szkodliwe tym bardziej, ze ich zalety to tylko pewne specyficzne sytuacje, w szczególności właśnie normalizacja i wszelkie "więzy" to obecnie raczej kula ubogi niż pomoc....Jarek Żeliński edytował(a) ten post dnia 04.11.11 o godzinie 21:11
Jarosław Żeliński

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

Temat: Diagram E/R w UML?

zastanawiam się, dlaczego skrzętnie pomijane są odpowiedzi na pytania jak relacyjny model radzi sobie z:
- podzieleniem systemu na dwie części
- cloud computing czyli system jako niezależne komponenty
- łatwa zmiana modelu dziedziny pracującego systemu
- ...
Krzysztof Bokiej

Krzysztof Bokiej Software Engineer

Temat: Diagram E/R w UML?

Jarek Żeliński:
super przykład, realia biznesowe są jednak takie, że faktur ręcznie wystawia się kilka, może kilkadziesiąt dziennie, najwolniejszy system będzie i tak szybszy od człowieka, jak jakaś firma wystawia tysiące faktur to problem tkwi i trak w szybkości druku a nie szybkości komputera...

to tak jak byś mnie przekonywał, że bolid F1 jest lepszy od mojego roweru, tylko że ja jeżdżę po mieście zaś specyfika warunków pozwalających zaistnieć przewadze jaką ma F1 to najwyżej kilkadziesiąt torów na świecie.

Problem u wielu "bazodanowców" widze taki, że zapominają o realiach biznesowych i zamiast dać system wystarczający usiłują dać "najlepszy" w ich mniemaniu.

pozostałem przykłady jak wyżej

Po pierwsze, przykład był po to, żeby Ci udowodnić, że normalizacja to szybszy zapis. Bo zupełnie bezpodstawnie to kwestionowałeś. Chociaż pewnie i tak nigdy tego nie sprawdzisz w praktyce ;-)

Po drugie mogę Ci wymyślić masę innych przykładów. Na przykład wyobraź sobie, że w bazie Goldenline oprócz treści Twojego postu dopisywane są od razu wszystkie Twoje dane łącznie z tymi z CV... Potem możemy przejść do systemów transakcyjnych banków i domów maklerskich, gdzie do Twojego zlecenia dodawane są dziesiątki niepotrzebnych w momencie transakcji atrybutów i ma miejsce 100% redundancji.

Po trzecie, mi chodzi tylko o to, że jak już decydujesz się na bazę jako repozytorium, to dlaczego nie skorzystać z zestawu narzędzi do kontroli spójności. Tylko zamiast tego pisać własne. Bo jak nie potrzebujesz specjalnych funkcjonalności bazy danych, to po co ją wybrałeś? Więc mnie tak na prawdę nie interesuje czy w Twojej aplikacji zapisujesz do xml, csv czy bazy. O spójność musisz zadbać, a baza daje Ci z pudełka sporo prostych narzędzi.

Po czwarte, fakt, że stosowana jest denormalizacja nie oznacza, że wszystko ładowane jest do jednej ogromnej tabeli - bo to najczęściej jest BEZ SENSU. Czyli cały czas potrzebne jest kontrolowanie referencji i unikalności. A to doskonale potrafi robić każdy relacyjny silnik bazy danych. A nawet jak robisz to na aplikacji to obniża to wydajność, więc nie róbcie z tego zarzutu.
mówimy o logice (relacje) jaka ma papier bo na fakturze jest numer zamówienia... bo to sytuacja w której skojarzę fakturę z zamówieniem bez żadnej bazy SQL coś tam...

Nie rozumiem. Logiczna relacja istnieje w teorii. Twoim obowiązkiem jako projektanta jest zapewnić, żeby istnienie tej relacji nastąpiło też w praktyce. Co z tego, że ja mam jakiś numer zamówienia na fakturze jak się okaże, że fizycznie dla tego numeru nie ma żadnych danych... Bo jakiś tester tego nie przetestował.
Swoja drogą ta dyskusja bardzo przypomina mi analogiczną dyskusję dotyczącą constraintów na hurtowni. Jeżeli i tak ETL steruje ładowaniem i zakładamy, że robi to poprawnie, to po co jeszcze więzy na bazie.

no bo po co

Bo z PRAKTYKI wiem, że jaki by ETL dobry nie był, to się potem może okazać, że są jakieś błędy implementacyjne, albo w źródle są śmieci, itd. I jakbyś kiedyś sprzątał taki system po rozspójnieniu, to następnym razem byś tą jedną linijkę SQLa dołożył dla każdej tabeli... Bo ograniczyłoby Ci to sporo problemów.
szesnaście zamków w drzwiach może tylko pomóc w bezpieczeństwei tylko po co...

Dla mnie constrainty na bazie to od jakiegoś czasu pierwszy zamek. A kolejne piętnaście to zakładają ludzie, którzy chcą testować referencje testerami i wymyślają koło na nowo badając unikalność w aplikacji (z różnym skutkiem), a nie na bazie, skoro wcześniej się na bazę z jakiegoś powodu zdecydowali.
Skoro wielu twierdzi, że można sobie pozwolić na zdenormalizowany model danych (z czym się zgadzam), to i na więzy sobie można pozwolić. Więc kula w płot ;-)

problem w tym, że denormalizacja poprawia wydajność... a dodatkowe więzy (logika obciążająca procesor) ją pogarszają

Denormalizacja obniża wydajność zapisu. Constrainty też obniżają wydajność zapisu. Wiec co to za argument? Poza tym to wszystko by miało sens, jakbyście zrezygnowali w ogóle z kontroli spójności. Bo jeżeli ty badasz unikalność i klucze obce na aplikacji, to chyba też obniżasz wydajność, czy nie? A jeżeli uważasz, że kontrola spójności jest niepotrzebna, to mi w ogóle ręce opadają.

Powtórzę. Jak się zdecydowałeś na repozytorium w postaci bazy danych, to korzystaj z dobrodziejstw tej bazy danych. A nie wymyślaj koło na nowo.

Następna dyskusja:

Diagram E/R




Wyślij zaproszenie do