与自动递增的数字相比,电子邮件地址是一个糟糕的初选候选人吗?
我们的web应用程序需要电子邮件地址在系统中是唯一的。所以,我想到使用电子邮件地址为主键。然而,我的同事认为字符串比较将比整数比较慢。
这是一个有效的理由不使用电子邮件为主键吗?
我们使用的是PostgreSQL。
与自动递增的数字相比,电子邮件地址是一个糟糕的初选候选人吗?
我们的web应用程序需要电子邮件地址在系统中是唯一的。所以,我想到使用电子邮件地址为主键。然而,我的同事认为字符串比较将比整数比较慢。
这是一个有效的理由不使用电子邮件为主键吗?
我们使用的是PostgreSQL。
当前回答
是的,如果您使用整数来代替会更好。您还可以将电子邮件列设置为唯一约束。
是这样的:
CREATE TABLE myTable(
id integer primary key,
email text UNIQUE
);
其他回答
是的,如果您使用整数来代替会更好。您还可以将电子邮件列设置为唯一约束。
是这样的:
CREATE TABLE myTable(
id integer primary key,
email text UNIQUE
);
我对postgres不太熟悉。主键是一个很大的主题。我在这个网站(stackoverflow.com)上看到了一些很好的问题和答案。
我认为使用数字主键并在电子邮件列上使用UNIQUE INDEX可以获得更好的性能。电子邮件往往在长度上有所不同,可能不适合主键索引。
在这里和这里读点书。
主键应该是唯一的常量
电子邮件地址随着季节的变化而变化。作为查找的辅助键很有用,但作为主键不太合适。
字符串比较比int比较慢。但是,如果您只是使用电子邮件地址从数据库检索用户,那么这并不重要。如果您有多个连接的复杂查询,那么这很重要。
如果在多个表中存储有关用户的信息,则用户表的外键将是电子邮件地址。这意味着您将多次存储电子邮件地址。
如果只是要求电子邮件是唯一的,那么你可以用该列创建一个唯一的索引。