PgSQL: Efektivní opakované hledání záznamů, na kter é nevede cizí klíč
Ales Janda <[email protected]> Wed, 8 Jan 2020 13:29:08 +0100 (CET)
| Newsgroups | gmane.user-groups.linux.czech |
|---|---|
| Message-ID | <[email protected]> |
Chtěl bych se zeptat, jak nejlépe navrhnout databázi pro toto: V tabulce mám řádky, které jsou výsledkem nějakého postupného bádání. Jak bádání pokračuje, můžou být některé řádky zastaralé a nahrazeny jinými řádky. Například mám řádky A, B a C a nějakým algoritmem řeknu „z řádků A a C vyplývá nějaká nová informace D“, a nahradím řádky A a C jedním řádkem D (nebo i více řádky). Z řádků B a D třeba vyplyne něco dalšího, tak je nahradím řádkem E. No jo, ale občas si řeknu „tenhle algoritmus byl blbost“, smažu všechny řádky vyrobené tímto algoritmem, a měly by se smazat všechny řádky vyrobené tímto algoritmem, ale i všechny řádky, které vznikly na jejich základě. Například když smažu D, smaže se i E (a zase budou platné A, B a C). Na tohle můžu použít cizí klíč (foreign key) s ON DELETE CASCADE. No jo, ale jak efektivně hledat na aktuálními daty? Tedy nad daty, které nejsou referencovány jinými řádky (resp. nebyly překryty nějakým dalším algoritmem)? Jediné řešení, co jsem našel, je použít LEFT JOIN přes všechny řádky, ale to mi přijde strašně neefektivní; potřebuju jenom poslední verzi řádků (hodněkrát), a ty překryté jenom když se vracím k předchozím verzím (málokdy). Je tedy nějaký způsob indexu „tento řádek je indexován jiným“? Nebo celá ta úvaha je nesmyslná a měl bych to udělat jinak? Dělám v PostgreSQL. Díky. Zobrazit: http://www.abclinuxu.cz/poradna/databaze/show/452180