Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Náš Lopuch Vám
vytře zrak

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub Database (mysql,...) [ŽP: neomezená] (kategorie Programování) moderuje melkor_unlimited.
Archiv
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: hnigdsb
[ 1008 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
bredy 3.12.2007 15:52  601
huhOno se může jednat o kombinaci řešeních. Pro rychlý přístup je možná lepší mít vždy aktivní tabulku a pak historickou. Historická tabulka obsahuje záznamy s datumy, tak jak jsem popsal, aktivní tabulka obsahuje normálně záznamy tak jak je běžné.

Ovšem každá změna znamená nejprve přesunout měněné záznamy do historie a pak provést update. Což by ovšem nemuselo být tak těžké. Stačí:

table(idx,a,b,c,d)
hist_table(idx,a,b,c,d,plati_do}

INSERT INTO hist_table SELECT *, NOW() FROM table WHERE cond;
UPDATE table SET .... WHERE cond;

Pro výpis historie pro určité datum by se muselo udělat
SELECT DISTINCTROW idx,a,b,c,d FROM hist_table WHERE plati_do > vybrane_datum ORDER BY plati_do DESC

Tím supluji chybějící plati_od, protože se mi zobrazí vždy nejnovější záznam starší než zadané datum. Nicméně pokud by to byl problém, pak je nutné pravděpodobně vést plati_od v aktivní tabulce, aby se pak mohlo toto datum přepsat do historie jednoduchým SELECTem.

Další varianta jak vyrobit plati_od za předpokladu že jej chci mít v hist_table.

INSERT INTO hist_table SELECT *,MAX(hist_table.plati_do),NOW() FROM table LEFT JOIN hist_table ON table.idx = hist_table.idx WHERE cond

Ale LEFT JOIN nebudí moc důvěru v efektivitě.
knedle knedle online - Krabice živých 3.12.2007 15:51  600
dotaz na bredyho reseni:

primarni klic je pak co? id (bez ai) a casove razitko zacatku?

nebo je tam standardni prim klic autoinc - ale pak by to muselo mit take jeste nejake jine pseudoid - ve stejne tabulce nebo jine?
edmundl 3.12.2007 15:21  598
konkrétní řešení je samozřejmě závioslé na tom, co přesně se od toho požaduje. Dotaz byl zadán velmi obecně a tak je možné použít i více řešení.
huh huh 3.12.2007 15:14  597
Me teda nejnormalnejsi prijde Bredyho reseni
pepak pepak - Pepak.net 3.12.2007 12:13  596
Tak vidis.
bredy 3.12.2007 11:57  595
pepakJá tohle viděl v informačním systému FNKV (Fakultní Nemocnice Královské Vinohrady)
edmundl 3.12.2007 11:57  594
Varianta 1 je sice pracnější na začátku, ale při práci s historickými daty se ti to vrátí, protože s nimi můžeš pracovat skoro stejně jako s živými. To ve variantě 2 bude dohledávání stavu mnohem pracnější.
knedle knedle online - Krabice živých 3.12.2007 11:25  593
jsou jeste nejake vyhody nevyhody:

1/ kopie zive tabulky
- vyhoda: prehlednost
- nevyhoda: pracnost

2/ jedina tabulka historie, kam se ukladaji data ze vsech tabulek
- vyhoda: mensi pracnost
- nevyhoda: neprehlednost, snad i velikost tabulky co do poctu zaznamu (?)

-- u teto je otazka, zda ukladat vsechna pole, nebo jen ty zmenena
- pokud nekompletni, spatne by se asi dohledavali ostatni data stejnho zaznamu
- pokud kompletni, velke narustani dat v teto tab, lze rict, ze i redundance dat


a jeste, pokud se dela takovato historie, dela se to pred novou zmenou (tj. zpetne - aktualni stav neni v tabulce historie) nebo hned po zmene (aktualni stav je i v tabulce historie)
pepak pepak - Pepak.net 3.12.2007 11:22  592
Bredy: To neni dobre reseni. Databaze jsou sice delane, aby se vyporadaly s velkym mnozstvim zaznamu, ale presto je lepsi ty neaktivni necpat do zive databaze. To by se snad hodilo v pripade, ze VZDY potrebuju delat s historii, ale to plati jen u velice malo tabulek.
bredy 3.12.2007 11:15  591
pepak, knedleNebo v každé tabulce mít záznamy:
tabulka(... položky ..., platí_od, platí_do)
Pak stačí filtrovat podle datumu, a zobrazovat záznamy, které jsou v zadaném rozsahu.

Nevýhodou je, že každá změna znamená nový záznam, byť se změnilo něco v jednom sloupci.
pepak pepak - Pepak.net 3.12.2007 11:00  590
Bud jedna kopirovaci tabulka pro kazdou zivou tabulku (prehledne, ale pracne) nebo jedna globalni tabulka historie(jmeno_tabulky, jmeno_pole, [puvodni_hodnota], [nova_hodnota], cas_zmeny)
knedle knedle online - Krabice živých 3.12.2007 10:42  589
dotazasi na princip:

pokud chci mit kompletni historii stavu zaznamu "jak sel cas" v databazi - jakym stylem se to da udelat? je vice moznosti?

mam mssql, v ni cca 40 tab - klasicka relacni db

jedine rozumne co me napada, je "kopie" vsech tabulek, urcena prave pro ukladani historie - napr:
tabulka "uzivatel" obsahuje aktualni realna data, pokud by se data 1 zaznamu zmenila, byla by zkopirovana do tabulky "archiv_uzivatel", kde by bylo navic casove razitko



jsou pouzivany jeste jine zpusoby resici tohle zadani? (kompletni historie zaznamu u cele db)
melkor_unlimited melkor_unlimited Ltd. 15.11.2007 07:24  588
Kdokoliv [586]: Já to tedy beru, šéfe.
makovec makovec Chuck Norris snědl jídlo od Babicy - a ještě si přidal 14.11.2007 15:23  587
a tady teda nechci .o)
kdokoliv Kdokoliv Nevidím důvod dělat cokoliv bezdůvodně. - http://kkl2401.wz.cz 14.11.2007 15:17  586
Spravcovska poznamkaHleda se moderator, zajemci projevte se.

[ 1008 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt