主鍵的選擇通常有三種方式抑月。
1.業(yè)務(wù)字段违崇。
2.主鍵自增幼衰。
3.程序管理唯一且非空的值用來手動賦值靴跛。
那么我們在表結(jié)構(gòu)中應(yīng)該如何選擇正確的字段來作為主鍵呢?
任何表結(jié)構(gòu)的設(shè)計都不應(yīng)該脫離實際的業(yè)務(wù)場景渡嚣,脫離業(yè)務(wù)的設(shè)計不外乎等于耍流氓梢睛。
由于業(yè)務(wù)避免不了變更,所以一般在表結(jié)構(gòu)設(shè)計中盡量避免用業(yè)務(wù)字段來做為主鍵识椰。MySQL innodb的數(shù)據(jù)存儲結(jié)構(gòu)是B+樹绝葡,也就意味著主鍵長度越小,普通索引的葉子節(jié)點也就越小裤唠,普通索引占用的空間也就越小挤牛。所以從性能和存儲空間方面考慮,自增主鍵往往是個不錯的選擇种蘸。但事無絕對墓赴,如果數(shù)據(jù)是存在單表中并不涉及到分布式的考慮,這樣選擇是可以的航瞭。但如果要進行數(shù)據(jù)的分布式存儲就要考慮主鍵沖突的問題诫硕。而解決此問題的方式則就需要程序管理唯一值來進行手動賦值,而手動賦值的弊端就是增加了程序的復(fù)雜度刊侯。
當(dāng)我們知道了每種主鍵的選擇方式章办,在表結(jié)構(gòu)設(shè)計中就不難做出選擇,結(jié)合自己的業(yè)務(wù)場景滨彻、日后的數(shù)據(jù)增長量藕届、系統(tǒng)的復(fù)雜度、日后系統(tǒng)的拓展性來做出較合理的選擇亭饵。
最后休偶,引用友人的一句話:“沒有最佳的系統(tǒng),只有最合理的系統(tǒng)辜羊。技術(shù)一直會變踏兜,我們能做到的是在一定規(guī)模和階段時間內(nèi)考慮周全”。