[英]Table with only one column or add a numeric primary key?
假設我需要一個帶有帳號ID的簡單表,而不需要其他信息。 有兩種方法可以做到:
id varchar(255) PRIMARY KEY
或者添加數字主鍵:
id int PRIMARY KEY
accountId varchar(255) UNIQUE NOT NULL
這兩種方法有哪些優點/缺點,您可以選擇哪種方法?為什么?
第一個解決方案對可維護性有什么影響(如果我們需要更改單行的id)和性能?
區別在於PRIMARY KEY約束意味着/強制執行NOT NULL CONSTRAINT。 在第一個示例中, varchar(255)
將被有效地提升為varchar(255) NOT NULL
DROP SCHEMA tmp CASCADE;
CREATE SCHEMA tmp ;
SET search_path=tmp;
CREATE TABLE pk
( id varchar(255) PRIMARY KEY
);
CREATE TABLE uniq
( id int PRIMARY KEY
, accountid varchar(255) UNIQUE
);
INSERT INTO pk (id) VALUES(NULL);
INSERT INTO uniq (id, accountid) VALUES(1, NULL);
結果:
DROP SCHEMA
CREATE SCHEMA
SET
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "pk_pkey" for table "pk"
CREATE TABLE
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "uniq_pkey" for table "uniq"
NOTICE: CREATE TABLE / UNIQUE will create implicit index "uniq_accountid_key" for table "uniq"
CREATE TABLE
ERROR: null value in column "id" violates not-null constraint
INSERT 0 1
由於PK( - >> NOT NULL)約束,第一個插入失敗; 第二個成功。
如果該列的內容是唯一的(這似乎是ID的情況),則繼續使其成為主鍵,否則創建另一個數字列作為主鍵。
問候,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.