2016-07-18 52 views
0

我正在製作一個新的實體框架模型,以更清晰和更準確的方式存儲我們的數據。我們目前的數據庫(在Access中)充滿了重複和不可靠的數據,並沒有由數據庫專家來計劃,因此通常會丟失主鍵。它也非常大,所以查詢需要很長時間(即使有索引)。爲數據庫模型中的表設置正確的主鍵

在新的數據庫模型中,我希望它允許一個員工部門的快速輸入,以及快速選擇每個人其他。我們有超過一百萬條記錄的表格,更不用說審計表格了,當然這些表格要大得多。

我的模型有一個以companyID爲主鍵的公司表,一個以contactID作爲主鍵的聯繫表,然後是一個名爲CompanyContact的聯合表,它的companyID和contactID都被設置爲其主鍵。然後我需要將其他表與這個關聯表關聯起來。例如,如果我想存儲員工和聯繫人(可能同時爲多個公司工作)之間的交互,我可以將此主鍵設置爲companyID,contactID和EmployeeID,但我會有3個主鍵。 (我在數據庫中有很多這個問題的其他場景。)

我記得閱讀(某處...)給一個表超過1個主鍵會降低查詢速度。他們建議(根據上述示例)給CompanyContact表一個id字段作爲主鍵和2個外鍵(CompanyID和ContactID),然後將交互表與該id字段相關聯。我更習慣於按照他們推薦的方式進行操作,但已經看到,使外鍵中的多個主鍵停止在根上覆制,而不必在任何地方編碼。

任何人都可以告訴我多少主要領域減慢查詢和最推薦的方法是什麼?提前致謝!

+1

表格最多隻能有一個主鍵。你誤解了你讀的內容。 –

+1

我認爲你的意思是組合鍵而不是多個主鍵 – TheGameiswar

回答

1

您正在考慮組合主鍵與代理鍵。關於這個話題有很多爭論。

複合鍵具有使行唯一的所有字段,並且如果它們都是int或bigint,則它們可以很好地工作,並且如果它們較大(即varchar)字段將不會工作。密鑰長度也有一個最大限度,你必須留下。

代理鍵方法可能會有一個自動增量整數,關鍵字段將有一個唯一的索引,以防止重複。

關於在多家公司工作的員工,最好將公司A的員工視爲與公司B的同一員工分開的實體。如果不是,我會選擇更復雜的設計。人員表格,員工表格,其中相同的一個人員記錄可能涉及許多員工記錄。根據僱傭合同,每個員工記錄一家公司。

我會對聯繫人做同樣的事情。通過這種方式,您的溝通設計簡化且簡潔,同時仍然支持可以識別來自多個公司(供應商,客戶等)的相同「人員」的查詢。

通過這種方式,您提到的表格只需要employeeid和contactid鍵。否則,您需要contactcompany和employeecompany?

只是基於我如何閱讀您的請求的一些想法。一本關於高級實體設計的課程或好書可確保您從一開始就獲得儘可能好的設計,並且可以爲您節省大量時間,以便在您嘗試發現和重構時長期發揮作用。

相關問題