2011-04-19 63 views
0

我設計了一個WCF服務我建立數據庫,並有一個關於我應該如何設計它的問題:
我有一個Subscriptions表,Events表和lu_Type表。基礎數據庫設計問題

**Subscription**     **lu_EventType** 
SubscriptionId int ID PK   TypeId  int ID PK 
CustomerId  int FK   Description nvarchar 
TypeId   int? FK 
Description nvarchar 

**Event** 
EventId  int ID PK 
CustomerId  int FK 
SubscriptionId int FK 
EventTime  datetime 
TypeId   int? 
Description nvarchar 

一個Customer可以有多個Subscription的。
TypeId可爲空,因爲客戶可以訂閱兩種類型的訂閱。已知事件(將來自lu_Type表)和未知事件,其中Subscription具有空TypeId並且只有說明。
一旦登錄了Event,它將顯示在基於Customer的網站上。

  1. 對於已知的事件,當Event將有TYPEID,我應該包括在記錄中的EventDescription?或者我應該讓Description保持空白?如果包含它,它會佔用更多的空間,但它會使檢索/顯示更容易。我對內部運作知之甚少,無法知道其中的任何一個是否存在問題。或者有沒有更好的途徑? (但我只能有一個Event表,它需要是通用的。)想法?

回答

1

如果具備以下條件:

  • 事件的描述是直接關係到類型
  • 相同類型的所有事件應該有相同的描述
  • 改變爲事件類型的描述應該在現有的事件反映

你應該我在事件上包括Description,但是加入事件類型表以獲取它。

否則,說明應該包含在事件記錄中,因爲它與事件類型沒有直接關係。

+0

是的,是的,是的。你讓我意識到我不需要事件上的TypeId或Description,因爲我有SubscriptionId,並且可以加入。 - - - 所以在一般的db設計中,做JOIN總比重複列更好,是正確的? – Marcus 2011-04-19 15:10:18

+0

@G_M:**絕對**。如果可以避免的話,您永遠不想複製數據庫中的數據,並且幾乎可以避免所有(如果不是全部)情況下的數據。這是關係數據庫「關係」的一部分;您使用實體之間的關係來檢索數據,而不是複製數據。 – 2011-04-19 15:15:23

1
  • 客戶可以訂閱許多事件
  • 一個事件可以交付給很多客戶
  • 事件可以是已知未知。已知事件是事件(子類型)。
  • 已知事件將所有列作爲未知事件和更少特定列。

enter image description here