Postgresql
PostgreSQL 代理鍵:使用序列/bigint 還是 OID?
我正在研究我在 PostgreSQL 派生的 DBMS ( Citus ) 上設計的表中是否需要代理鍵。OID 夠用嗎?使用它們而不是創建
bigint
欄位和序列有缺點嗎?
OID
來自文件http://www.postgresql.org/docs/9.4/static/datatype-oid.html
oid 類型目前實現為無符號四字節整數。因此,它不足以在大型數據庫甚至大型單個表中提供數據庫範圍的唯一性。因此,不鼓勵使用使用者創建表的 OID 列作為主鍵。OID 最好僅用於對系統表的引用。
bigint 和一個序列
正如“_a_horse_with no_name”建議使用 bigserial
- 小序列 2 字節
- 串列 4 字節
- 大序列 8 字節
注意:smallserial 和 serial 似乎沒有克服上面指定的 4 個字節的大小限制。可能其他人可以填寫。
數據類型 smallserial、serial 和 bigserial 不是真正的類型,而只是一種用於創建唯一標識符列的符號方便(類似於某些其他數據庫支持的 AUTO_INCREMENT 屬性)
http://www.postgresql.org/docs/9.5/static/datatype-numeric.html#DATATYPE-SERIAL