2010-07-06 186 views
3

我有以下情況,想知道您的意見和投入。 我的應用程序有一家公司。每個公司都有很多部門,而這些部門又有很多用戶。 我有一個日曆在所有的水平。因此,公司有一箇中央日曆,每個部門有單獨的日曆,每個用戶都有單獨的日曆。想法是當用戶感興趣的是在該公司的事件時,他/她可以將其添加到他們的calendar.Now,我需要有一個或events.I很多表在想是否數據庫設計問題

  • 我應該有一個表,這將有一個字段來唯一標識每個 實體(公司,部門,用戶),並根據誰查詢,我可以檢索結果 相應
  • 我應該有多個表。公司一張,部門一張, 一張。

所以它更像是有一張桌子對着三張桌子。

感謝

+0

謝謝你的所有輸入。我將分成多個表格。再次感謝:) – felix 2010-07-07 15:47:42

回答

1

查看應用程序的要求 - 如果爲不同級別的事件在本質上是相同的(具有相同的數據需求,行爲),你應該只使用一個表。如果他們會有所不同,請使用不同的表格。

+0

這將是相同的領域。但是如果只有一個表,當我查詢時它會影響性能,因爲我將有更多的記錄來查詢,我會經常查詢它們。 – felix 2010-07-06 05:59:48

+1

@Steve - 您對此有何期望?每週有數百萬條記錄?一年?十年? SQL服務器可以處理數百萬條記錄而不會出現問題,只要您已正確索引表並對性能進行調整即可。 – Oded 2010-07-06 06:05:19

1

我不認爲事件需要知道他們是否屬於公司,用戶部門直接。我會懷疑事件屬於公司,部門或用戶的日曆和日曆?

所以日曆表:

CALENDAR_ID 

然後事件表

EVENT_ID 

和一個 「EVENT_TO_CALENDAR」 表(用於多對多關係的目的:

CALENDAR_ID 
EVENT_ID 

如果用戶可以在公司日曆中看到事件,他們可以說「添加到我的」,這將創建一個新的記錄器d在EVENT_TO_CALENDAR表中,具有相同的EVENT_ID但唯一的CALENDAR_ID。該事件現在鏈接到每個日曆(公司和用戶的)。

+0

+1可用性。看起來像我最優雅的解決方案。 – 2010-07-06 07:41:59

0

我想我會爭取三張桌子。首先,如果你選擇一個表,它將得到三個可爲空的外鍵。這意味着您不能僅僅保證數據庫模型的一致性,但您必須在業務邏輯的某個位置保證它的一致性。其次,隨着時間的推移,您很可能會發現公司日曆與員工或部門日曆略有不同。例如,後者可能需要額外的列。你無法預測這一點。

+0

在Oracle中,您可以添加需要填充COMPANY_ID,DEPT_ID和PERSON_ID中只有一個的檢查約束。同樣,可以設置約束來驗證公司特定的屬性是否已填充。 – 2010-07-06 15:08:27