2010-09-29 22 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