我们有一张包含生产数据的表格:
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提供一些默认值来解决它,以防它为空吗?
答案 0 :(得分:0)
我建议:
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)
);
主键的组件不能为空。将单个自动增量列作为主键很方便,原因有很多:
答案 1 :(得分:0)
在这种情况下,默认值不会比保持null更有帮助。无论哪种方式,这两个值都无助于识别用户。自动增量主键将是一个理想的解决方案,但只有在您的情况下才允许这样做。