2012-12-05 43 views
1

我對數據庫設計感到困惑。我在其中一家公司擔任開發人員,並且在數據庫設計中與我的老闆討論了以下問題。數據庫的設計,我必須處理的部分包含兩個表:哪一個更好的數據庫設計?

Employees Table: Username, Name, JobTitle, OrganizationCode 
Organizations Table: OrganizationCode, Name... 

這兩個表將採取所有員工,部門,公司部門和單位的照顧。大多數由其他開發人員設計的數據庫都是以這兩種表格之間沒有關係的方式設計的。

對我來說,我告訴我的老闆最好在這兩張表之間建立關係(這意味着OrganizationCode是組織表主鍵的外鍵)。因爲執行約束,完整性以及編寫查詢會很容易。

他拒絕了,沒有給我一個正確的理由。我們在我的部門擁有超過2000名員工,公司中約有50000多名員工。所以我認爲他所推薦的設計將佔用巨大的空間,而且從應用程序開發的角度來看將會很難處理。

你有什麼建議傢伙?

+0

這不是很清楚,我的兩種設計方案是什麼。您建議將組織代碼添加到員工表中嗎?如果是這樣,有什麼替代建議,爲什麼替代方案需要一個巨大的空間? –

+0

這兩個選項是:選項#1:兩個表之間存在關係。選項#2:沒有關係。 –

+0

你能否澄清你的意思是「表格之間的關係」?你的意思是一個限制嗎? –

回答

1

員工必須以某種方式與組織單位相關聯,問題的關鍵是是否保留該關係的歷史記錄。如果您不需要保存歷史記錄,那麼您可以使用員工表中的組織代碼,否則您需要組織和員工之間的連接表來顯示員工 - 部門關係的歷史記錄。

另一個考慮是是否保留組織間關係的歷史記錄,這需要另一個連接表。

1

你的設計比你的老闆更好。通過老闆的設計,員工可以鏈接到不存在的組織單位。更新組織信息也是一件痛苦的事情,這些更新必須發生在兩個地方。

在當前時代,空間並不是一個真正的重要因素,但系統的可維護性和確保數據的正確性應該成爲確定兩個表之間適當關係的決定性因素。

如果我是你,我會詢問你的老闆爲什麼反對執行這種關係。

4

您和您的老闆都需要了解分析和設計之間的差異。兩個表格之間關係的設計從屬於實際情況以及對數據庫的信息需求。

當您從數據的角度分析主題(所謂的「現實世界」)時,將整個主題空間劃分爲實體和這些實體之間的關係。然後,您將每個值作爲屬性的實例存儲在數據庫中。每個屬性描述實體或關係的某個方面。每個屬性也有一個域,它是該屬性的可能值集合。所有這些構成了概念數據模型,其特徵被發現,而不是被髮明。

然後,當您開始進行數據庫設計時,根據您對實體,關係和屬性的瞭解來設計列,表和外鍵。給定一個概念模型和一些其他細節,你當然需要知道如何做出好的設計。

所以,你的情況,什麼是主體探析事是什麼樣子?員工是否在部門工作?這是一種關係。一個部門可以有很多員工在裏面工作。一名員工可以在多個部門工作嗎?如果是的話,那麼你有多對多的關係。如果是這樣的話,你需要一個包含兩個外鍵的聯結表。如果不是,那麼你的設計將充分反映多對一的關係。

通過措辭這樣的問題,在題材方面,你可以與你的上司是對真實世界的結構達成共識。然後,您可能能夠就外鍵如何幫助表示現實達成共識。或者你的老闆可能滿足於將數據庫(重新)設計留給你,只要他/她保留對概念模型的否決權。