簡體   English   中英

如何添加可為空的列作為表的主組合鍵的一部分?

[英]How to add a nullable column as part of primary composite key of the table?

我們有一張包含生產數據的表:

CREATE TABLE VerifiedUsers (
    Mobile varchar(20) NOT NULL,
    Email varchar(255) NOT NULL,
    Name varchar(255),
    PRIMARY KEY (Mobile,Email)
);

我們有一個新的要求,我們需要在此表中保存用戶的唯一設備ID,以便我們根據(Mobile,Email,DeviceId)而不是(Mobile,Email)唯一標識用戶。

新列DeviceId必須為Nullable,因為我們不能確保每個客戶端都會向我們發送DeviceId。 另一方面,我們必須使其成為主鍵的一部分,因為我們現在可以具有相同(Mobile,Email)但設備ID不同的多行。

我們應該如何解決。 如果它為null,我們是否應該通過給DeviceId提供一些默認值來解決呢?

我會建議:

CREATE TABLE VerifiedUsers (
    VerifiedUserId int auto_increment primary key,
    Mobile varchar(20) NOT NULL,
    Email varchar(255) NOT NULL,
    DeviceId varchar(255),  -- or whatever
    Name varchar(255),
    UNIQUE (Mobile, Email, DeviceId)
);

主鍵的組件不能為空。 將單個自動增量列作為主鍵很方便,原因有很多:

  • 對於外鍵引用很有用。
  • 跟蹤插入順序。
  • 僅使用4個字節(如果表非常大,則使用8個字節)。

在這種情況下,默認值僅會保持為null便無濟於事。 無論哪種方式,這兩個值都無法幫助識別用戶。 自動增量主鍵將是一個理想的解決方案,但前提是您的情況允許這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM