2009-10-08 26 views
0

我有一個數據庫,其中存儲員工,部門和部門。每個員工可以屬於部門或部門(1對1關係)。爲了存儲這些數據,我創建了三個表:員工,部門,部門。我如何正確連線他們來存儲這種關係。如何設計一個數據庫,員工可以屬於任何部門或部門

最簡單的方法是在Employees表中有兩個可爲空的外鍵(department_id和division_id),但我想知道是否有更好的方法來做到這一點?

回答

2

不一定更好,但另一種方法是將部門和部門建模爲更一般的實體「業務部門」的子類型,然後將員工鏈接到業務部門。

+0

這可能是我會走的路。問題:部門ALSO是否屬於部門?如果是這樣,您將需要BusinessUnits表中的自引用FK。 – 2009-10-08 12:59:26

0

備選答案:

如果你堅持兩個表的部門和部門,分配給員工一個id類型的業務單元和參考的。

添加一個名爲'assignment_type'的表,其中有兩條記錄(今天):division,department。

添加一個名爲'employee_assignment'的表,其中包含三列:employee_id(fk),d_id(fk),assignment_type(fk)。

0

由於您正在與員工和部門打交道,我猜想您並不是一直批量加載這些數據的大量行。基於這個假設,檢索是重要的。

由於存儲這些數據有多種方式,因此您需要考慮需要檢索這些數據的哪些類型的查詢。您需要實施哪些類型的搜索,報告或數據加載。基於此,您應該考慮存儲數據的每種方式以及編寫所需查詢的性能和易用性。如何添加索引等。存儲數據最酷的方式可能最終成爲查詢您需要的方式的主要難點。

0

託尼的業務部門方法是一種方法,特別是如果{Devision,Department}集合在將來可能增長。

另一種方法是使用兩個外鍵方法,但包含一個檢查約束,以便Employee表中的一列且僅有一列爲非NULL。

你可以下去更多的路線 - 例如,如果Department和Devision表中主鍵的域不相交但兼容,則可以在Employees表中創建一個(一組)列,這些列(取決於它們的值)是對部門或分支的引用,然後使用計算列作爲外鍵約束的來源。

所有的都是可行的,你必須用你認爲最自然的方式去做。

相關問題