Ze nejdou za sebou nevadi.
Pokud neni unikatni cislo, bude to vadit, pokud budes konkretni vyrobek chtit upravovat. Prikaz pro sql je "vyber mi radek, kde id=124". A kdyz tech radku bude vic? Vybere dva. Ok. A ted mas prikaz, "uloz mi upravena data kde id=124". Ted nebude vedet, ktery z radku ma prepsat.
Ze neni 1-n nevadi, ale bude se podle toho pomaleji vyhledavat, protoze ...
0 - 65.000 je 2 znaky
SU-FPF-2014-12345 (univerzita-fakulta-rok-cislostudenta) je 17 znaku
Porovnat 2 znaky 17 pro 100.000 radku uz muze byt znatelne. Ono, sql si to optimalizuje, takze to treba bude jen dvojnasobny rozdil, ale i tak by ti to mohlo casem vadit.
Cili, bylo by dobre tam mit tam ciselny kod. Kdyz je unikatni, je to ok. Kdyz neni autoincrement, nevadi. Nicmene, klidne muzes udelat sloupec s autoincrement a ted kod vyrobku pouzivat jen ve vyjimecnych pripadech. Vyhodou je, ze kod muzes casem prepsat, ale id radku zustane stejne a i vsechna propojeni.
Mimochodem, nektere typy db umi propojit sloupce v db tak, ze ti nedovoli smazat treba pin, pokud jej pouziva nejaky vyroek a neni treba to hlidat na urovni php a dodatecnymi sql dotazy.