Marcelito:
Velkost tabuliek je sice rozumne optimalizovat, ale netreba ist do extremov. Pokial das na primarny kluc klasicky int, tak spravis lepsie ako tam davat nejaky smallint a pocase sa cudovat, ze preco to nejde. Uvedom si, ze pri 1 000 000 zaznamoch (a to v beznej aplikacii ich tolko mat asi nebudes) by si usetril kolko? 1MB pamete? Ako velmi sa vdaka 1MB v dnesnej dobe urychli system?
Este dodam, ze vecsina ludi (a myslim, ze rozumne) dokonca maju taku tendenciu "setrit" miestom, ze zaznami vobec nevymazavaju, len ich schovavaju (vytvoria si novy field v tabulke, ktory hovori len o tom, ci je zaznam zmazany alebo nie), lebo data (kludne zmazane omylom) su ovela cennejsie ako ta trocha mrhanej pamete (osobne tiez rad takto "mrham" volnym miestom)...
Co sa tyka kodovania hesla - ano, dokonca sa to v praxi priamo pouziva. Vecsinou si ale ludia nerobia vlastne algoritmy, ale pouziju uz existujuce hashovacie funkcie (v php (a som presvedceny ze aj v mysql) mozes pouzit sha1() pripadne starsie md5() pripadne inu hashovaciu funkciu) - len nezabudni dobre zasaltovat
.
Vytvarat si vlastnu moze aj nemusi byt najlepsi napad. Ono ludia, ktory sa tomu fakt venuju a su matematicky "bohovia" asi vymyslia nieco lepsie ako to, co sa podari tebe. U teba tym padom asi vznikne viac kolizii/lahsie sa bude dat heslo spetne rozsifrovat. Na druhej strane budes mat nieco svoje vlastne, co by pre utocnika znamenalo robit specialne desifrovanie "na mieru". Osobne by som ale aj tak viac doveroval matematikom.
K napadu zamikania - preco nepouzit autoincrement priamo z mysql? Ten si uz to zamikanie robi sam. Caste zamikanie tabulky tiez nieje celkom najlepsi napad, lebo vyrazne znizujes vykon (potom ta optimalizacia tabulky co si spominal hore nema ani za mak vyznam - tu sa tie casove straty prejavia ovela viac).
Popravde sa ale musim priznat, ze som nie celkom pochopil, k comu to zamikanie vobec potrebujes. Rad by som ta ale este upozornil na existenciu tranzakcii - v reali vecsinou ked chces locknut tabulku, tak v skutocnosti chces len pouzit transakciu (narychlo som nasiel nieco k transakciam napr. tu
http://dev.mysql.com/doc/refman/5.0/en/commit.html). Pomocou nich vies viac prikazov spustit "ako jeden".
Pozor si ale treba dat, ze MySQL podporuje transakcie (z beznych) len s enginom InnoDB. Takze treba na tento nastavit (mozno pouzivas engine MyIsam, ktory transakcie nepodporuje).
Nebudem sa rozpisovat v rozdieloch medzi tymito enginmi (vsak na ne si sa ani nepytal), to je na celu knizku, ale velmi skratkovito/priblizne. Vyhoda InnoDB - transakcie, lahsie zotavenie po havarii. Nevyhoda - moznost vzniku deadlocku (cela aplikacia zahadne zamrzne (pomerne vzacna vec, ked sa nevhodne pouziju transakcie a uzivatel ma smolu) - mozno by bolo pripadne rozumne narychlo o tom nieco pogooglit), o kusok mensia rychlost.