2014-07-27 294 views
0

我正在開發一個多用戶任務管理器應用程序,但我偶然發現了數據庫模式設計。我有用戶表,類別,當然還有任務表。每個任務只屬於一個類別。所以在DDL中,我需要類別和任務之間的「一對多」關係,對嗎?此外,我幾乎可以肯定,我需要用戶和任務實體之間的「一對多」關係。 (請糾正我,如果我錯了)。至於「類別 - 用戶」的關係,我在這裏認真考慮兩個選擇,我需要你告訴我哪一個是正確的,原因如下:什麼表結構更好?

  1. 的「多到多」,即用戶關係可以有很多類別,反之亦然;

  2. 「一對多」關係,其中每個類別只能涉及一個用戶。在這種情況下,類別表中將會有很多類似名稱的行,例如「工作」,「家庭」等(因爲在類別中很難提供新的和原創的東西) 「用戶」列值。

在這種情況下常見的方法是什麼?

+1

爲什麼你需要一個'category - user'的表?你可以通過加入關於'task_category'和'user_task'的關係表來得到它。 – Barmar

+0

其實你可能是對的。我嘗試着想辦法解決這個問題。你真的認爲我會因爲這樣做而受益嗎? – dKab

+0

我看不到需要將用戶與類別鏈接,除非您希望每個用戶出於某種原因「擁有」或「創建」自己的類別。如果用戶1和用戶2都需要一個名爲「work」的類別,那麼它應該確實是一個共享類別,除非存在特定的原因(例如,如果類別上有其他屬性應該是用戶特定的)。在這種情況下,類別將有一個外鍵給用戶。 –

回答

2

這是一個棘手的問題,因爲兩種方法都有優勢。您可能需要更好地定義您的問題以及您想要完成的任務。

我工作的一個類似的項目,像這樣的結構:

  • 一個用戶表,基本信息
  • 自相關的任務表,允許創建「項目」(與任務沒有父母)和依賴任務(「這個任務不應該開始,直到上一個任務完成」
  • 一個多對多的分配表,連接多個用戶到多個任務(「這項工作必須完成user1和user2一起工作「

這裏您的問題回來了:用戶如何組織他們的待處理任務?

  • 如果您的項目更像是待辦事項列表,則不需要該分配表;堅持你的「每個任務都屬於一個類別」聲明
  • 如果應該允許用戶創建自己的類別,你可能需要創建一個user-categories表,與類別信息和外鍵的用戶表
  • 如果用戶必須選擇從一個共同的列表中選擇先前創建的類別,你並不需要用戶FK
  • 無論如何,如果用戶可以進行分類分配給他們的任務,這個類別表將在分配表的外鍵,所以每個用戶都可以對自己的任務進行分類

根據我的經驗,您應該延遲此類別決定並詢問您的用戶;他們會指出你在正確的方向。

你也可以簡單地創建user-catogories表,因爲它比其他更靈活,更忽略了數據重複。使用與用戶多對多關係的基本類別列表可能是一個壞主意,因爲用戶可能決定重命名某個類別,並且所有其他用戶都將受此操作的影響。

+0

我希望允許每個用戶創建自己的類別並根據需要管理它們,包括重命名和刪除。我應該選擇哪種解決方案?我無法從你的後面掌握你的觀點 – dKab

+1

創建'user-categories'表(id,name,FK給用戶),並從你的任務表中添加一個FK到這個表。 –

相關問題