我在想这个,如果我为一个特定大学的学生制作一个网站,我应该把这个ID作为MySQL上的标准ID(整数,自动增量)还是应该给他们的ID作为他们的电子邮件地址是什么,如果学生的电子邮件地址是[email protected],那么他/她的ID是e12234(在我的网站上)。没关系,表演怎么样?MySQL中的ID,标准ID或字母数字?
编辑:另外,有这样的电子邮件地址: [email protected](交换学生) [email protected](这是一个教授)
我在想这个,如果我为一个特定大学的学生制作一个网站,我应该把这个ID作为MySQL上的标准ID(整数,自动增量)还是应该给他们的ID作为他们的电子邮件地址是什么,如果学生的电子邮件地址是[email protected],那么他/她的ID是e12234(在我的网站上)。没关系,表演怎么样?MySQL中的ID,标准ID或字母数字?
编辑:另外,有这样的电子邮件地址: [email protected](交换学生) [email protected](这是一个教授)
我强烈建议为id(整数,自动增量)单独的独立值。 Id值永远不会更改,永远不会更新。人们随时都会更改电子邮件,有时企业会重新向相同的电子邮件地址发送新用户。
通常你想映射字符串到IDS并引用ID eveywhere
CREATE TABLE `student` (
`id` int unsigned NOT NULL auto_increment,
`email` varchar(150) NOT NULL
PRIMARY KEY (`id`)
)
这将减少任何参考表的大小的电子邮件表,这将在使用INT代替VARCHAR。
此外,如果您使用部分电子邮件并且用户曾更改其电子邮件,则必须返回每张表并更新其ID。
您的所有参数都有效,但为什么要为电子邮件附加一张表?他可以使用该ID作为主键,并且只需要一个电子邮件地址栏。有效的数据库设计,因为它仍然处于第三范式。你的回答对我来说毫无意义。如果一个用户可以有多个电子邮件地址,但额外的表格会很好,但是您使用引用键作为表格的主键,因此,我没有看到这样做会带来任何性能上的提升,而是为获取电子邮件地址所需的联接性能损失。 – citronas 2010-09-29 18:54:17
你是对的。我错误地命名了桌子。应该是'学生'。固定。 – methodin 2010-09-29 18:57:48
更改电子邮件地址是不可能的,因为它只给学生一次。 – ilhan 2010-09-29 19:02:59
如果电子邮件地址在您的人口中是唯一和静态的(并确保它确实是),那么您可以将其设置为主键,并且实际上完全标准化将有利于该选项。然而,有一些陷阱需要考虑:
由于存储空间和性能我放弃了。 – ilhan 2010-09-29 19:11:36
这只适用于特定的大学,因此不可能更改电子邮件地址。 – ilhan 2010-09-29 19:01:31
我无法计算我被告知某个特定需求永远不会改变的次数,只会在以后告诉它。:)即使是这样,我仍然会使用单独的ID。正如@Wrikken和@methodin指出的那样,它会使联接更快。这样做真的没有缺点,是吗? – bzarah 2010-09-29 19:32:31