Autor Téma: Tabuľka s dopredu neznámym počtom stĺpcov  (Přečteno 3149 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2786
  • Karma: 26
    • Verze Delphi: XE7 professional
Tabuľka s dopredu neznámym počtom stĺpcov
« kdy: 09-02-2013, 10:24:22 »
Známy ma prehovoril, aby sme sa pustili do programu pre SVB. Chcem dať užívateľovi možnosť voliť si položky predpisu/platieb. Všetky budú typu "currency". Napadli ma tieto možnosti:
 
1) Tabuľka bude mať napr. 30 stĺpcov. Prvých 20 bude daných napevno a 10 bude voľných pre užívateľa.
Nevýhody: obmedzenie počtu položiek
Výhody: Najjednoduchšie Selecty a generovanie zostavy
 
2) Tabuľka sa bude dynamicky rozširovať o požadovaný stĺpec.
Nevýhody: Čo so zrušeným stĺpcom? Rieši to A + B
Výhody: Pomerne jednoduché Selecty a generovanie zostavy
 
3) Vytvorím dve tabuľky. V jednej budú názvy položiek a v druhej hodnoty pre položky.
Nevýhody: Véééľmi dlhá tabuľka. Zložité dolovanie údajov.
Výhody: Nemení sa štruktúra tabuliek.
 
4) Existuje iné riešenie?
Jedná sa o hlavnú tabuľku aplikácie okolo ktorej sa bude všetko točiť. Bude to tabuľka mesačných predpisov/platieb (a úhrad?).
Samozrejme, že sa nad tabuľkou budú spúšťať rôzne Select-y a generovať zostavy. Takisto treba riešiť zrušenie položky.
V tejto súvislosti je zaujímavé riešiť aj
 
A - každá SVB bude mať vlastnú tabuľku. To beriem ako samozrejmosť. Spločná tabuľka by len prinášala ťažko riešiteľné problémy
 
B - pre každý rok založiť novú tabuľku. Beriem to ako správnu myšlienku.
 
Čo mi odporúčate a hlavné dôvody. Ďakujem.
Idem hľadať v literatúre a na internete. Pre ten by som poprosil kľúčové slová na vyhľadávanie.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1278
  • Karma: 28
    • Pepak.net
Re:Tabuľka s dopredu neznámym počtom stĺpcov
« Odpověď #1 kdy: 09-02-2013, 10:51:15 »
3) Vytvorím dve tabuľky. V jednej budú názvy položiek a v druhej hodnoty pre položky.
Toto je standardní řešení. Pokud nemáš konkrétní důvody proti, tak ho použij.

Citace
Nevýhody: Véééľmi dlhá tabuľka. Zložité dolovanie údajov.
1 je nezajímavé, na to jsou databáze stavěné. 2 může a nemusí být zajímavé, ale dá se řešit.

Citace
Bude to tabuľka mesačných predpisov/platieb (a úhrad?).
Na to snad budeš spíš potřebovat posčítat všechny ceny (eventuelně všechny ceny daného typu), tzn. důvod pro použití řešení 3, než abys to zobrazoval jako jeden široký list. To bude tak akorát pro přehledy uživatele, a na to mu můžeš napsat šikovnou aplikaci, která to jedním dotazem načte (SELECT typ_pole, SUM(platba) FROM platby GROUP BY typ_pole) a aplikačně zobrazí. V aplikaci nebudeš počtem sloupců limitovaný, resp. dokážeš si jich dynamicky vytvořit právě tolik, kolik je zrovna potřeba.

Citace
A - každá SVB bude mať vlastnú tabuľku. To beriem ako samozrejmosť. Spločná tabuľka by len prinášala ťažko riešiteľné problémy
Hmm, které? Nevím, co je to SVB, ale představuju si to jako nějakého člověka, který má svoji sestavu plateb. A pro toto použití je naopak jen smysluplné, mít to všechno v jedné tabulce. Leda že by šlo o natolik citlivé údaje, že každý uživatel bude mít svoje přístupy a budeš chtít za každou cenu zajistit, že ani přímým přístupem do DB a zfromulováním vlastního SQL dotazu se uživatel nedostane k cizím datům.
 
