我们有一个包含生产数据的表格:
CREATE TABLE VerifiedUsers (
Mobile varchar(20) NOT NULL,
Email varchar(255) NOT NULL,
Name varchar(255),
PRIMARY KEY (Mobile,Email)
);
我们有一个新要求,需要在此表中保存用户的唯一设备 ID,以便我们根据(手机、电子邮件、DeviceId)而不是(手机、电子邮件)唯一地识别用户。
这个新列 DeviceId 必须为 Nullable,因为我们无法确保每个客户端都会向我们发送 DeviceId。另一方面,我们必须将其作为主键的一部分,因为我们现在可以拥有具有相同(手机、电子邮件)但不同 DeviceId 的多行。
我们应该如何解决这个问题。我们是否应该通过为 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 个字节)。
关于mysql - 如何添加可为空的列作为表的主组合键的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50279752/