2011-08-07 124 views
0

最好的辦法我要實現與不同類型的用戶的系統,我想實現它以這樣的方式什麼是實現這個數據庫

  • 只有ID,電子郵件地址和密碼的用戶表。
  • 兩個不同的表與用戶表以1對1的關係關聯。每個表格定義每種用戶的特定屬性。

這是實現它的最好方法嗎?我應該使用InnoDB存儲引擎?

如果我這樣認識它,我該如何處理Zend Framework中的表格?

回答

1

我不能回答你的問題的第二部分,但你描述的模式在數據模型中被稱爲超級和子類型。如果這是正確的選擇,在不瞭解更多關於這些用戶類型之間的差異以及它們將如何在應用程序中使用的情況下是無法回答的。將邏輯超級/子類型轉換爲物理表格有不同的方法。

下面是一些相關鏈接:
http://www.sqlmag.com/article/data-modeling/implementing-supertypes-and-subtypes
和下一個有關缺陷和(MIS)使用亞型
http://www.ocgworld.com/doc/OCG_Subtyping_Techniques.pdf

的一般的我,從實際的觀點來看,非常不情願按照您的選擇,最常選擇創建一個包含所有列的表格。在大多數情況下,應用程序需要在某些列表中顯示具有特定類型的特定列的所有用戶的許多位置(如果不適用於該類型,則爲空)。它很快導致了非直接的查詢和各種額外的代碼來處理不同的表,它們不值得在「概念上正確」。

我仍然將子類型拆分爲不同表格的兩個原因是,如果子類型如此真實的不同,以至於在一張表格中放置這些子類型並不合邏輯,並且行數太大以至於'不需要'的列,當把它放在一張桌子上實際上開始重要

+0

謝謝你的回答。如果我對性能不感興趣,但只有在將來可以輕鬆擴大項目的可能性?這是最好的解決方案,還是選擇超級和子類型的數據模型是一樣的? –

+0

我的建議:如果你不能提出一個很好的理由,你不能讓一個表中所有列的所有用戶都不會分成多個表 – Eddy

+0

嗯,我不喜歡這個選項,但是您的體驗在未來可以輕鬆擴展嗎?我如何定義不同類型的用戶?用ENUM列?我真的很感謝你的答案。 PS:你看起來很專業。我可以有你的Skype ID嗎? –

0

在php方面,你可以使用Doctrine 2 ORM。很容易與zf集成,並且您可以在您的原則映射中輕鬆地將此表結構實現爲繼承。

相關問題