Citace
B - pre každý rok založiť novú tabuľku. Beriem to ako správnu myšlienku.
Dejme tomu, až do okamžiku, kdy si někdo vzpomene, že potřebuje vidět průběh za delší časové období. Co takhle mít ty tabulky dvě, jednu pracovní s daty za poslední rok, která se průběžně maže automaticky triggerem propisuje vkládané/měněné údaje do historické tabulky, kde je komplet všechno? Nebo co třeba použít databázi, která umí partitioning, a nemuset to řešit vůbec?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1761
  • Karma: 77
    • Verze Delphi: D2007, XE3, DX10
Re:Tabuľka s dopredu neznámym počtom stĺpcov
« Odpověď #2 kdy: 09-02-2013, 11:03:25 »
Známy ma prehovoril, aby sme sa pustili do programu pre SVB. Chcem dať užívateľovi možnosť voliť si položky predpisu/platieb. Všetky budú typu "currency". Napadli ma tieto možnosti:
Nevim, jestli rozumim popisu pod bodem 3) nazvy polozek + hodnoty. Jestli se nazvem polozky rozumi nazev platby, takze oddelovat by to melo smysl, jedine kdybys to potreboval lokalizovat - pak by texty s popisy byly ve vazbe 1:n k hodnote.

Ale jinak souhlasim s pepak: z tvych napadu bych nepouzil ani jeden.
Je size otazka, zda  muze jeden clen byt soucasne ve vice SVB, ale pokud ne, tak v zasade bys mel mit entity:
CiselnikSVB
CiselnikClenuSVB
CiselnikPlateb
Platby


jinymi slovy: vsechny SVB a vsechny roky bych daval do jedine tabulky Platby


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2786
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:Tabuľka s dopredu neznámym počtom stĺpcov
« Odpověď #3 kdy: 09-02-2013, 11:42:36 »
SVB = Spoločenstvo Vlastníkov Bytov. Čiže bytový dom ktorý si robí správu sám.
Kvôli jednoduchosti berme do úvahy len základný stav. Jeden človek je členom len v jednom SVB a má len jediný byt. Tie ostatné stavy si budem vedieť ošetriť.
Citace
jinymi slovy: vsechny SVB a vsechny roky bych daval do jedine tabulky Platby
Ale tu budem mať problém v tom, že každé SVB bude požadovať iné stĺpce. Síce pri použití riešenia 3 to je asi jedno.
Bod 3 znamená: Potrebujem doplniť pre SVB stĺpec "Daň z nehnuteľnosti". Vložím nové pole do tabuľky Položky a hodnoty preň budem zapisovať do tabuľky Hodnoty.
Citace
1 je nezajímavé, na to jsou databáze stavěné. 2 může a nemusí být zajímavé, ale dá se řešit.
Skúsim SVB má 100 členov (bytov), 30 položiek a rok 12 mesiacov = 36 000 záznamov pre jedno SVB ročne.
Zoberme optimistické získavanie zákaznikov: 30 SVB a 10 rokov = 10 8000 000. To už je trocha veľa - aspoň pre mňa.
Citace
Na to snad budeš spíš potřebovat posčítat všechny ceny (eventuelně všechny ceny daného typu), tzn. důvod pro použití řešení 3, než abys to zobrazoval jako jeden široký list.
 
V skutočnosti jedno aj druhé. Ale v tom problém nevidím. V praxi nepredpokladám viac než 30 položiek pre jedno SVB. Podľa inšpirácie z iných programov budem tieto údaje s najväčšou pravdepodobnosťou zobrazovať vo formulároch len po mesiacoch a zvisle. A 30 riadkov nie je nič strašné. Nad tlačovými zostavami sa teraz veľmi nezamýšľam.  Doteraz mám - starý už nepoužívaný program:
1 kúrenie, 2 voda v teplej voda, 3 teplo pre teplú vodu, 4 studená voda, 5 televízia, 6 elektrina, 7 výťah užívanie, 8 výťah údržba, 9 smetie, 10 dažďová voda, 11 poistenie domu, 12 deratizácia, 13 nájom nebytových priestorov, 14 pohotovosť,  15 požiarna ochrana, 16 upratovanie, 17 ciachovanie vodomerov, 18 Fond opráv, 19 správa SVB,  20 pôžička
 
