2010-09-29 20 views
0

我在想这个,如果我为一个特定大学的学生制作一个网站,我应该把这个ID作为MySQL上的标准ID(整数,自动增量)还是应该给他们的ID作为他们的电子邮件地址是什么,如果学生的电子邮件地址是[email protected],那么他/她的ID是e12234(在我的网站上)。没关系,表演怎么样?MySQL中的ID,标准ID或字母数字?

编辑:另外,有这样的电子邮件地址: [email protected](交换学生) [email protected](这是一个教授)

回答

1

我强烈建议为id(整数,自动增量)单独的独立值。 Id值永远不会更改,永远不会更新。人们随时都会更改电子邮件,有时企业会重新向相同的电子邮件地址发送新用户。

+0

这只适用于特定的大学,因此不可能更改电子邮件地址。 – ilhan 2010-09-29 19:01:31

+1

我无法计算我被告知某个特定需求永远不会改变的次数,只会在以后告诉它。:)即使是这样,我仍然会使用单独的ID。正如@Wrikken和@methodin指出的那样,它会使联接更快。这样做真的没有缺点,是吗? – bzarah 2010-09-29 19:32:31

0

通常你想映射字符串到IDS并引用ID eveywhere

CREATE TABLE `student` (
    `id` int unsigned NOT NULL auto_increment, 
    `email` varchar(150) NOT NULL 
    PRIMARY KEY (`id`) 
) 

这将减少任何参考表的大小的电子邮件表,这将在使用INT代替VARCHAR。

此外,如果您使用部分电子邮件并且用户曾更改其电子邮件,则必须返回每张表并更新其ID。

+0

您的所有参数都有效,但为什么要为电子邮件附加一张表?他可以使用该ID作为主键,并且只需要一个电子邮件地址栏。有效的数据库设计,因为它仍然处于第三范式。你的回答对我来说毫无意义。如果一个用户可以有多个电子邮件地址,但额外的表格会很好,但是您使用引用键作为表格的主键,因此,我没有看到这样做会带来任何性能上的提升,而是为获取电子邮件地址所需的联接性能损失。 – citronas 2010-09-29 18:54:17

+0

你是对的。我错误地命名了桌子。应该是'学生'。固定。 – methodin 2010-09-29 18:57:48

+0

更改电子邮件地址是不可能的,因为它只给学生一次。 – ilhan 2010-09-29 19:02:59

0

如果电子邮件地址在您的人口中是唯一和静态的(并确保它确实是),那么您可以将其设置为主键,并且实际上完全标准化将有利于该选项。然而,有一些陷阱需要考虑:

  1. 人们改变emailaddresses一次。如果一个学生成为教授,或者因为他/她的电子邮件地址而受到骚扰,所以他/她申请了一个新地址并得到了一个?主键不会改变,所以有你的模式。
  2. 消毒emailaddresses需要更多的努力,然后整数。
  3. 根据外键有多少指向这个ID,需要的存储空间可以提高,并加入了关于字符而不是在INT可以在性能上遭受(您应该测试虽然)
+0

由于存储空间和性能我放弃了。 – ilhan 2010-09-29 19:11:36