2011-04-26 86 views
2

我正在做一個數據庫的設計,最終會有成千上萬的用戶。每個用戶都有您的個人資料和特定數據關聯。數據庫建模-mysql

在您看來,最好的做法是爲id,用戶名,activationLink和hash以及地址,年齡,照片,工作提供另一張桌子,或者最好是所有東西的唯一表格?

感謝您的時間

回答

2

如果:

  1. 全部(或幾乎全部)用戶的所有數據填充
  2. 你們中的大多數查詢所有領域

那麼時間把它們放在一張桌子裏,其他人將它們分開。

在您的模型中,activationLink似乎每次激活只查詢一次,所以我會將它移動到一個單獨的表中(這將允許在帳戶被激活後刪除它)。

地址,年齡,照片和工作通常會與用戶名一起顯示,因此最好將它們合併到一張表中。

+0

在我的模型中,我總是檢查登錄帳戶是否激活。 – 2011-04-26 14:15:02

+0

@Wire:當然,但是你真的需要在激活鏈接被使用後永久存儲嗎?我會創建一個1字節的'isActive BOOL',並在激活執行後放棄鏈接。 – Quassnoi 2011-04-26 14:16:07

+0

我有一個布爾值用於激活或不激活。鏈接後一兩天,可以刪除,是:) – 2011-04-26 14:18:00

1

不要讓您的初始設計限制未來擴展需求的能力(或使其很難)。

  • 目前,用戶可以有一個address所以你可能把它放在users表 - 如果你希望他們能夠存儲的「工作」,並在未來的「家」的地址,或歷史過去的地址?
  • 用戶只能被允許擁有一張照片,但如果您在users.photo中放置了該照片(或其URL),則必須更改數據結構以允許用戶擁有個人資料的歷史記錄照片

正如Quassnoi提到的那樣,這些決策都會對性能產生影響 - 更多的表格意味着更多的複雜性,以及更多的潛在緩慢查詢。不要爲此創建新表,但應仔細考慮數據模型,因爲它很快就會變得很難改變。

任何與user實體嚴格一對一的關係,並且不可能永遠不會改變,並且需要(出生日期是一個很好的例子)歷史的值應該與核心定義一起放在表中。任何潛在的一對多關係(即使它們不是現在爲)都適合他們自己的表格。

+0

謝謝,很好的解釋 - – 2011-04-26 14:28:41