Zjištění zda záznam je smazatelný rubrika: Databáze: SQL
Zdravím,
Zajímalo by mě zda existuje nějaká db (předpokládám nějakou hodně pokročilou typu Oracle atd...), která je schopna vrátit informaci o tom, zda daný záznam je pro daného uživatele smazatelný. Mám na mysli, že si zjistí, zda je tento záznam použit v nějakých jiných tabulkách jako cizí klíč, pokud je povoleno mazání v kaskádě tak zjistí zda to nezakáže něco jiného v té kaskádě, samozřejmě zjistí zda to není zamezeno tím, že uživatel nemá právo mazat záznamy v nějaké další tabukce z té kaskády atd...
Ta db si to stejně musí zjišťovat v okamžiku mazání, takže by to měla umět zjistit docela rychle.
Chápu, že principiálně bych si to mohl zjistit z INFORMATION_SCHEMA - projít všechny relace k příslušné tabulce, zkontrolovat zda jsou navazující záznamy, pokud ano, jestli se mažou v kaskádě či ne, pokud se mají mazat v kaskádě tak zda na to jsou práva... Nicméně pokud bych to dělal takto ručně třeba pro 50 záznamů na stránce (a podle toho vyhreslil ikonu pro mazání) tak by to asi nebylo nejrychlejší.
2018-06-27 01:20 Doplnění k čemu to je:
Představme si že mám třeba seznam firem. U těchto firem chci udělat mazací ikonu (třeba kvůli GDPR). Primární klíč z firmy je cizím klíčem v tabulce lidi, kde je kaskádovité mazání (smazání firmy smaže i příslušné lidi). A pak tam mám třeba tabulku faktury, kde je také cizí klíč do firmy, ale kaskádové mazání tam samozřejmě není, protože naopak existence faktury zabrání smazání firmy. Samozřejmě, že pro faktury a lidi to lze "ručně zjistit", ale já do budoucnu očekávám, že se tam budou časem přidávat další tabulky kde bude cizí klíč na firmy. A to jak takové, které smazání firmy zabrání (třeba smlouvy) tak takové, kde bude kaskádové mazání (třeba adresy). K tomu "výpočtu" zda tam mazací ikona je nebo ne se mi nechce furt vracet a něco tam dopisovat. Proto bych chtěl vyjít ze schématu db.
A zajímalo by mě jestli se takováto funkcionalita typicky programuje ručně (z information_schema to určitě zjistit jde) nebo jestli na to nějaké db mají nástroje. Třeba by některá db mohla být tak chytrá, že když dám EXPLAIN DELETE FROM firmy WHERE id = xxx mohla říct, že to nejde.
ne nejde to a nepomůže ti k tomu ani katalog, protože mazání resp. nemazání mohou ovlivňovat triggery....částečně to vyřešíš projitím katalogu a kontrolou dat (jak zmiňuješ), ale obecně to fungovat nebude
EDIT: tohle by byla krásná úloha pro rekurzivní dotazy
Pro zobrazení všech 4 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře