Portál AbcLinuxu, 4. května 2025 10:19
...Pak stačí, aby si nějaký bláznivý manažer vymyslel, že přečísluje oddělení, a je o zábavu postaráno ... to jsou ty typicke priklady, ktere se vykladaji studentum ve skolach a na ruznych kurzech. Nemaji s praxi vubec nic spolecneho.Tenhle příklad jsem uvedl právě proto, že jsem ho v praxi skutečně zažil (naštěstí ne s databází, která by byla takto špatně navržena).
Ono to je totiz tak, ze kdyz si nekdo rozmysli neco precislovat, co je zafixovano na stovkach formularu, telefonich seznamech, prospektech a pod. tak ta prace se zmenou techto dat je 100 x vetsi, nez ten jeden batch, ktery v noci ty udaje v databazi zprehazi.Zrovna to číslo oddělení je v podstatě interní záležitost, která nemusí nikde příliš figurovat (např. pouze na vnitrofiremních účetních dokladech).
Pamatuj: cislo dodavatele jako primarni klic neni chybou!Nemusí být, ale obecně je lepší vyhnout se použití atributu, který přímo nese nějakou eventuálně měnitelnou informaci.
suhlas, kazda tabulka by podla mna mala mat int4/int8 stlpec id, idealne auto-increment idealne unikatny v celej dbPamatuj: cislo dodavatele jako primarni klic neni chybou!Nemusí být, ale obecně je lepší vyhnout se použití atributu, který přímo nese nějakou eventuálně měnitelnou informaci.
123
), iny si napr k cislu priklada info o roku (123/2004
), dalsi stat (SK-123
), atd, atd. Jeden dodavatel moze mat v roznych casovych obdobiach rozne cisla. To, ze si autor sw nevie predstavit inu situaciu, to nie je chyba nasadenia „idealne unikatny v celej db“Proč mi to smrdí objekty?
CREATE TABLE T1 (t1_id INT, t1_txt VARCHAR(100), PRIMARY KEY (t1_id)); CREATE TABLE T2 (t2_id INT, t2_txt VARCHAR(100), t1_id INT, PRIMARY KEY (t2_id)); ... SELECT t1_txt,t2_txt FROM T1 NATURAL JOIN T2;
- mysql neni zrovna vhodna na vetsi ucetnictvi..... flamesisti si to pokusi nejdrive napsat...není vhodná na větší cokoliv (i když verze 5 už je o něco lepší). Čtyřka neumí pohledy a triggery, složitější dotazy jsou pomalé (i v pětce) a má některé další neduhy.
- je dobre si zkontrolovat, ze do database jde to prave kodovani. sice se s tim pocita automaticky, ale webmasteri jaksi ne...Ať žije čaj
CREATE FUNCTION tuid() RETURNS TRIGGER AS $$ DECLARE i RECORD; q text; BEGIN q:=''; FOR i IN SELECT id, condition FROM t LOOP if( q='' ) THEN q:='SELECT * FROM vtx'||i.id||' '; ELSE q:='UNION SELECT * FROM vtx'||i.id||' '; END IF; EXECUTE 'CREATE OR REPLACE VIEW vtx'||i.id|| AS '|| 'SELECT '||i.id||' AS id_t, x.id AS id_x '|| 'FROM x WHERE '||i.condition||' '; END LOOP; EXECUTE 'CREATE OR REPLACE VIEW vtx AS '||q; IF (TG_OP = 'DELETE') THEN return old; ELSE return new; END IF; END; $$ LANGUAGE plpgsql; CREATE TRIGGER tuid AFTER INSERT OR UPDATE OR DELETE ON v FOR EACH STATEMENT EXECUTE PROCEDURE tuid();
Šedivá je teorie, věčně zelený je strom života...
Máte pravdu, normální formy jsou akademická sračka a najdete spoustu praktických situací, kdy je lepší tyto akademické šablony porušit. NICMÉNĚ, považuju za docela nezbytné je znát a uvažovat v jejich intencích - a podle potřeby je promyšleně porušit kvůli efektivitě.
Problém je bohužel v tom, že hromada lidí tudle teorii vůbec nezná a porušuje ji nikoliv se zacílením na výkon, alébrž v důsledku nedostatečného pochopení celé problematiky. A pak vznikají zoufale neoptimalizované produkční systémy.
Ony totiž i ty akademické sračky mají něco do sebe... Pokud opravdu VÍTE co děláte, tak teoreticky optimální návrh změníte. Tragédie (a bohužel mnohočetná) je v tom, že spousta praktiků ani netuší, jak by ten teoreticky optimální návrh mohl vypadat... A pak vznikají děsné zrůdnosti...
..a podle potřeby je promyšleně porušit kvůli efektivitě.což mi připomíná ,,don't forget that Linux became only possible because 20 years of academic OS research was carefully studied, analyzed, discussed and finally thrown away''
Tak toto jsem neznal
No nevim jestli jsou normalni formy bullshit, ale co jsem cetl nekolik skript z FELu apod. instituci o tvorbe databazi, pak tam byla vylozene zminka o tzv. procesu denormalizace a ze nekdy je fackt vyhoda pouzit nizsi normalni formu.
Co se tyce mazani v databazi, pravidla ON DELETE CASCADE ON UPDATE CASCADE jsou skvela, ale nekdy se vazne hodi mit implicitni ON DELETE RESTRICT a promazavat to rucne nekolika na sebe navazujicimi prikazy.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.