Teraz ma napadlo ďalšie riešenie.
Jedna tabuľka pre položky, ktoré sú v každom SVB a druhá tabuľka pre vlastné stĺpce (podľa 3). To by značne zredukovalo počet záznamov.
 
Teraz sa na to pozerám takto: pre člena vytvorím predpis. Ten ho uhradí/neuhradí.
Podľa predpisu asi budem generovať riadky pre každý mesiac. A potom platobnú disciplínu a iné. Teraz riešim len ten zápis mesačných predpisov. Nič iné.
 
« Poslední změna: 09-02-2013, 11:51:26 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1278
  • Karma: 28
    • Pepak.net
Re:Tabuľka s dopredu neznámym počtom stĺpcov
« Odpověď #4 kdy: 09-02-2013, 11:55:28 »
Skúsim SVB má 100 členov (bytov), 30 položiek a rok 12 mesiacov = 36 000 záznamov pre jedno SVB ročne.
Zoberme optimistické získavanie zákaznikov: 30 SVB a 10 rokov = 10 8000 000. To už je trocha veľa - aspoň pre mňa.
Až budeš mít 10 milionů záznamů za minutu, tak začni uvažovat o optimalizaci rozložením do víc tabulek/databází. Do té doby to nemá smysl. Bavíme se tu o databázích, ne o DBase.

Citace
Teraz ma napadlo ďalšie riešenie.
Jedna tabuľka pre položky, ktoré sú v každom SVB a druhá tabuľka pre vlastné stĺpce (podľa 3). To by značne zredukovalo počet záznamov.
Jedna rada do života: V průběhu analýzy a základního programování používej co možná čistý návrh. Až to budeš mít skoro hotové, tak si udělej benchmarky a pokud zjistíš, že v tom je nějaký problém, tak zační uvažovat nad tím, jak bys to zoptimalizoval. Optimalizovat to teď, ve stádiu, kdy ten program ještě vůbec neexistuje, je maximální hovadina - zhruba na úrovni toho, jak jsme na ZX Spectru začínali programovat hry tak, že se nakreslil loadovací obrázek a vymýšlelo, jak zabezpečit BASICový loader před zkoumáním.

Když to teď uděláš čistě, tak i ta optimalizace se ti bude dělat jednoduše a přitom budeš mít zachované všechny výhody dobrého návrhu. Když na to přijde, tak vždycky můžeš tu dobrou strukturu nějakými triggery nebo jednou za občas spouštěnými procedurami převádět do podoby, se kterou se ti bude lépe pracovat. Dokonce to za tebe může udělat sama databáze (materializovaný view).

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 566
  • Karma: 23
Re:Tabuľka s dopredu neznámym počtom stĺpcov
« Odpověď #5 kdy: 09-02-2013, 12:28:28 »
Standardní přístup je mít odlišné tabulky pro odlišný typ dat (něco jako třídy v prg. jazyku), nikoliv různé tabulky pro různé subjekty nebo časová období. Počet sloupců tabulek taky standardně není potřeba měnit - to, že někde chceš zobrazovat x sloupečků lze řešit tak, že v nějaké tabulce budeš mít x řádků s názvem těch atributů.

V praxi existují případy, kdy se pravidla návrhu dají porušit z výkonnostních důvodů, ale to nebude tvůj případ. Uživateli je např. jedno, pokud data uvidí za 0,5 sec nebo za 1,5 sec. Pokud potřebuješ vracet data za pár ms a do db zapisují další thready nová data, tak je dobré to rozházet do různých tabulek. Ale to teď asi řešit nebudete :-).

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2786
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:Tabuľka s dopredu neznámym počtom stĺpcov
« Odpověď #6 kdy: 09-02-2013, 12:45:43 »
Citace
Bavíme se tu o databázích, ne o DBase.
Ja som odchovanec na MS Access. Aj to len lokálne jednoužívateľské použitie DB.
Skúsim realizovať riešenie 3.
Ďakujem.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: