Portál AbcLinuxu, 1. června 2024 11:33


Dotaz: ako spravne uchovavat historiu v sql

8.2.2023 22:18 frufru
ako spravne uchovavat historiu v sql
Přečteno: 1069×
Odpovědět | Admin
zdravim, potreboval by som poradit ako riesit nasledujuci problem.

mam
tabulku zaznamy kde su stlpce id, datum, kusy, operacia_id
tabulku operacie kde su stlpce id, nazov, sadzba_id
tabulka sadzby kde su stlpce id, hodnota_sadzby, platna_od, platna_do

sadzba sa moze v case menit - ked sa zmeni tak vytvorim novy riadok v tabulke sadzby s rovnakym id a roznou hodnotou sadzby a datumami platnosti.

aky je spravny sposob na ukladanie takychto "historickych" dat?

lebo toto sice funkcne je, ale nepripada mi to ako spravny navrh. navyse takychto stlpcov, kde sa data casovo menia a chcem mat aj ich historiu mam v realnej db viac. vysledny select potom musi okrem spojovacej podmienky, pridat aj podmienku na vyber spravnej sadzby pre dany datum.
SELECT
  *
FROM
  zaznamy z
    LEFT JOIN
      operacie o ON o.id = z.operacia_id
    LEFT JOIN
      sadzba s ON s.id = o.sadzba_id
        AND
      z.datum BETWEEN s.platna_od AND s.platna_do
vopred dakume kazdemu, kto mi pomoze vybrat sa spravnym smerom :-)
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.2.2023 23:21 BoneFlute | skóre: 3
Rozbalit Rozbalit vše Re: ako spravne uchovavat historiu v sql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Je nějaký důvod, proč evidovat platnost pro každý sloupec extra?

Pokud máš splněno, že tě zajímá jen aktuálně platný záznam, nebo naopak historický, tak je možné historické záznamy odlifrovat do extra tabulky (něco jako sadzba_history).

Přijde mi celkem pochopitelné, že když mám historické záznamy, tak musím uvést pro jaké období záznamy chci.

9.2.2023 00:06 frufru
Rozbalit Rozbalit vše Re: ako spravne uchovavat historiu v sql
dovod preco evidovat platnost pre kazdy stlpce extra moze byt napr. pri udajoch o zamestnancoch. zamestnanec moze mat pracovnu poziciu, pracuje na urcitom oddeleni, ma veduceho,atd. moze napr. zmenit iba pracovnu poziciu a ostava na rovnakom oddeleni pod rovnakym veducim, preto kazdy takyto stlpec by mal mat extra evidovanu platnost.
12.2.2023 05:41 BoneFlute | skóre: 3
Rozbalit Rozbalit vše Re: ako spravne uchovavat historiu v sql
Rozumím. V takovém případě bych to dělal přes řádku a nepáral bych se s tím.
AraxoN avatar 9.2.2023 06:29 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: ako spravne uchovavat historiu v sql
Dôvod to môže mať. Napríklad vo fakturačnom systéme. Majme cenu, ktorá sa mení k 1.1., ale v decembri sa fakturuje predpokladaná spotreba v januári, zároveň s vyúčtovaním za december. Vtedy sa môžu rôzne ceny za to isté stretnúť dokonca aj na jednej a tej istej faktúre.
9.2.2023 14:31 frufru
Rozbalit Rozbalit vše Re: ako spravne uchovavat historiu v sql
Odpovědět | | Sbalit | Link | Blokovat | Admin
este podotazka...

mal by som pre tabulku sadzby pouzit unikatny index ktory bude zlozeny z id, platna_od, platna_do za predpokladu, ze hodnota sadzby ktora sa bude v priebehu casu menit a moze byt teoreticky v roznych obdobiach aj rovnaka a zaroven datumy platnosti sa nebudu nikdy prekryvat?

dik za odpovede.
9.2.2023 17:28 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: ako spravne uchovavat historiu v sql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ako riešiš zľavu pre VIP klientov?
debian.plus@protonmail.com
9.2.2023 17:33 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: ako spravne uchovavat historiu v sql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ako chceš riešiť zľavu pri väčšom množstve?
debian.plus@protonmail.com
10.2.2023 20:25 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: ako spravne uchovavat historiu v sql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud s těmi historickými hodnotami potřebujete běžně pracovat, pak to ukládejte tak, jak píšete. Pokud obvykle pracujete s aktuální hodnotou a jenom občas potřebujete zjistit historické údaje, je lepší mít v hlavní tabulce jen aktuální záznam a vedle mít tabulku s historií.

platnost_od a platnost_do budou v tabulce jen jednou, přičemž ničemu nevadí, pokud v záznamech pro různá období budou některé hodnoty stejné. Pokud se ale ty hodnoty mění úplně nezávisle na sobě, pak určitě nepatří do jedné tabulky, takže nebudete mít problém s více platnost_od a platnost_do v jedné tabulce.
23.2.2023 09:28 Superexpert_na_databazy
Rozbalit Rozbalit vše Re: ako spravne uchovavat historiu v sql
Odpovědět | | Sbalit | Link | Blokovat | Admin
V nasej aplikacii historiu udrziavame pomocou views. Mame jednu tabulku so vsetkymi cenami, ktore sa menia v case, cennik(id, datum, schvalovatel, tovar_kategoria_id, tovar_id, cena, dph). Nad touto tabulkou mame porobene views, ktore aplikacii serviruju vzdy poslednu aktualnu cenu. Tak isto cez views robime prehlady, statistiky a reporty.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.