Citat:
bokinet:
Mozda isto dodati polje 'status zapisa' u tabeli/bazi i na osnovu toga vrsiti odredjenu operaciju nad istim zapisom prilikom generisanja upita/izvestaja ali i obracuna.
Na primer ako je status 4 - onda zapis uzeti u zbirni obracun ali ga ne prikazivati il' kako vec se odradi uslovni nacin obrade - po potrebi.
Vise razlicitih situacija vise uslova i grananja za nacin kako se koji odredjeni zapis obradjuje a mozda cak i odredjeno polje u okviru zapisa procesira.
Kada bolje razmislim, ovo polje 'status_zapisa' (u stvari tip zapisa) samo "maskira" činjenicu
da ta jedna tabela suštinski u sebi "skriva" nekoliko tabela.
U ovom dizajnu, ne samo da su različiti zapisi mogu imati različitu semantiku (značenje),
već sa sobom na dalje vuku i različito ponašanje.
Čak i kada su strukture različitih tipova slične (pa i iste) i "pašu" tako da se mogu ugurati u jednu tabelu,
to ne znači da to treba stvatno i raditi - obično je razbijanje na više tabela u debeloj prednosti.
Upravo ovakve stvari kao što je ovakva "tip" kolona u DB ili programska struktura sa poljem "tip"
su izazivači where-ovanja, if-ovanja, else-vanja, case-ovanja i ostalog grananja u SQL-u i programu
a to usložnjava rešenje i simptom je lošeg dizajna.
To se lepo rešava tako što u DB uvedu posebne tabele a u programu posebni tipovi (strukture/klase).
http://wiki.c2.com/?FearOfAddingTables
A kada ocenjuješ složenost rešenja...
- U Sql-u više gledaj kako izgledaju upiti a manje kako izgleda DB dijagram :)
- U programu više gledaj kako izgleda kod a manje kako izgleda dijagram klasa :)
[Ovu poruku je menjao dusans dana 31.05.2019. u 10:37 GMT+1]