Temat: Projekt bazy
Jakub B.:
Jakub L.:
Tylko problem jest taki, że na uczelni to baza ma być znormalizowana żeby dostać piątkę, a na produkcji to ma nie wysypywać się i działać pod bliżej nieokreślonym obciążeniem.
na produkcji zwykle wysypuje sie wlasnie z powodu braku sensowanej organizacji danych. pracowalem przez pol roku przy rozbudowanym systemem finansowym bezposrednio przy jego bazach i z doswiadczenia wiem jak "dziala" w praktyce aplikacja, ktorej baza
nie jest sensownie znormalizowana. Nieznormalizowana baza
No to coś takiego: w Polsce jest blisko 100 000 miejscowości.
Mamy hurtownię, w której są adresy, zamieszkania, zameldowania, pracy pierwszej, drugiej, trzeciej i tak dalej.
I teraz pytanie - czy zrobić słownik miejscowości i referować do niego, czy po prostu walnąć varchar(ileś) z nazwą miejscowości?
I jak wybierzesz normalizację - jak załatwisz wybór ze słownika? Lista 100k miejscowości to nie w kij dmuchał :).
Normalizacja do pewnego momentu pomaga, potem tylko zaciemnia obraz.
Jeżeli denormalizujemy, powinniśmy dokładnie znać zależności pomiędzy danymi.
Dodatkowo - widziałem w strukturze takiej jednej bazy, jak życie wymusiło normalizację do koniecznego poziomu, ale ani kroku dalej, bo nie było potrzebne.
nalezy sie wystrzegac traktowania db jako "worka na rekordy".
Bo? Worek na rekordy to fajna rzecz.
pewnie, do ksiegi gosci na przyklad.
generalnie, nie da sie napisac aplikacji w 100% bezblednej, zawsze zawinie sie kilka procedur, ktore beda co jakis czas wrzucac tu i > owdzie bzdury. i dlatego lepiej zabezpieczyc sie juz na poziomie
Generalnie to takie procedury mają za zadanie wyłapać testy.
bazy danych, aby - nie tylko niespojnosci nie rozpropagowaly sie po reszcie bazy - ale takze, aby wewnetrzne mechanizmy
Możliwość rozpropagowania się takiej niespójności to błąd projektanta bazy. Rezygnacja z normalizacji takim błędem jeszcze nie jest.
(constraint'sy, triggery) wylapaly wadliwy mechanizm zawczasu.
Constrainty, tak samo jak triggery.
Optymalizacja takiego DB2 czy Oracla do wydajnej pracy z rozbudowanymi JOINami spokojnie pozwala pracowac systemom opartym
o porzadnie znormalizowane schematy baz. Cache'owanie wynikow na poziomie podzapytan, kompilacja fragmentow SQLa do kodu maszynowego, "prepared statements", "batch queries"...
Masz do wyboru - zrobić akademicką bazę a potem tuningować silnik, albo olać część teorii, w której dokładnie wiesz co robisz, i mieć podobne efekty wydajnościowe.
Wybierz, co robisz jak termin goni :>.
Wydumane. Często coś takiego się zdarza?
Wydumane - ha! wlasnie o to chodzi aby za wczasu wydumac wszystkie mozliwe konflikty i problemy, aby o 5:00 w nocy nie okazalo sie ze system kwiczy z powodu jakiejs wydumanej pierdolki, bo jakis amerykanin zjadlszy sniadanie kliknal cos bez sensu i wykrzaczyl aplikacje. Zrywaj teraz developera z lozka, bo od 8:00 wszystko musi znowu dzialac :)
Od tego są testy. Nie wiem jak w @vantage, ale w moim dziale testerów było prawie tyle samo co developerów, a potem jeszcze były ze trzy stopnie testów.
Jeżeli firma puszcza do klienta niedotestowany soft, to jest krzaczasta i tyle.
A rano w Ameryce to chyba u nas tak pod wieczór jest.
Ten przyklad oczywiscie jest na kolanie sklecony. Faktury czy paragony z pozycjami na 0zł to typowy efekt wyprodukowany przez zle przemyslany system. Pozycje bedace NULLami materializuja sie w 0zl na frontendzie i - poniewaz na poziomie aplikacji nikt nie wpadl na taki usecase - ida do wydruku. Jakis czas temu byl w gazecie opis, jak to jakis urzad scigal czlowieka o zaplate 0zl.
A masz 100% pewności, że te pozycje to efekt braku normalizacji a nie jakiegoś błędu popełnionego w zupełnie czymś innym?
dobre rozdzielenie zaleznosci pomiedzy danymi pozwala ograniczyc liczbe takich nieprzewidzianych wpadek.
Ale nie jest Świętym Graalem ani silver bullet, obawiam się.
Naprawde nie rozumiem tego oporu przed zadaniem sobie minimalnego
trudu przemyslenia organizacji danych - nikt nie wymaga standardow
na poziomie 5NF, wystarczy 3NF, a nawet samo slownikowanie.
Nadinterpretujesz, nigdzie nie pisałem, żeby olać normalizację i robić jak leci, tylko aby w niektórych przypadkach rozważyć jednak denormalizację.
3NF w niektórych miejscach może być przegięciem.
Ja nie twierdze ze normalizacja do Swiety Graal, uwazam ze musi byc zachowana forma przemyslanej organizacji danych, a flat-file
Forma przemyślanej organizacji danych nie oznacza automatycznie 3NF.