2012-06-14 45 views
2

員工表中的主鍵應該是什麼?子表的正確主鍵?

Table Stores 
(PK) StoreID 
{other store columns} 

Table Employee 
StoreID 
EmployeeID 
{other employee columns...} 

[編輯] 我們的設置是這樣的僱員將永遠只屬於一個商店。每個員工都應該有一個唯一的ID(即,即使員工屬於不同的商店,也不應該有相同的ID)。

我認爲PK只應該是EmployeeID,因爲它應該總是唯一的。我的同事認爲PK應該與StoreID + EmployeeID複合,但是(理論上)可能會有重複的員工ID。我並不完全遵循他的推理,但他引用的一件事是表現。我不擔心查詢性能,因爲對於我們的數據庫,Employee表從未超過5000條記錄。我們確實有其他更大的引用StoreID的子表,這是創建這種密鑰的合理原因嗎?

[編輯] 如果你還創建了一個只在EmployeeID上強制唯一性的內部密鑰,那麼複合PK是可以的嗎?也許有多種方式來做到這一點,但我想選擇最被接受的做法。

回答

1

如果您的EmployeeID在所有商店中都是唯一的,那麼它應該是該表的主鍵。就像你說的,否則你會有重複的EmployeeID。我可以看到有StoreID + EmployeeID的唯一原因是,如果每家商店都有自己的員工編號。如果一個人在兩個不同的商店工作,他將需要兩個員工ID,每個商店一個。不過,從你的問題來看,我並不認爲是這樣。

但是,StoreID應該設置爲外鍵關係,假設員工將始終被分配一個StoreID。另外,如果您的同事主要關注性能,則可以向表中添加一個EmployeeID,StoreID索引,以清除任何緩慢的查詢(如果遇到任何問題)。既然你說表格很小,我會等到性能問題出現在添加索引之前。我認爲主要關鍵始終是一個合乎邏輯的組織決策,我不會將績效視爲該決定的一部分。

+0

你的描述正確,empID在整個數據庫中是唯一的。我更新了Q來澄清。我完全同意你的評估,PK需要反映表格的獨特欄目。我不知道我現在是否應該給你答案或稍微等一下,因爲我希望得到更多評論。由於這是口頭上的爭論,我可以指出更好的支持意見。 – Tekito

1

我認爲PK應該是EmployeeID唯一的,因爲它應該始終是 獨特。我的同事認爲PK應該與 StoreID + EmployeeID複合,但是然後(理論上) 可能有重複的員工ID。

你在談論兩個稍有不同的東西。

如果你想只有來標識僱員,那麼主鍵應該可能是employee_id,並且商店的ID號根本不應該在該表中。 但是如果您還想知道某位員工通常在哪個商店工作,則可以在employee表中包含store_id(並將其設置爲NOT NULL),也可以創建單獨的表。

25年來,我一直在做這件事,我經常有人告訴我,一個員工可以在只工作一家商店。這幾乎總是不真實的,甚至在經理們宣誓的時刻也是如此是真的。有一次,我們在一個房間裏與六位以上的員工「討論」這個問題,他們都在不止一家商店工作過。其中一人每星期在五家不同的商店工作。和全部經理知道這一點。當我們指出所有在不止一家商店工作的人時,經理們仍然堅持每個人都只在一家商店工作。 (聳聳肩)

我贊成使用單獨的表來存儲員工目前的付費工作地點。主要原因是管理總是想要除了只是這個裸露的事實,關於這種關係的更多信息。總是。出勤,計時,總是別的。

表中,您至少需要{store_id,employee_id}的組合主鍵。您可能需要更多的列(有時候還有更多的表),具體取決於您想要存儲的關於該位置關係的其他信息。您還需要某種管理程序(您可能會或可能無法自動化)來確保每個員工至少有一個當前付費工作地點。(如果dbms曾支持斷言,則可以刪除管理過程。)

+0

我編輯了我的問題,在規則上更清晰。在我們的案例中,員工總是隻屬於一個商店,EmpID在整個數據庫中應該是唯一的。我的數據庫實際上並不是關於員工和商店,我只是將它們作爲直觀的例子。雖然我同意你的解決方案會延長真正的員工的工作:) – Tekito

相關問題