資料庫的 Primary Key 到底用 Sequential (1, 2, 3, …) 還是 UUID?很多人爭論了很久。

近日有一篇討戰文:https://www.clever-cloud.com/…/Why-Auto-Increment-Is-A-Ter…/

當然也就會引起一番論戰:https://lobste.rs/s/immm9r

我個人也不同意「討戰文」的部分見解。從「架構」的角度,沒有誰絕對好或壞;但若從資料庫「資料結構」的設計思考,還是有脈絡可尋。

我這篇簡報有提到部分見解:http://www.slideshare.net/yftzeng/mysql-postgresql

而我的個人建議是:

  1. MySQL 原則上使用 Sequential,可以是資料庫內建的 Auto Increment 或 UUIDv1 亦或是 Application level 做到類似功能。
  2. PostgreSQL 原則上使用 UUIDv4。

上述建議通常能夠滿足 90% 的應用場景。