postgres=# SELECT DATE '2007-02-29'; ERROR: date/time field value out of range: "2007-02-29"Takto se chova vychovana databaze. Nicmene MySQL lze take prepnout do ANSI kompatibilniho modu, kde se chova slusne. Je otazkou, kolik uzivatelu ji do tohoto rezimu prepne. Jinak to ja uz jsem toho videl. Borec uz to mel zmakle .. repair integrity, kterou ovsem nemel implementovanou, zvladl rucne za 10 minut. Nestacil jsem se divit, bylo videt, ze to nedela prvne. Jen jsem si rikal, kdyby to mel v transakci, tak nic takoveho nemusel delat rucne. A opet MySQL transakce podporuje, ale kolik aplikaci je psanych tak, ze pouziva transakce. Coz neni zalezitost jenom MySQL. Zazil jsem jineho borce, ktery tvrdil, ze transakce jen brzdi system na MSSQL a ze on je zasadne pouzivat nebude, neb neco jako izolaci nebo atomicnost nepotrebuje, neb ten system jede tak rychle, ze ta sance ze databaze vypadne a ono se to rozhodi, je minimalni - a jedna se o Microsoft Certificated inzenyra. Skutecne ta sance, ze dojde k rozpadu databaze je minimalni, jenomze pokud k ni uz dojde, tak mate vypadek a nepomuze vam ani deset svatych, jedine zaloha. S transakcemi je to riziko radove mensi. Cokoliv jde zbastlit, poctive remeslo je ovsem o necem jinem.
Krom toho muzete mit dneska uz DB/2 zdarma a to i pro produkcni nasazeni (bez replikace/failoveru). DB/2 ale umi online backup, rollforward recovery a to se da pouzit misto builtin failoveru. DB/2 je databaze v tride s Oraclem.Online backup snad už dneska umí všichni, ne? InterBase (tehdy ještě pod tímhle názvem :-)) to uměla už před dvaceti lety, stejně jako dnešní odvozené databáze. Její administrace určitě nepatří k nejnáročnějším, stejně jako support (spíš člověk občas zapomene server v koutě a pak po půlroce zjistí, že opravdu pořád ještě funguje :-)). Nechápu, proč hopsat z MySQL rovnou na Oracle...
• Supports up to 4GB of user data (in addition to Oracle system data) • Single instance only of Oracle Database XE on any server • May be installed on a multiple CPU server, but only executes on one processor in any server • May be installed on a server with any amount of memory, but will only use up to 1GB RAM of available memoryNo to je výhra. ;-) S Firebirdem redo log nepotřebuju -> ušetřím na těch dvou discích. ;-) Raptor je taky polospotřební zboží, dyť už je dělají i "s okýnkem", bůh ví, co je to za mechaniku. :-/ A to "chytré pole" je přeci jen cenově někde trošku jinde, ne? BTW, žil jsem v domnění, že RAID 5 pro databázi s mnoha zápisy nemá smysl.
Zamestanci(id, oddeleni_id, jmeno, prijmeni, mzda) Oddeleni(id, nazev) -- složený predikát SELECT jmeno, prijmeni, mzda, nazev FROM Zamestnanci z JOIN (SELECT oddeleni_id, max(mzda) AS max_mzda FROM Zemestnanci GROUP BY oddeleni_id) s ON z.oddeleni_id = s.oddeleni_id AND z.mzda = s.max_mzda JOIN Oddeleni o ON o.id = z.oddeleni_id;podle me ta druha podminka v tom prvnim joinu ('...AND z.mzda = s.max_mzda ...') uz nemusi byt, ale mozna se mylim, priklad jsme nezkousel jinak kazdemu, kdo chce poradne proniknout do taju SQL bych rozhodne doporucoval knihu Introduction to SQL. Sice je dost rozsahla, ale fakt stoji za to, fucked fakt
SELECT jmeno, prijmeni from Zamestnanci WHERE (oddeleni_id, mzda) in (SELECT oddeleni_id, max(mzda) AS max_mzda FROM Zamestnanci GROUP BY oddeleni_id)Bez te druhe podminky slouzi sice 'oddeleni_id' k propojeni obou tabulek ('z' a 's'; coz jsem si myslel, ze staci, kdyz v 's' se vybira max(mzda)), coz ovsem nebrani mysql v tom, vypsat vsechny zamestnance ('s' obsahuje vsechna 'oddeleni_id'; podminka rovnosti plati pro vsechny zamestnance), takze je opravdu nutna ta druha podminka. Fucked ze jo
CREATE OR REPLACE FUNCTION generate_series(start integer, konec integer) RETURNS SETOF integer AS $$ BEGIN FOR i IN start .. konec LOOP RETURN NEXT i; END; RETURN; END; $$ LANGUAGE plpgsql;
SELECT jmeno, prijmeni, CASE WHEN pocet IS NULL THEN 0 WHEN pocet <= 10 THEN 0 ELSE pocet END FROM Zamestnanci z LEFT JOIN PracovniNeschopnosti p ON z.id = p.zam_id;